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

