From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 9RrAKDUr5GCseQAAWB0awg (envelope-from ) for ; Tue, 06 Jul 2021 06:06:45 -0400 Received: by simark.ca (Postfix, from userid 112) id 8AEC51F1F2; Tue, 6 Jul 2021 06:06:45 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 090051E940 for ; Tue, 6 Jul 2021 06:06:44 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4A7BE382C437 for ; Tue, 6 Jul 2021 10:06:43 +0000 (GMT) Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by sourceware.org (Postfix) with ESMTPS id 8E0B6383F40C for ; Tue, 6 Jul 2021 10:06:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8E0B6383F40C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id C6AF81FF49; Tue, 6 Jul 2021 10:06:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1625565990; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gR4+zkL0TDeqNjqS8tsRCqC1vQmEvmq+JOp0OMtZCkE=; b=FPhgZ8SQzxlt+MxzXanjdWtvTmOz/vSAVJvrEZgMeFK6MNqwPpWzzwefTgqbtnv8I7dfPn wfiJnv5yGveslYZUatsC7tE8sRZnMAhofq5udWzePwcYGQnafB3is2DjJo5fU+mu7VLa0u JA/1+SrdC/q5N0PhyTEhKMH898GxrY4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1625565990; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gR4+zkL0TDeqNjqS8tsRCqC1vQmEvmq+JOp0OMtZCkE=; b=RqpL04/ey5dPtESHbPBeZjHG3Y+ehasOp3SJZbeAWwbWWI1yc3Uz+/4pTCmkF+SJTViLeE T0xFZ22Zg+K5vmDA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id A42B813A5D; Tue, 6 Jul 2021 10:06:30 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id YjUiJiYr5GAGFAAAMHmgww (envelope-from ); Tue, 06 Jul 2021 10:06:30 +0000 Subject: Re: [RFC][gdb/testsuite] Remove read1 timeout factor from gdb.base/info-macros.exp To: Simon Marchi , gdb-patches@sourceware.org References: <20210624153449.GA30047@delia> <000fba5a-d926-27da-f313-94849cf7acea@polymtl.ca> From: Tom de Vries Message-ID: <7b46a308-545c-17c8-f7b8-fc688d60a7d4@suse.de> Date: Tue, 6 Jul 2021 12:06:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <000fba5a-d926-27da-f313-94849cf7acea@polymtl.ca> Content-Type: multipart/mixed; boundary="------------7866E5A9FFC89BCBA30B8552" Content-Language: en-US X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" This is a multi-part message in MIME format. --------------7866E5A9FFC89BCBA30B8552 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 6/25/21 4:46 PM, Simon Marchi wrote: > On 2021-06-24 11:34 a.m., Tom de Vries wrote: >> Hi, >> >> At the moment some check-read1 timeouts are handled like this in >> gdb.base/info-macros.exp: >> ... >> gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { >> -re "$r1$r2$r3" { >> pass $testname >> } >> -re ".*#define TWO.*\r\n$gdb_prompt" { >> fail $testname >> } >> -re ".*#define THREE.*\r\n$gdb_prompt" { >> fail $testname >> } >> -re ".*#define FOUR.*\r\n$gdb_prompt" { >> fail $testname >> } >> } >> ... >> which is not ideal. >> >> We could use gdb_test_lines, but it currently doesn't support verifying >> the absence of regexps, which is currently implemented using the clauses above >> calling fail. >> >> Fix this by using gdb_test_lines and adding a -re-not syntax to >> gdb_test_lines, such that we can do: >> ... >> gdb_test_lines $test $testname $r1.*$r2 \ >> -re-not "#define TWO" \ >> -re-not "#define THREE" \ >> -re-not "#define FOUR" >> ... >> >> Only removing one use of gdb_test_multiple_with_read1_timeout_factor in the >> test-case for now. >> >> Tested on x86_64-linux, which make targets check and check-read1. >> >> Any comments? > > I don't see anything wrong with the patch, seems useful. Thanks for the review. I've now applied this to the whole test-case, and committed as attached. Thanks, - Tom --------------7866E5A9FFC89BCBA30B8552 Content-Type: text/x-patch; charset=UTF-8; name="0001-gdb-testsuite-Remove-read1-timeout-factor-from-gdb.base-info-macros.exp.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename*0="0001-gdb-testsuite-Remove-read1-timeout-factor-from-gdb.base"; filename*1="-info-macros.exp.patch" [gdb/testsuite] Remove read1 timeout factor from gdb.base/info-macros.exp At the moment some check-read1 timeouts are handled like this in gdb.base/info-macros.exp: ... gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { -re "$r1$r2$r3" { pass $testname } -re ".*#define TWO.*\r\n$gdb_prompt" { fail $testname } -re ".*#define THREE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $testname } } ... which is not ideal. We could use gdb_test_lines, but it currently doesn't support verifying the absence of regexps, which is done using the clauses above calling fail. Fix this by using gdb_test_lines and adding a -re-not syntax to gdb_test_lines, such that we can do: ... gdb_test_lines $test $testname $r1.*$r2 \ -re-not "#define TWO" \ -re-not "#define THREE" \ -re-not "#define FOUR" ... Tested on x86_64-linux, whith make targets check and check-read1. Also observed that check-read1 execution time is reduced from 6m35s to 13s. gdb/testsuite/ChangeLog: 2021-06-24 Tom de Vries * gdb.base/info-macros.exp: Replace use of gdb_test_multiple_with_read1_timeout_factor with gdb_test_lines. (gdb_test_multiple_with_read1_timeout_factor): Remove. * lib/gdb.exp (gdb_test_lines): Add handling or -re-not . --- gdb/testsuite/gdb.base/info-macros.exp | 179 +++++++++------------------------ gdb/testsuite/lib/gdb.exp | 31 +++++- 2 files changed, 74 insertions(+), 136 deletions(-) diff --git a/gdb/testsuite/gdb.base/info-macros.exp b/gdb/testsuite/gdb.base/info-macros.exp index 19f16814374..538279fd309 100644 --- a/gdb/testsuite/gdb.base/info-macros.exp +++ b/gdb/testsuite/gdb.base/info-macros.exp @@ -117,161 +117,74 @@ gdb_test "$test" "$r1$r2$r3$r4" set test "info macro -a -- FOO" gdb_test "$test" "$r1$r2$r3$r4" -proc gdb_test_multiple_with_read1_timeout_factor { factor command message \ - user_code } { - with_read1_timeout_factor $factor { - uplevel [list gdb_test_multiple $command $message $user_code] - } -} - set test "info macros" -set r1 ".*#define FOO \"hello\"" -set r2 ".*#define ONE" -set r3 ".*\r\n$gdb_prompt" +set r1 "#define FOO \"hello\"" +set r2 "#define ONE" set testname "$test 2" -gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { - -re "$r1$r2$r3" { - pass $testname - } - -re ".*#define TWO.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define THREE.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOUR.*\r\n$gdb_prompt" { - fail $testname - } -} +gdb_test_lines $test $testname $r1.*$r2 \ + -re-not "#define TWO" \ + -re-not "#define THREE" \ + -re-not "#define FOUR" + gdb_test "next" ".*" "" -set r1 ".*#define FOO \" \"" -set r2 ".*#define ONE" -set r3 ".*#define TWO" -set r4 ".*\r\n$gdb_prompt" +set r1 "#define FOO \" \"" +set r2 "#define ONE" +set r3 "#define TWO" set testname "$test 3" -gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { - -re ".*#define THREE.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOUR.*\r\n$gdb_prompt" { - fail $testname - } - -re "$r1$r2$r3$r4" { - pass $testname - } -} +gdb_test_lines $test $testname $r1.*$r2.*$r3 \ + -re-not "#define THREE" \ + -re-not "#define FOUR" + gdb_test "next" ".*" "" # in alpabetical order... -set r1 ".*#define FOO \"world\"" -set r2 ".*#define ONE" -set r3 ".*#define THREE" -set r4 ".*#define TWO" -set r5 ".*\r\n$gdb_prompt" +set r1 "#define FOO \"world\"" +set r2 "#define ONE" +set r3 "#define THREE" +set r4 "#define TWO" set testname "$test 4" -gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { - -re ".*#define FOUR.*\r\n$gdb_prompt" { - fail $testname - } - -re "$r1$r2$r3$r4$r5" { - pass $testname - } -} +gdb_test_lines $test $testname $r1.*$r2.*$r3.*$r4 \ + -re-not "#define FOUR" + # same as above with a linespec. set test "info macros *\$pc" -gdb_test_multiple_with_read1_timeout_factor 10 "$test" $test { - -re ".*#define FOUR.*\r\n$gdb_prompt" { - fail $test - } - -re "$r1$r2$r3$r4$r5" { - pass $test - } -} +gdb_test_lines $test "" $r1.*$r2.*$r3.*$r4 \ + -re-not "#define FOUR" gdb_test "next" ".*" "" -set r1 ".*#define FOO \" \"" -set r2 ".*#define ONE" -set r3 ".*#define TWO." -set r4 ".*\r\n$gdb_prompt" +set r1 "#define FOO \" \"" +set r2 "#define ONE" +set r3 "#define TWO." set test "info macros" set testname "$test 5" -gdb_test_multiple_with_read1_timeout_factor 10 "$test" $test { - -re ".*#define THREE.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOUR.*\r\n$gdb_prompt" { - fail $testname - } - -re "$r1$r2$r3$r4" { - pass $testname - } -} +gdb_test_lines $test $testname $r1.*$r2.*$r3 \ + -re-not "#define THREE" \ + -re-not "#define FOUR" gdb_test "next" ".*" "" gdb_test "next" ".*" "" -set r1 ".*#define DEF_MACROS" -set r2 ".*\r\n$gdb_prompt" +set r1 "#define DEF_MACROS" set testname "$test 6" -gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { - -re ".*#define FOO \" \".*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOO \"hello\".*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOO \"world\".*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOO\\(a\\) foo = a.*" { - fail $testname - } - -re ".*#define ONE.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define TWO.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define THREE.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOUR.*\r\n$gdb_prompt" { - fail $testname - } - -re "$r1$r2" { - pass $testname - } -} +gdb_test_lines $test $testname $r1 \ + -re-not "#define FOO" \ + -re-not "#define ONE" \ + -re-not "#define TWO" \ + -re-not "#define THREE" \ + -re-not "#define FOUR" gdb_test "next" ".*" "" -set r1 ".*#define DEF_MACROS" -set r2 ".*#define FOO\\(a\\) foo = a" -set r3 ".*#define FOUR" -set r4 ".*\r\n$gdb_prompt" +set r1 "#define DEF_MACROS" +set r2 "#define FOO\\(a\\) foo = a" +set r3 "#define FOUR" set testname "$test 7" -gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { - -re ".*#define FOO \" \".*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOO \"hello\".*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOO \"world\".*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define ONE.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define TWO.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define THREE.*\r\n$gdb_prompt" { - fail $testname - } - -re "$r1$r2$r3$r4" { - pass $testname - } -} +gdb_test_lines $test $testname $r1.*$r2.*$r3 \ + -re-not "#define FOO \" \"" \ + -re-not "#define FOO \"hello\"" \ + -re-not "#define FOO \"world\"" \ + -re-not "#define ONE" \ + -re-not "#define TWO" \ + -re-not "#define THREE" set test "info macros info-macros.c:42" diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 38f40fdddb5..6b6a70a89b0 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1443,13 +1443,34 @@ proc gdb_test_sequence { args } { # '^M # ^M # ' +# +# Optionally, additional -re-not arguments can be specified, to +# ensure that a regexp is not match by the COMMAND output. +# Such an additional argument generates an additional PASS/FAIL of the form: +# PASS: test-case.exp: $message: pattern not matched: + +proc gdb_test_lines { command message re args } { + set re_not [list] + + for {set i 0} {$i < [llength $args]} {incr i} { + set arg [lindex $args $i] + if { $arg == "-re-not" } { + incr i + if { [llength $args] == $i } { + error "Missing argument for -re-not" + break + } + set arg [lindex $args $i] + lappend re_not $arg + } else { + error "Unhandled argument: $arg" + } + } -proc gdb_test_lines { command message re } { - set found 0 - set idx 0 if { $message == ""} { set message $command } + set lines "" gdb_test_multiple $command $message { -re "\r\n(\[^\r\n\]*)(?=\r\n)" { @@ -1467,6 +1488,10 @@ proc gdb_test_lines { command message re } { } gdb_assert { [regexp $re $lines] } $message + + foreach re $re_not { + gdb_assert { ![regexp $re $lines] } "$message: pattern not matched: $re" + } } # Test that a command gives an error. For pass or fail, return --------------7866E5A9FFC89BCBA30B8552--