diff options
author | Pierre Muller <muller@sourceware.org> | 2008-01-31 14:49:23 +0000 |
---|---|---|
committer | Pierre Muller <muller@sourceware.org> | 2008-01-31 14:49:23 +0000 |
commit | 2d8fd90a9cfdf639d4f41ba798446893c6a217b8 (patch) | |
tree | 134dd1b783a9e95b065e85406a55a743e9cead8e /gdb/testsuite/gdb.pascal | |
parent | a7fa0dedad7e94f3b9691c71c11860c124c24fcc (diff) | |
download | gdb-2d8fd90a9cfdf639d4f41ba798446893c6a217b8.zip gdb-2d8fd90a9cfdf639d4f41ba798446893c6a217b8.tar.gz gdb-2d8fd90a9cfdf639d4f41ba798446893c6a217b8.tar.bz2 |
* gdb.pascal/integers.pas: New test program.
* gdb.pascal/integers.exp: New testcase.
Diffstat (limited to 'gdb/testsuite/gdb.pascal')
-rw-r--r-- | gdb/testsuite/gdb.pascal/integers.exp | 129 | ||||
-rw-r--r-- | gdb/testsuite/gdb.pascal/integers.pas | 51 |
2 files changed, 180 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. + +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 <http://www.gnu.org/licenses/>. +} + +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. |