| # Copyright 1998-2021 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) |
| # Rewritten to use gdb_test by Michael Chastain (chastain@redhat.com) |
| |
| # This file is part of the gdb testsuite |
| # |
| # tests for correctness of arithmetic operators, associativity and precedence |
| # with integer type variables |
| # |
| |
| # |
| # test running programs |
| # |
| |
| standard_testfile int-type.c |
| |
| if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug nowarnings}]} { |
| 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" |
| gdb_test_no_output "set variable y=2" |
| gdb_test_no_output "set variable z=2" |
| gdb_test_no_output "set variable w=3" |
| |
| gdb_test "print x" "14" |
| gdb_test "print y" "2" |
| gdb_test "print z" "2" |
| gdb_test "print w" "3" |
| |
| gdb_test "print x+y" "16" |
| gdb_test "print x-y" "12" |
| gdb_test "print x*y" "28" |
| gdb_test "print x/y" "7" |
| gdb_test "print x%y" "0" |
| |
| # x y z w |
| # 14 2 2 3 |
| |
| # Test associativity of +, -, *, % ,/ |
| |
| gdb_test "print x+y+z" "18" |
| gdb_test "print x-y-z" "10" |
| gdb_test "print x*y*z" "56" |
| gdb_test "print x/y/z" "3" |
| gdb_test "print x%y%z" "0" |
| |
| # test precedence rules on pairs of arithmetic operators |
| |
| gdb_test_no_output "set variable x=10" |
| gdb_test_no_output "set variable y=4" |
| |
| # x y z w |
| # 10 4 2 3 |
| |
| gdb_test "print x+y-z" "12" |
| gdb_test "print x+y*z" "18" |
| gdb_test "print x+y%w" "11" |
| gdb_test "print x+y/w" "11" |
| gdb_test "print x-y*z" "2" |
| gdb_test "print x-y%z" "10" |
| gdb_test "print x-y/z" "8" |
| gdb_test "print x*y/z" "20" |
| gdb_test "print x*y%w" "1" |
| gdb_test "print x/y%w" "2" |
| |
| # test use of parentheses to enforce different order of evaluation |
| |
| gdb_test "print x-(y+w)" "3" |
| gdb_test "print x/(y*w)" "0" |
| gdb_test "print x-(y/w)" "9" |
| gdb_test "print (x+y)*w" "42" |