# Copyright 1998-2020 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"
