# Copyright 1998-2013 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"

