1# Copyright 1998, 1999, 2001, 2007, 2008, 2009, 2010, 2011 2# Free Software Foundation, Inc. 3 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 3 of the License, or 7# (at your option) any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17# This file was written by Elena Zannoni (ezannoni@cygnus.com) 18# Rewritten to use gdb_test by Michael Chastain (chastain@redhat.com) 19 20# This file is part of the gdb testsuite 21# 22# tests for correctness of arithmetic operators, associativity and precedence 23# with integer type variables 24# 25 26if $tracelevel then { 27 strace $tracelevel 28 } 29 30# 31# test running programs 32# 33 34set testfile "int-type" 35set srcfile ${testfile}.c 36set binfile ${objdir}/${subdir}/${testfile} 37 38if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } { 39 untested arithmet.exp 40 return -1 41 } 42 43gdb_exit 44gdb_start 45gdb_reinitialize_dir $srcdir/$subdir 46gdb_load ${binfile} 47 48 49# 50# set it up at a breakpoint so we can play with the variable values 51# 52 53if ![runto_main] then { 54 perror "couldn't run to breakpoint" 55 continue 56} 57 58# 59# test expressions with "int" types 60# 61 62gdb_test_no_output "set variable x=14" 63gdb_test_no_output "set variable y=2" 64gdb_test_no_output "set variable z=2" 65gdb_test_no_output "set variable w=3" 66 67gdb_test "print x" "14" 68gdb_test "print y" "2" 69gdb_test "print z" "2" 70gdb_test "print w" "3" 71 72gdb_test "print x+y" "16" 73gdb_test "print x-y" "12" 74gdb_test "print x*y" "28" 75gdb_test "print x/y" "7" 76gdb_test "print x%y" "0" 77 78# x y z w 79# 14 2 2 3 80 81# Test associativity of +, -, *, % ,/ 82 83gdb_test "print x+y+z" "18" 84gdb_test "print x-y-z" "10" 85gdb_test "print x*y*z" "56" 86gdb_test "print x/y/z" "3" 87gdb_test "print x%y%z" "0" 88 89# test precedence rules on pairs of arithmetic operators 90 91gdb_test_no_output "set variable x=10" 92gdb_test_no_output "set variable y=4" 93 94# x y z w 95# 10 4 2 3 96 97gdb_test "print x+y-z" "12" 98gdb_test "print x+y*z" "18" 99gdb_test "print x+y%w" "11" 100gdb_test "print x+y/w" "11" 101gdb_test "print x-y*z" "2" 102gdb_test "print x-y%z" "10" 103gdb_test "print x-y/z" "8" 104gdb_test "print x*y/z" "20" 105gdb_test "print x*y%w" "1" 106gdb_test "print x/y%w" "2" 107 108# test use of parentheses to enforce different order of evaluation 109 110gdb_test "print x-(y+w)" "3" 111gdb_test "print x/(y*w)" "0" 112gdb_test "print x-(y/w)" "9" 113gdb_test "print (x+y)*w" "42" 114