# 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"

