[PATCH] algol68: Make torture execute tests parse dg-options
Pietro Monteiro
pietro@sociotechnical.xyz
Sat Apr 12 01:26:45 GMT 2025
Also compare the output of running the test with dg-output-text if set.
I discovered using `dg-output' didn't work when I added the test for the posix
perror fix.
gcc/testsuite/ChangeLog:
* lib/algol68-torture.exp (algol68-torture-execute): Extract `dg-'
directives from the test file and compare the output of the program with
the text set in `dg-output' if there's any.
Signed-off-by: Pietro Monteiro <pietro@sociotechnical.xyz>
---
gcc/testsuite/lib/algol68-torture.exp | 66 ++++++++++++++++++++++-----
1 file changed, 55 insertions(+), 11 deletions(-)
diff --git a/gcc/testsuite/lib/algol68-torture.exp b/gcc/testsuite/lib/algol68-torture.exp
index bd1230c9866..a98e512607f 100644
--- a/gcc/testsuite/lib/algol68-torture.exp
+++ b/gcc/testsuite/lib/algol68-torture.exp
@@ -142,9 +142,36 @@ proc algol68-torture-execute { src } {
global tool
global compiler_conditional_xfail_data
global TORTURE_OPTIONS
+ global errorCode errorInfo
global algol68_compile_args
global algol68_execute_args
+ set dg-excess-errors-flag 0
+ set dg-messages ""
+ set dg-extra-tool-flags ""
+ set dg-final-code ""
+
+ # `dg-output-text' is a list of two elements: pass/fail and text.
+ # Leave second element off for now (indicates "don't perform test")
+ set dg-output-text "P"
+
+ set tmp [dg-get-options $src]
+ foreach op $tmp {
+ verbose "Processing option: $op" 3
+ set status [catch $op errmsg]
+ if { $status != 0 } {
+ if { 0 && [info exists errorInfo] } {
+ # This also prints a backtrace which will just confuse
+ # testcase writers, so it's disabled.
+ perror "$src: $errorInfo\n"
+ } else {
+ perror "$src: $errmsg for \"$op\"\n"
+ }
+ perror "$src: $errmsg for \"$op\"" 0
+ return
+ }
+ }
+
# Check for alternate driver.
set additional_flags ""
if [file exists [file rootname $src].x] {
@@ -272,18 +299,35 @@ proc algol68-torture-execute { src } {
set result [algol68_load "$executable" "$algol68_execute_args" ""]
set status [lindex $result 0]
set output [lindex $result 1]
-
- # In order to cooperate nicely with the master Go testsuite,
- # if the output contains the string BUG, we treat the test as
- # failing.
- if [ string match "*BUG*" $output ] {
- set status "fail"
+ if { $status eq "pass" } {
+ pass "$testcase execution test, $option"
+ verbose "Exec succeeded." 3
+ if { [llength ${dg-output-text}] > 1 } {
+ if { [lindex ${dg-output-text} 0] eq "F" } {
+ setup_xfail "*-*-*"
+ }
+ set texttmp [lindex ${dg-output-text} 1]
+ if { ![regexp -- $texttmp $output] } {
+ fail "$testcase output pattern test, $option"
+ send_log "Output was:\n${output}\nShould match:\n$texttmp\n"
+ verbose "Failed test for output pattern $texttmp" 3
+ } else {
+ pass "$testcase output pattern test, $option"
+ verbose "Passed test for output pattern $texttmp" 3
+ }
+ unset texttmp
+ }
+ } elseif { $status eq "fail" } {
+ if {[info exists errorCode]} {
+ verbose "Exec failed, errorCode: $errorCode" 3
+ } else {
+ verbose "Exec failed, errorCode not defined!" 3
+ }
+ fail "$testcase execution test, $option"
+ } else {
+ $status "$testcase execution, $option"
}
-
- if { $status == "pass" } {
- catch { remote_file build delete $executable }
- }
- $status "$testcase execution, $option"
+ catch { remote_file build delete $executable }
}
}
--
2.47.0
More information about the Algol68
mailing list