From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9307 invoked by alias); 22 Jan 2008 08:47:20 -0000 Received: (qmail 9297 invoked by uid 22791); 22 Jan 2008 08:47:19 -0000 X-Spam-Check-By: sourceware.org Received: from ics.u-strasbg.fr (HELO ics.u-strasbg.fr) (130.79.112.250) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 22 Jan 2008 08:46:47 +0000 Received: from ICSMULLER (laocoon.u-strasbg.fr [130.79.112.72]) by ics.u-strasbg.fr (Postfix) with ESMTP id 4D9FA187022 for ; Tue, 22 Jan 2008 09:53:00 +0100 (CET) From: "Pierre Muller" To: Subject: [RFA] New gdb.pascal testcase for integer expressions Date: Tue, 22 Jan 2008 08:47:00 -0000 Message-ID: <000001c85cd3$4efc94d0$ecf5be70$@u-strasbg.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Content-Language: en-us Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-01/txt/msg00519.txt.bz2 This is a new test for pascal language. The reason I submit this as a RFA is that the current CVS tree still fails on the "print 35 div 2" line, as explained in: http://sourceware.org/ml/gdb-patches/2008-01/msg00506.html Should I wait until the above patch is accepted? Is it allowed to commit new testcases with new failures? I started to write an equivalent for real types, and there the line "print 35 / 2" fails, because this returns "17" instead of "17.5" I also made a suggestion for this: http://sourceware.org/ml/gdb-patches/2008-01/msg00504.html I wrote a patch accordingly and I will send a RFC shortly for it. Pierre Muller Pascal language maintainer testsuite/ChangeLog entry: 2008-01-22 Pierre Muller * gdb.pascal/integers.pas: New test program. * gdb.pascal/integers.exp: New testcase. Index: gdb.pascal/integers.exp =================================================================== RCS file: gdb.pascal/integers.exp diff -N gdb.pascal/integers.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.pascal/integers.exp 22 Jan 2008 08:22:04 -0000 @@ -0,0 +1,127 @@ +# 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} + +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 +} + +# This test fails for gpc +# because debug information for 'main' +# is in some +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 +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 + +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" Index: gdb.pascal/integers.pas =================================================================== RCS file: gdb.pascal/integers.pas diff -N gdb.pascal/integers.pas --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.pascal/integers.pas 22 Jan 2008 08:22:04 -0000 @@ -0,0 +1,21 @@ +program integers; + +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; + +end.