From d9bc2bb638ba4d50c8cea1d5bdad94cb6c0aa479 Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 27 Aug 2024 19:17:29 +0000 Subject: [PATCH] Improvements to testrunner.tcl: Show elapse time in MM:SS or HH:MM:SS. Keep track of the total number of tests and the total number of errors and report those values on a summary line at the end. FossilOrigin-Name: 40b232924c973f8d94605946fff75acbe120d90634a2eaf38bd31649e9f1390b --- manifest | 14 +++++----- manifest.uuid | 2 +- test/testrunner.tcl | 63 ++++++++++++++++++++++++++++++++++++++------- 3 files changed, 61 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index acecee9702..e776cdf849 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\stest\scode\sto\sdrop\san\sfts5\stable\swith\scorrupt\srecords\sin\sits\sshadow\stables. -D 2024-08-27T18:25:04.935 +C Improvements\sto\stestrunner.tcl:\s\sShow\selapse\stime\sin\sMM:SS\sor\sHH:MM:SS.\nKeep\strack\sof\sthe\stotal\snumber\sof\stests\sand\sthe\stotal\snumber\sof\serrors\nand\sreport\sthose\svalues\son\sa\ssummary\sline\sat\sthe\send. +D 2024-08-27T19:17:29.271 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1714,7 +1714,7 @@ F test/temptable2.test 76821347810ecc88203e6ef0dd6897b6036ac788e9dd3e6b04fd4d163 F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc F test/tester.tcl 2c203a2dd664298f239f0ec3ce22fbc65b5f021c1e09edbae8452af8a694e052 -F test/testrunner.tcl 74b569b553a85a10677e0f9b2f6d22d90d9f07255fbec545ec9438bed677e8e8 +F test/testrunner.tcl 21449521b796376fb4341d84bdf9dae6befc409e2273f795b4bfda78644da22c F test/testrunner_data.tcl b281136c9a4a3cb2e6772a87c2e94efad0c12ea3e7d0710521a3cad964f879a1 F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899 F test/thread002.test c24c83408e35ba5a952a3638b7ac03ccdf1ce4409289c54a050ac4c5f1de7502 @@ -2211,8 +2211,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d03d35eebaf82709414c87cfa6abc9d2baf8d7e64c2627bad0fd5bbda3e78d60 -R eae9b17364855941c00e92c86d398a4e -U dan -Z d07b6efd95ad4c9798aced1dad6099da +P ca21c942c30a3dbff0e7d118e105b847d80b5388c74d19c2eeea71581f8f40b8 +R e9d7eae7ed3949bc9ba3747c7b003f26 +U drh +Z 1e89338cdc3d7df9980ff860413d15b9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 6d952d91c5..2d3f302a52 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ca21c942c30a3dbff0e7d118e105b847d80b5388c74d19c2eeea71581f8f40b8 +40b232924c973f8d94605946fff75acbe120d90634a2eaf38bd31649e9f1390b diff --git a/test/testrunner.tcl b/test/testrunner.tcl index 821ac6a951..88acae3c0e 100644 --- a/test/testrunner.tcl +++ b/test/testrunner.tcl @@ -279,10 +279,12 @@ set TRG(schema) { priority INTEGER NOT NULL, -- higher priority jobs may run earlier /* Fields updated as jobs run */ - starttime INTEGER, - endtime INTEGER, + starttime INTEGER, -- Start time (milliseconds since 1970) + endtime INTEGER, -- End time state TEXT CHECK( state IN ('','ready','running','done','failed','omit') ), - output TEXT + ntest INT, -- Number of test cases run + nerr INT, -- Number of errors reported + output TEXT -- test output ); CREATE TABLE config( @@ -391,14 +393,34 @@ if {[string compare -nocase script [lindex $argv 0]]==0} { exit } +# Compute an elapse time string MM:SS or HH:MM:SS based on the +# number of milliseconds in the argument. +# +proc elapsetime {ms} { + set s [expr {int(($ms+500.0)*0.001)}] + set hr [expr {$s/3600}] + set mn [expr {($s/60)%60}] + set sc [expr {$s%60}] + if {$hr>0} { + return [format %02d:%02d:%02d $hr $mn $sc] + } else { + return [format %02d:%02d $mn $sc] + } +} + # Helper routine for show_status # proc display_job {jobdict {tm ""}} { array set job $jobdict - set dfname [format %-60s $job(displayname)] + if {[string length $job(displayname)]>65} { + set dfname [format %.65s... $job(displayname)] + } else { + set dfname [format %-68s $job(displayname)] + } set dtm "" if {$tm!=""} { - set dtm [format %-10s "\[[expr {$tm-$job(starttime)}]ms\]"] + set dtm [expr {$tm-$job(starttime)}] + set dtm [format %8s [elapsetime $dtm]] } puts " $dfname $dtm" } @@ -449,10 +471,10 @@ proc show_status {db cls} { if {$S(failed)>0} { set f "$S(failed) FAILED, " } - puts "Command line: \[testrunner.tcl$cmdline\]$clreol" - puts "Jobs: $nJob " - puts "Summary: ${tm}ms, ($fin/$total) finished,\ - ${f}$S(running) running " + puts [format %-79s "Command line: \[testrunner.tcl$cmdline\]$clreol"] + puts [format %-79s "Jobs: $nJob"] + puts [format %-79s "Summary: [elapsetime $tm], ($fin/$total) finished,\ + ${f}$S(running) running "] set srcdir [file dirname [file dirname $TRG(info_script)]] if {$S(running)>0} { @@ -1121,15 +1143,25 @@ proc make_new_testset {} { } proc mark_job_as_finished {jobid output state endtm} { + set ntest 1 + set nerr 0 + if {$endtm>0} { + if {[regexp {\y(\d+) errors out of (\d+) tests} $output all a b]} { + set nerr $a + set ntest $b + } + } r_write_db { if {$state=="failed"} { set childstate omit + if {$nerr<=0} {set nerr 1} } else { set childstate ready } trdb eval { UPDATE jobs - SET output=$output, state=$state, endtime=$endtm + SET output=$output, state=$state, endtime=$endtm, + ntest=$ntest, nerr=$nerr WHERE jobid=$jobid; UPDATE jobs SET state=$childstate WHERE depid=$jobid; } @@ -1372,6 +1404,17 @@ proc run_testset {} { puts "\nTest database is $TRG(dbname)" puts "Test log is $TRG(logname)" + trdb eval { + SELECT sum(ntest) AS totaltest, + sum(nerr) AS totalerr + FROM jobs + } break + trdb eval { + SELECT max(endtime)-min(starttime) AS totaltime + FROM jobs WHERE endtime>0 + } break; + set et [elapsetime $totaltime] + puts "$totalerr errors out of $totaltest tests in about $et" } # Handle the --buildonly option, if it was specified.