# Copyright 1998, 1999, 2001, 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 . # 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 # if $tracelevel then { strace $tracelevel } # # test running programs # set testfile "int-type" set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } { untested arithmet.exp return -1 } gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} # # 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"