| # Copyright 1998, 1999, 2001 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 2 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, write to the Free Software |
| # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| |
| # Please email any bugs, comments, and/or additions to this file to: |
| # bug-gdb@prep.ai.mit.edu |
| |
| # 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 prms_id 0 |
| set bug_id 0 |
| |
| 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 "set variable x=14" "" |
| gdb_test "set variable y=2" "" |
| gdb_test "set variable z=2" "" |
| gdb_test "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 "set variable x=10" "" |
| gdb_test "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" |