1201062Sluigi# Copyright 1998, 1999, 2007, 2008, 2009, 2010, 2011
2201062Sluigi# Free Software Foundation, Inc.
3201062Sluigi
4201062Sluigi# This program is free software; you can redistribute it and/or modify
5201062Sluigi# it under the terms of the GNU General Public License as published by
6201062Sluigi# the Free Software Foundation; either version 3 of the License, or
7201062Sluigi# (at your option) any later version.
8201062Sluigi#
9201062Sluigi# This program is distributed in the hope that it will be useful,
10201062Sluigi# but WITHOUT ANY WARRANTY; without even the implied warranty of
11201062Sluigi# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12201062Sluigi# GNU General Public License for more details.
13201062Sluigi#
14201062Sluigi# You should have received a copy of the GNU General Public License
15201062Sluigi# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16201062Sluigi
17201062Sluigi# This file was written by Elena Zannoni (ezannoni@cygnus.com)
18201062Sluigi
19201062Sluigi# This file is part of the gdb testsuite
20201062Sluigi#
21201062Sluigi# tests for correctenss of relational operators, associativity and precedence
22201062Sluigi# with integer type variables
23201062Sluigi#
24201062Sluigi
25201062Sluigiif $tracelevel then {
26201062Sluigi	strace $tracelevel
27201062Sluigi	}
28201062Sluigi
29201062Sluigi#
30201062Sluigi# test running programs
31201062Sluigi#
32246932Sluigi
33201062Sluigiif { [prepare_for_testing relational.exp relational int-type.c {debug nowarnings}] } {
34201062Sluigi    return -1
35201062Sluigi}
36201062Sluigi
37201062Sluigiif [get_compiler_info not-used] {
38201062Sluigi    return -1;
39201062Sluigi}
40201062Sluigi
41201062Sluigi#
42201062Sluigi# set it up at a breakpoint so we can play with the variable values
43201062Sluigi#
44201062Sluigi
45201062Sluigiif ![runto_main] then {
46201062Sluigi    perror "couldn't run to breakpoint"
47201062Sluigi    continue
48201062Sluigi}
49201062Sluigi
50201062Sluigi#
51201062Sluigi# test expressions with "int" types
52201062Sluigi#
53201062Sluigi
54201062Sluigigdb_test_no_output "set variable x=14" "set variable x=14"
55201062Sluigigdb_test_no_output "set variable y=2" "set variable y=2"
56201062Sluigigdb_test_no_output "set variable z=2" "set variable z=2"
57201062Sluigigdb_test_no_output "set variable w=3" "set variable w=3"
58201062Sluigi
59201062Sluigigdb_test "print x" " = 14" "print value of x"
60201062Sluigi
61201062Sluigigdb_test "print y" " = 2" "print value of y"
62201062Sluigi
63201062Sluigigdb_test "print z" " = 2" "print value of z"
64201062Sluigi
65201062Sluigigdb_test "print w" " = 3" "print value of w"
66201062Sluigi
67201062Sluigigdb_test "print x < y" "$false" "print value of x<y"
68201062Sluigi
69201062Sluigigdb_test "print x <= y" "$false" "print value of x<=y"
70201062Sluigi
71201062Sluigigdb_test "print x > y" "$true" "print value of x>y"
72201062Sluigi
73201062Sluigigdb_test "print x >= y" "$true" "print value of x>=y"
74201062Sluigi
75201062Sluigigdb_test "print x == y" "$false" "print value of x==y"
76201062Sluigi
77201062Sluigigdb_test "print x != y" "$true" "print value of x!=y"
78201062Sluigi
79201062Sluigi
80201062Sluigi# Test associativity of <, >, <=, >=, ==, !=
81201062Sluigi
82201062Sluigigdb_test_no_output "set variable x=3" "set variable x"
83201062Sluigigdb_test_no_output "set variable y=5" "set variable y"
84201062Sluigigdb_test_no_output "set variable z=2" "set variable z"
85201062Sluigi
86201062Sluigigdb_test "print x < y < z" "$true" "print value of x<y<z"
87201062Sluigi
88201062Sluigigdb_test "print x <= y <= z" "$true" "print value of x<=y<=z"
89201062Sluigi
90201062Sluigigdb_test "print x > y > z" "$false" "print value of x>y>z"
91201062Sluigi
92201062Sluigigdb_test "print x >= y >= z" "$false" "print value of x>=y>=z"
93201062Sluigi
94201062Sluigigdb_test_no_output "set variable x=2" "set variable x"
95201062Sluigigdb_test_no_output "set variable y=2" "set variable y"
96201062Sluigigdb_test_no_output "set variable z=1" "set variable z"
97201062Sluigi
98201062Sluigigdb_test "print x == y == z" "$true" "print value of x==y==z"
99201062Sluigi
100201062Sluigigdb_test_no_output "set variable z=0" "set variable z"
101201062Sluigi
102201062Sluigigdb_test "print x != y != z" "$false" "print value of x!=y!=z"
103201062Sluigi
104201062Sluigi# test precedence rules on pairs of relational operators
105201062Sluigi
106201062Sluigigdb_test_no_output "set variable x=0" "set variable x"
107201062Sluigigdb_test_no_output "set variable y=2" "set variable y"
108201062Sluigigdb_test_no_output "set variable z=2" "set variable z"
109201062Sluigi
110201062Sluigigdb_test "print x < y == z" "$false" "print value of x<y==z"
111201062Sluigi
112201062Sluigi# 0  2  2
113201062Sluigigdb_test "print x < y != z" "$true" "print value of x<y!=z"
114201062Sluigi
115201062Sluigigdb_test_no_output "set variable x=2" "set variable x"
116201062Sluigigdb_test_no_output "set variable y=3" "set variable y"
117201062Sluigigdb_test_no_output "set variable z=1" "set variable z"
118201062Sluigi
119201062Sluigi
120201062Sluigi# 2 3 1
121201062Sluigigdb_test "print x < y <= z" "$true" "print value of x<y<=z"
122201062Sluigi
123201062Sluigi# 2 3 1
124201062Sluigigdb_test "print x < y >= z" "$true" "print value of x<y>=z"
125201062Sluigi
126201062Sluigigdb_test_no_output "set variable z=0" " set variable z"
127201062Sluigi
128201062Sluigi# 2 3 0
129201062Sluigigdb_test "print x < y > z" "$true" "print value of x<y>z"
130201062Sluigi
131201062Sluigigdb_test_no_output "set variable x=1" " set variable x"
132201062Sluigi
133201062Sluigi# 1 3 0
134201062Sluigigdb_test "print x > y >= z" "$true" "print value of x>y>=z"
135201062Sluigi
136210125Sluigigdb_test_no_output "set variable z=2" " set variable z"
137201062Sluigi
138201062Sluigi# 1 3 2
139201062Sluigigdb_test "print x > y == z" "$false" "print value of x>y==z"
140201062Sluigi
141201062Sluigigdb_test_no_output "set variable x=2" " set variable x"
142201062Sluigigdb_test_no_output "set variable z=0" " set variable z"
143201062Sluigi
144201062Sluigi# 2 3 0
145201062Sluigigdb_test "print x > y != z" "$false" "print value of x>y!=z"
146201062Sluigi
147201062Sluigigdb_test_no_output "set variable x=4" "set x to 4"
148201062Sluigi
149201062Sluigi# 4 3 0
150201062Sluigigdb_test "print x > y <= z" "$false" "print value of x>y<=z"
151201062Sluigi
152201062Sluigi# 4 3 0
153201062Sluigigdb_test "print x >= y == z" "$false" "print value of x>=y==z"
154201062Sluigi
155201062Sluigigdb_test_no_output "set variable x=2" " set variable x"
156201062Sluigi
157201062Sluigi# 2 3 0
158201062Sluigigdb_test "print x >= y != z" "$false" "print value of x>=y!=z"
159201062Sluigi
160201062Sluigigdb_test_no_output "set variable x=0" " set variable x"
161201062Sluigigdb_test_no_output "set variable z=4" " set variable z"
162210125Sluigi
163210125Sluigi# 0 3 4
164210125Sluigigdb_test "print x >= y <= z" "$true" "print value of x>=y<=z"
165201062Sluigi
166201062Sluigi# 0 3 4
167201062Sluigigdb_test "print x <= y == z" "$false" "print value of x<=y==z"
168201062Sluigi
169201062Sluigigdb_test_no_output "set variable x=2" " set variable x"
170201062Sluigi
171201062Sluigi# 2 3 4
172201062Sluigigdb_test "print x <= y != z" "$true" "print value of x<=y!=z"
173201062Sluigi
174201062Sluigi# 2 3 4
175201062Sluigigdb_test "print x == y != z" "$true" "print value of x==y!=z"
176201062Sluigi
177201062Sluigi
178201062Sluigi
179201062Sluigi# test use of parenthesis to enforce different order of evaluation
180201062Sluigi
181210125Sluigigdb_test_no_output "set variable z=0" " set variable z"
182201062Sluigi
183210125Sluigi# 2 3 0
184201062Sluigigdb_test "print x >= (y < z)" "$true" "print value of x>=(y<z)"
185201062Sluigi
186201062Sluigi# 2 3 0
187201062Sluigigdb_test "print x >= (y != z)" "$true" "print value of x>=(y!=z)"
188201062Sluigi
189201062Sluigi# 2 3 0
190201062Sluigigdb_test "print x == (y == z)" "$false" "print value of x==(y==z)"
191201062Sluigi
192201062Sluigigdb_test_no_output "set variable x=1" " set variable x"
193201062Sluigigdb_test_no_output "set variable z=4" " set variable z"
194201062Sluigi
195201062Sluigi# 1 3 4
196201062Sluigigdb_test "print (x == y) < z" "$true" "print value of (x==y)<z"
197201062Sluigi
198210125Sluigi