# Copyright 2008-2025 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/>.

load_lib "pascal.exp"

standard_testfile .pas

if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

clean_restart ${testfile}

if { ![runto_main] } {
    return
}

set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]

if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
    pass "setting breakpoint 1"
}
if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
    pass "setting breakpoint 2"
}

gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "going to first breakpoint"

gdb_test "print i" ".* = 0" "print i before assigned to 1"

gdb_test "next" "i := 1;" "next to 'i := 1' line"
gdb_test "next" "j := 2;" "next to 'j := 2' line"
# At that point, 
# i should be equal to 1
gdb_test "print i" " = 1" 
# but j should still be equal to zero
if { $pascal_compiler_is_gpc } {
  setup_xfail *-*-*
}
gdb_test "print j" " = 0" "test j value before assignment"

gdb_test "next" "k := 3;" "next to 'k := 3' line"
gdb_test "next" "l := k;" "next to 'l := k' line"

#j should be equal to 2
gdb_test "print j" " = 2"
# k should be equal to 3
gdb_test "print k" " = 3"
# But l should still be zero
if { $pascal_compiler_is_gpc } {
  setup_xfail *-*-*
}
gdb_test "print l" " = 0"

# Test addition
gdb_test "print i + j" " = 3"
gdb_test "print i + k" " = 4"
gdb_test "print j + k" " = 5"
gdb_test "print i + j + k" " = 6"

# Test subtraction
gdb_test "print j - i" " = 1"
gdb_test "print i - j" "= -1"
gdb_test "print k -i -j" " = 0"
gdb_test "print k -(i + j)" " = 0"

# Test unany minus
gdb_test "print -i" " = -1"
gdb_test "print (-i)" " = -1"
gdb_test "print -(i)" " = -1"
gdb_test "print -(i+j)" " = -3"

# Test boolean operators =, <>, <, <=, > and >=
gdb_test "print i + 1 = j" " = true"
gdb_test "print i + 1 <> j" " = false"
gdb_test "print i + 1 < j" " = false"
gdb_test "print i + 1 <= j" " = true"
gdb_test "print i + 1 > j" " = false"
gdb_test "print i + 1 >= j" " = true"

# Test multiplication
gdb_test "print 2 * i" " = 2"
gdb_test "print j * k" " = 6"
gdb_test "print 3000*i" " = 3000"

#Test div and mod operators
gdb_test "print 35 div 2" " = 17"
gdb_test "print 35 mod 2" " = 1"

# Test several operators together
gdb_test "print i+10*j+100*k" " = 321"
gdb_test " print (i + 5) * (j + 7)" " = 54"

# 'set i' does not work, as there are set sub-commands starting with 'i'
# Thus we need to use 'set var i'
gdb_test "set var i := 2" " := 2"
gdb_test "print i" " = 2" "testing new i value"

gdb_test "cont" \
	 "Breakpoint .*:${bp_location2}.*" \
	 "Going to second breakpoint"
gdb_test "print i" \
	 ".* = 5.*" \
	 "value of i after assignment"
