# Copyright 1998, 1999, 2001, 2007, 2008 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
# 

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"
