# Copyright 1998, 1999, 2007, 2008, 2009, 2010, 2011
# 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
# 

if $tracelevel then {
	strace $tracelevel
	}

#
# test running programs
#

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

if [get_compiler_info not-used] {
    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"

