# Copyright 1998-1999, 2007-2012 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# This file was written by Elena Zannoni (ezannoni@cygnus.com)

# This file is part of the gdb testsuite
#
# tests for correctenss of relational operators, associativity and precedence
# with integer type variables
# 

#
# test running programs
#

if { [prepare_for_testing relational.exp relational int-type.c {debug nowarnings}] } {
    return -1
}

if [get_compiler_info] {
    return -1;
}

#
# set it up at a breakpoint so we can play with the variable values
#

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

#
# test expressions with "int" types
#

gdb_test_no_output "set variable x=14" "set variable x=14"
gdb_test_no_output "set variable y=2" "set variable y=2"
gdb_test_no_output "set variable z=2" "set variable z=2"
gdb_test_no_output "set variable w=3" "set variable w=3"

gdb_test "print x" " = 14" "print value of x"

gdb_test "print y" " = 2" "print value of y"

gdb_test "print z" " = 2" "print value of z"

gdb_test "print w" " = 3" "print value of w"

gdb_test "print x < y" "$false" "print value of x<y"

gdb_test "print x <= y" "$false" "print value of x<=y"

gdb_test "print x > y" "$true" "print value of x>y"

gdb_test "print x >= y" "$true" "print value of x>=y"

gdb_test "print x == y" "$false" "print value of x==y"

gdb_test "print x != y" "$true" "print value of x!=y"


# Test associativity of <, >, <=, >=, ==, !=

gdb_test_no_output "set variable x=3" "set variable x"
gdb_test_no_output "set variable y=5" "set variable y"
gdb_test_no_output "set variable z=2" "set variable z"

gdb_test "print x < y < z" "$true" "print value of x<y<z"

gdb_test "print x <= y <= z" "$true" "print value of x<=y<=z"

gdb_test "print x > y > z" "$false" "print value of x>y>z"

gdb_test "print x >= y >= z" "$false" "print value of x>=y>=z"

gdb_test_no_output "set variable x=2" "set variable x"
gdb_test_no_output "set variable y=2" "set variable y"
gdb_test_no_output "set variable z=1" "set variable z"

gdb_test "print x == y == z" "$true" "print value of x==y==z"

gdb_test_no_output "set variable z=0" "set variable z"

gdb_test "print x != y != z" "$false" "print value of x!=y!=z"

# test precedence rules on pairs of relational operators

gdb_test_no_output "set variable x=0" "set variable x"
gdb_test_no_output "set variable y=2" "set variable y"
gdb_test_no_output "set variable z=2" "set variable z"

gdb_test "print x < y == z" "$false" "print value of x<y==z"

# 0  2  2
gdb_test "print x < y != z" "$true" "print value of x<y!=z"

gdb_test_no_output "set variable x=2" "set variable x"
gdb_test_no_output "set variable y=3" "set variable y"
gdb_test_no_output "set variable z=1" "set variable z"


# 2 3 1
gdb_test "print x < y <= z" "$true" "print value of x<y<=z"

# 2 3 1
gdb_test "print x < y >= z" "$true" "print value of x<y>=z"

gdb_test_no_output "set variable z=0" " set variable z"

# 2 3 0
gdb_test "print x < y > z" "$true" "print value of x<y>z"

gdb_test_no_output "set variable x=1" " set variable x"

# 1 3 0
gdb_test "print x > y >= z" "$true" "print value of x>y>=z"

gdb_test_no_output "set variable z=2" " set variable z"

# 1 3 2
gdb_test "print x > y == z" "$false" "print value of x>y==z"

gdb_test_no_output "set variable x=2" " set variable x"
gdb_test_no_output "set variable z=0" " set variable z"

# 2 3 0
gdb_test "print x > y != z" "$false" "print value of x>y!=z"

gdb_test_no_output "set variable x=4" "set x to 4"

# 4 3 0
gdb_test "print x > y <= z" "$false" "print value of x>y<=z"

# 4 3 0
gdb_test "print x >= y == z" "$false" "print value of x>=y==z"

gdb_test_no_output "set variable x=2" " set variable x"

# 2 3 0
gdb_test "print x >= y != z" "$false" "print value of x>=y!=z"

gdb_test_no_output "set variable x=0" " set variable x"
gdb_test_no_output "set variable z=4" " set variable z"

# 0 3 4 
gdb_test "print x >= y <= z" "$true" "print value of x>=y<=z"

# 0 3 4
gdb_test "print x <= y == z" "$false" "print value of x<=y==z"

gdb_test_no_output "set variable x=2" " set variable x"

# 2 3 4
gdb_test "print x <= y != z" "$true" "print value of x<=y!=z"

# 2 3 4
gdb_test "print x == y != z" "$true" "print value of x==y!=z"



# test use of parenthesis to enforce different order of evaluation

gdb_test_no_output "set variable z=0" " set variable z"

# 2 3 0
gdb_test "print x >= (y < z)" "$true" "print value of x>=(y<z)"

# 2 3 0
gdb_test "print x >= (y != z)" "$true" "print value of x>=(y!=z)"

# 2 3 0
gdb_test "print x == (y == z)" "$false" "print value of x==(y==z)" 

gdb_test_no_output "set variable x=1" " set variable x"
gdb_test_no_output "set variable z=4" " set variable z"

# 1 3 4
gdb_test "print (x == y) < z" "$true" "print value of (x==y)<z"

