From 2d8fd90a9cfdf639d4f41ba798446893c6a217b8 Mon Sep 17 00:00:00 2001 From: Pierre Muller Date: Thu, 31 Jan 2008 14:49:23 +0000 Subject: [PATCH] * gdb.pascal/integers.pas: New test program. * gdb.pascal/integers.exp: New testcase. --- gdb/testsuite/ChangeLog | 5 ++ gdb/testsuite/gdb.pascal/integers.exp | 129 ++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.pascal/integers.pas | 51 ++++++++++++++ 3 files changed, 185 insertions(+) create mode 100644 gdb/testsuite/gdb.pascal/integers.exp create mode 100644 gdb/testsuite/gdb.pascal/integers.pas diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4467b6c..204caad 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2008-01-31 Pierre Muller + * gdb.pascal/integers.pas: New test program. + * gdb.pascal/integers.exp: New testcase. + +2008-01-31 Pierre Muller + * gdb.pascal/hello.exp (binfile): Add ${EXEEXT}. 2008-01-30 Luis Machado diff --git a/gdb/testsuite/gdb.pascal/integers.exp b/gdb/testsuite/gdb.pascal/integers.exp new file mode 100644 index 0000000..2c8939e --- /dev/null +++ b/gdb/testsuite/gdb.pascal/integers.exp @@ -0,0 +1,129 @@ +# Copyright 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 . + +if $tracelevel then { + strace $tracelevel +} + +load_lib "pascal.exp" + +set testfile "integers" +set srcfile ${testfile}.pas +set binfile ${objdir}/${subdir}/${testfile}$EXEEXT + +if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} +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" +} + +# Verify that "start" lands inside the right procedure. +if { [gdb_start_cmd] < 0 } { + untested start + return -1 +} + +gdb_test "" ".* at .*${srcfile}.*" "start" + +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 shoud 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 substraction +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" diff --git a/gdb/testsuite/gdb.pascal/integers.pas b/gdb/testsuite/gdb.pascal/integers.pas new file mode 100644 index 0000000..dcc36b3 --- /dev/null +++ b/gdb/testsuite/gdb.pascal/integers.pas @@ -0,0 +1,51 @@ +{ + Copyright 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 . +} + +program integers; + + +function add(a,b : integer) : integer; +begin + add:=a+b; +end; + +function sub(a,b : integer) : integer; +begin + sub:=a-b; +end; + +var + i, j, k, l : integer; + +begin + i := 0; + j := 0; + k := 0; + l := 0; { set breakpoint 1 here } + i := 1; + j := 2; + k := 3; + l := k; + + i := j + k; + + j := 0; { set breakpoint 2 here } + k := 0; + l := add(i,j); + l := sub(i,j); + +end. -- 2.7.4