| #!/usr/bin/tclsh |
| |
| # Copyright 2019 Alain Dargelas |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| |
| proc printHelp {} { |
| puts "regression.tcl help" |
| puts "regression.tcl tests=<testname> (Tests matching regular expression)" |
| puts " test=<testname> (Just that test)" |
| puts " debug=<none, valgrind, ddd>" |
| puts " build=<Debug, Release>" |
| puts " mt=<nbThreads>" |
| puts " mp=<nbProcesses>" |
| puts " large (large tests too)" |
| puts " show_diff (Shows text diff)" |
| puts " diff_mode (Only diff)" |
| puts "regression.tcl update (Updates the diffs)" |
| } |
| |
| |
| proc log { text } { |
| global LOG_FILE |
| puts $text |
| flush stdout |
| if ![info exist LOG_FILE] { |
| set LOG_FILE [open regression.log "w"] |
| } |
| puts $LOG_FILE $text |
| flush $LOG_FILE |
| } |
| |
| proc log_nonewline { text } { |
| global LOG_FILE |
| puts -nonewline $text |
| flush stdout |
| if ![info exist LOG_FILE] { |
| set LOG_FILE [open regression.log "w"] |
| } |
| puts -nonewline $LOG_FILE $text |
| flush $LOG_FILE |
| } |
| |
| set UPDATE 0 |
| set TIME "/usr/bin/time" |
| set DEBUG_TOOL "" |
| set PRIOR_USER 0 |
| set PRIOR_ELAPSED 0 |
| set USER 0 |
| set ELAPSED 0 |
| set PRIOR_MAX_MEM 0 |
| set MAX_MEM 0 |
| set PRIOR_MAX_TIME 0 |
| set MAX_TIME 0 |
| set DEBUG "none" |
| set MT_MAX 0 |
| set MP_MAX 0 |
| set LARGE_TESTS 0 |
| set SHOW_DIFF 0 |
| set DIFF_MODE 0 |
| |
| # Large tests (need to run on 5Gb RAM machine) |
| set LONG_TESTS(YosysOpenSparc) 1 |
| set LONG_TESTS(YosysOldTests) 1 |
| set LONG_TESTS(YosysRiscv) 1 |
| set LONG_TESTS(YosysBigSim) 1 |
| set LONG_TESTS(YosysBoom) 1 |
| set LONG_TESTS(YosysEth) 1 |
| set LONG_TESTS(YosysIce40) 1 |
| set LONG_TESTS(YosysBigSimEllip) 1 |
| set LONG_TESTS(YosysTests) 1 |
| set LONG_TESTS(YosysBigSimBch) 1 |
| |
| # Noisy test |
| # These tests need to be investigated |
| # They produce different number of messages on Travis-CI |
| set LONG_TESTS(YosysTestSuite) 1 |
| set LONG_TESTS(SimpleParserTestCache) 1 |
| set LONG_TESTS(Zachjs) 1 |
| set LONG_TESTS(YosysOldI2c) 1 |
| set LONG_TESTS(YosysOldI2c) 1 |
| set LONG_TESTS(YosysOldSimpleSpi) 1 |
| |
| if [regexp {show_diff} $argv] { |
| regsub "show_diff" $argv "" argv |
| set SHOW_DIFF 1 |
| } |
| |
| if [regexp {diff_mode} $argv] { |
| regsub "diff_mode" $argv "" argv |
| set DIFF_MODE 1 |
| } |
| |
| |
| if [regexp {large} $argv] { |
| set LARGE_TESTS 1 |
| log "Running large tests" |
| } else { |
| log "Skipping large tests" |
| } |
| |
| if [regexp {mt=([0-9]+)} $argv tmp MT_MAX] { |
| } |
| |
| if [regexp {mp=([0-9]+)} $argv tmp MP_MAX] { |
| } |
| |
| if [regexp {debug=([a-z]+)} $argv tmp DEBUG] { |
| if {$DEBUG == "valgrind"} { |
| set DEBUG_TOOL "valgrind --tool=memcheck --log-file=valgrind.log" |
| } |
| if {$DEBUG == "ddd"} { |
| set DEBUG_TOOL "ddd" |
| } |
| } |
| |
| if {$argv == "help"} { |
| printHelp |
| exit |
| } |
| |
| set TESTTARGET "" |
| set ONETEST "" |
| if [regexp {tests=([A-Za-z0-9_]+)} $argv tmp TESTTARGET] { |
| } |
| if [regexp {test=([A-Za-z0-9_]+)} $argv tmp TESTTARGET] { |
| set ONETEST $TESTTARGET |
| } |
| |
| set BUILD "Release" |
| if [regexp {build=([A-Za-z0-9_]+)} $argv tmp BUILD] { |
| puts "BUILD=$BUILD" |
| } |
| |
| set SHOW_DETAILS 0 |
| if [regexp {\-details} $argv] { |
| set SHOW_DETAILS 1 |
| } |
| |
| if [regexp {update} $argv] { |
| set UPDATE 1 |
| } |
| |
| set COMMIT_TEXT "" |
| if [regexp {commit=([A-Za-z0-9_ \.]+)} $argv tmp COMMIT_TEXT] { |
| } |
| |
| set SURELOG_VERSION "[pwd]/dist/$BUILD/surelog" |
| set REGRESSION_PATH [pwd] |
| |
| set SURELOG_COMMAND "$TIME $DEBUG_TOOL $SURELOG_VERSION" |
| |
| proc findFiles { basedir pattern } { |
| |
| # Fix the directory name, this ensures the directory name is in the |
| # native format for the platform and contains a final directory seperator |
| set basedir [string trimright [file join [file normalize $basedir] { }]] |
| set fileList {} |
| |
| # Look in the current directory for matching files, -type {f r} |
| # means ony readable normal files are looked at, -nocomplain stops |
| # an error being thrown if the returned list is empty |
| foreach fileName [glob -nocomplain -type {f r} -path $basedir $pattern] { |
| lappend fileList $fileName |
| } |
| |
| # Now look for any sub direcories in the current directory |
| foreach dirName [glob -nocomplain -type {d r} -path $basedir *] { |
| # Recusively call the routine on the sub directory and append any |
| # new files to the results |
| set subDirList [findFiles $dirName $pattern] |
| if { [llength $subDirList] > 0 } { |
| foreach subDirFile $subDirList { |
| lappend fileList $subDirFile |
| } |
| } |
| } |
| return $fileList |
| } |
| |
| proc load_tests { } { |
| global TESTS TESTS_DIR LONGESTTESTNAME TESTTARGET ONETEST LARGE_TESTS LONG_TESTS MT_MAX MP_MAX |
| set dirs "../tests/ ../third_party/tests/" |
| set fileLists "" |
| foreach dir $dirs { |
| append fileList "[findFiles $dir *.sl] " |
| } |
| set testcommand "" |
| set LONGESTTESTNAME 1 |
| set totaltest 0 |
| foreach file $fileList { |
| regexp {([a-zA-Z0-9_/-]+)/([a-zA-Z0-9_-]+)\.sl} $file tmp testdir testname |
| regsub [pwd]/ $testdir "" testdir |
| incr totaltest |
| if {($TESTTARGET != "") && ![regexp $TESTTARGET $testname]} { |
| continue |
| } |
| if {($ONETEST != "") && ($ONETEST != $testname)} { |
| continue |
| } |
| if {($ONETEST == "") && ($LARGE_TESTS == 0)} { |
| if [info exist LONG_TESTS($testname)] { |
| continue |
| } |
| } |
| |
| if {$LONGESTTESTNAME < [string length $testname]} { |
| set LONGESTTESTNAME [string length $testname] |
| } |
| |
| set fid [open $testdir/$testname.sl] |
| set testcommand [read $fid] |
| close $fid |
| |
| set TESTS($testname) $testcommand |
| set TESTS_DIR($testname) $testdir |
| |
| } |
| log "Run with mt=$MT_MAX, mp=$MP_MAX" |
| log "THERE ARE $totaltest tests" |
| log "RUNNING [array size TESTS] tests" |
| log "" |
| } |
| |
| |
| proc count_messages { result } { |
| set fatals -1 |
| set errors -1 |
| set warnings -1 |
| set notes -1 |
| set syntax -1 |
| # Normal test |
| regexp {FATAL\] : ([0-9]+)} $result tmp fatals |
| regexp {SYNTAX\] : ([0-9]+)} $result tmp syntax |
| regexp {ERROR\] : ([0-9]+)} $result tmp errors |
| regexp {WARNING\] : ([0-9]+)} $result tmp warnings |
| regexp {NOTE\] : ([0-9]+)} $result tmp notes |
| # Diff test |
| if [regexp {\| FATAL \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp fatal1 fatal2] { |
| set fatals [expr $fatal1 + $fatal2] |
| } |
| if [regexp {\|SYNTAX \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp syntax1 syntax2] { |
| set syntax [expr $syntax1 + $syntax2] |
| } |
| if [regexp {\| ERROR \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp error1 error2] { |
| set errors [expr $error1 + $error2] |
| } |
| if [regexp {\|WARNING\|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp warning1 warning2] { |
| set warnings [expr $warning1 + $warning2] |
| } |
| if [regexp {\| NOTE \|[ ]*([0-9]+)[ ]*\|[ ]*([0-9]+)[ ]*} $result tmp note1 note2] { |
| set notes [expr $note1 + $note2] |
| } |
| # Show help test |
| if [regexp {outputlineinfo} $result] { |
| set fatals 0 |
| set syntax 0 |
| set errors 0 |
| set warnings 0 |
| set notes 0 |
| } |
| # stats per message ID |
| |
| set lines [split $result "\n"] |
| foreach line $lines { |
| if [regexp {(\[.*\])} $line tmp code] { |
| if [info exist CODES($code)] { |
| incr CODES($code) |
| } else { |
| set CODES($code) 1 |
| } |
| } |
| } |
| set details "" |
| foreach name [lsort -dictionary [array names CODES]] { |
| lappend details [list $name $CODES($name)] |
| } |
| |
| return [list $fatals $errors $warnings $notes $details $syntax] |
| } |
| |
| proc count_split { string } { |
| return [llength [split $string /]] |
| } |
| |
| proc run_regression { } { |
| global TESTS TESTS_DIR SURELOG_COMMAND LONGESTTESTNAME TESTTARGET ONETEST UPDATE USER ELAPSED PRIOR_USER PRIOR_ELAPSED |
| global DIFF_TESTS PRIOR_MAX_MEM MAX_MEM MAX_TIME PRIOR_MAX_TIME SHOW_DETAILS MT_MAX MP_MAX KEEP_MT_ON REGRESSION_PATH LARGE_TESTS LONG_TESTS DIFF_MODE |
| set overrallpass "PASS" |
| |
| set w1 $LONGESTTESTNAME |
| set w2 8 |
| set w4 8 |
| set w3 18 |
| set w5 8 |
| set w6 6 |
| set MEM 0 |
| set sep +-[string repeat - $w1]-+-[string repeat - $w2]-+-[string repeat - $w6]-+-[string repeat - $w4]-+-[string repeat - $w2]-+-[string repeat - $w4]-+-[string repeat - $w2]-+-[string repeat - $w5]-+-[string repeat - $w5]-+ |
| log $sep |
| log [format "| %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s |" $w1 "TESTNAME" $w2 "STATUS" $w6 "FATAL" $w2 "SYNTAX" $w4 "ERROR" $w2 "WARNING" $w4 "NOTE" $w5 "TIME" $w5 "MEM(Mb)"] |
| log $sep |
| |
| foreach testname [array names TESTS] { |
| set time_result "" |
| set result "" |
| if {($ONETEST != "") && ($testname != $ONETEST)} { |
| continue |
| } |
| |
| if {($ONETEST == "") && ($LARGE_TESTS == 0)} { |
| if [info exist LONG_TESTS($testname)] { |
| continue |
| } |
| } |
| |
| set testdir $TESTS_DIR($testname) |
| file mkdir $REGRESSION_PATH/tests/$testname |
| set test $testname |
| set command $TESTS($testname) |
| regsub -all {\\} $command "" command |
| regsub -all {\n} $command " " command |
| if [regexp {third_party} $testdir] { |
| regsub -all {[\./]+UVM} $command "../../UVM" command |
| } else { |
| regsub -all {[\./]+UVM} $command "../../third_party/UVM" command |
| } |
| if {($ONETEST != "")} { |
| log "\ncd $testdir" |
| if [regexp {\.sh} $command] { |
| log "$command [lindex $SURELOG_COMMAND 1]\n" |
| } else { |
| log "$SURELOG_COMMAND $command\n" |
| } |
| } |
| |
| if {$UPDATE == 1} { |
| if [file exist "$REGRESSION_PATH/tests/$test/${testname}.log"] { |
| log [format "| %-*s | Copying $REGRESSION_PATH/tests/$test/${testname}.log to $testdir/${testname}.log" $w1 $testname] |
| file copy -force "$REGRESSION_PATH/tests/$test/${testname}.log" "$testdir/${testname}.log" |
| continue |
| } else { |
| log [format "| %-*s | No action" $w1 $testname] |
| continue |
| } |
| } |
| |
| log_nonewline [format "| %-*s |" $w1 $testname] |
| |
| cd $testdir |
| exec sh -c "cd $REGRESSION_PATH/tests/$test/; rm -rf slpp*" |
| |
| set passstatus "PASS" |
| if {$DIFF_MODE == 0} { |
| set path [file dirname $REGRESSION_PATH] |
| regsub -all $path $testdir "" path |
| set count [count_split $path] |
| set root "" |
| for {set i 0} {$i < $count -1} {incr i} { |
| append root "../" |
| } |
| set output_path "-o ${root}build/tests/$test/" |
| if [regexp {\.sh} $command] { |
| catch {set time_result [exec sh -c "time $command [lindex $SURELOG_COMMAND 1] > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result |
| } else { |
| |
| if [regexp {\*/\*\.[sv]} $command] { |
| regsub -all {[\*/]+\*\.[sv]+} $command "" command |
| set command "$command [findFiles . *.v] [findFiles . *.sv]" |
| regsub -all [pwd]/ $command "" command |
| } |
| if ![info exist KEEP_MT_ON($testname)] { |
| regsub -all {\-mt[ ]+max} $command "" command |
| regsub -all {\-mt[ ]+[0-9]+} $command "" command |
| set command "$command -mt $MT_MAX -mp $MP_MAX $output_path" |
| } else { |
| set command "$command $output_path" |
| } |
| if {($ONETEST != "") && ($testname != $ONETEST)} { |
| continue |
| } |
| catch {set time_result [exec sh -c "$SURELOG_COMMAND $command > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result |
| } |
| } |
| |
| if [file exists "$REGRESSION_PATH/tests/$test/${testname}.log"] { |
| set fid [open "$REGRESSION_PATH/tests/$test/${testname}.log" "r"] |
| set result [read $fid] |
| close $fid |
| } else { |
| if [file exists "${testname}.log"] { |
| set fid [open "${testname}.log" "r"] |
| set result [read $fid] |
| close $fid |
| } |
| } |
| |
| set segfault 0 |
| if {$DIFF_MODE == 0} { |
| if [regexp {Segmentation fault} $result] { |
| set segfault 1 |
| exec sh -c "cd $REGRESSION_PATH/tests/$test/; rm -rf slpp*" |
| if [regexp {\.sh} $command] { |
| catch {set time_result [exec sh -c "time $command [lindex $SURELOG_COMMAND 1] > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result |
| } else { |
| catch {set time_result [exec sh -c "$SURELOG_COMMAND $command > $REGRESSION_PATH/tests/$test/${testname}.log"]} time_result |
| } |
| if [regexp {Segmentation fault} $result] { |
| set passstatus "FAIL" |
| set overrallpass "FAIL" |
| set segfault 2 |
| } else { |
| set segfault 0 |
| } |
| } |
| } |
| if [regexp {AdvancedDebug} $SURELOG_COMMAND] { |
| log $result |
| } |
| |
| set fatals -1 |
| set syntax -1 |
| set errors -1 |
| set warnings -1 |
| set notes -1 |
| |
| set log_fatals -1 |
| set log_syntax -1 |
| set log_errors -1 |
| set log_warnings -1 |
| set log_notes -1 |
| set user 0 |
| set elapsed_min 0 |
| set elapsed 0 |
| set cpu 0 |
| foreach {fatals errors warnings notes details syntax} [count_messages $result] {} |
| if [regexp {([0-9\.:]+)user [0-9\.:]+system ([0-9]+):([0-9\.]+)elapsed ([0-9]+)%CPU} $time_result tmp user elapsed_min elapsed cpu] { |
| set user [expr int($user)] |
| set elapsed [expr int(($elapsed_min *60) + $elapsed)] |
| set USER [expr $USER + $user] |
| set ELAPSED [expr $ELAPSED + $elapsed] |
| if {$MAX_TIME < $elapsed} { |
| set MAX_TIME $elapsed |
| } |
| } |
| set mem 0 |
| if [regexp {([0-9]+)maxresident} $time_result tmp mem] { |
| set mem [expr $mem / 1024] |
| if {$MAX_MEM < $mem} { |
| set MAX_MEM $mem |
| } |
| } |
| |
| set SPEED "" |
| set FASTER_OR_SLOWER 0 |
| set DIFF_MEM 0 |
| |
| set time_content "" |
| set no_previous_time_content 1 |
| if [file exists "$REGRESSION_PATH/tests/$test/${testname}.time"] { |
| set fid [open "$REGRESSION_PATH/tests/$test/${testname}.time" "r"] |
| set time_content [read $fid] |
| close $fid |
| set no_previous_time_content 0 |
| } |
| if [file exists "$testname.log"] { |
| set fid [open "$testname.log" "r"] |
| set content [read $fid] |
| close $fid |
| foreach {log_fatals log_errors log_warnings log_notes log_details log_syntax} [count_messages $content] {} |
| set prior_user 0 |
| set prior_elapsed_min 0 |
| set prior_elapsed 0 |
| set cpu 0 |
| regexp {([0-9\.]+)user [0-9\.:]+system ([0-9]+):([0-9\.]+)elapsed ([0-9]+)%CPU} $time_content tmp prior_user prior_elapsed_min prior_elapsed cpu |
| set prior_user [expr int($prior_user)] |
| set prior_elapsed [expr int(($prior_elapsed_min *60) + $prior_elapsed)] |
| set PRIOR_USER [expr $PRIOR_USER + $prior_user] |
| set PRIOR_ELAPSED [expr $PRIOR_ELAPSED + $prior_elapsed] |
| if {$PRIOR_MAX_TIME < $prior_elapsed} { |
| set PRIOR_MAX_TIME $prior_elapsed |
| } |
| if [expr ($elapsed > $prior_elapsed) && ($no_previous_time_content == 0)] { |
| set SPEED [format "%-*s %-*s " 2 "${elapsed}s" 4 "(+[expr $elapsed - $prior_elapsed])"] |
| set FASTER_OR_SLOWER 1 |
| } elseif [expr ($elapsed == $prior_elapsed) || ($no_previous_time_content)] { |
| set SPEED [format "%-*s " 4 "${elapsed}s"] |
| } else { |
| set SPEED [format "%-*s %-*s " 2 "${elapsed}s" 4 "(-[expr $prior_elapsed - $elapsed])"] |
| set FASTER_OR_SLOWER 1 |
| } |
| |
| set prior_mem 0 |
| regexp {([0-9]+)maxresident} $time_content tmp prior_mem |
| set prior_mem [expr $prior_mem / 1024] |
| if {$PRIOR_MAX_MEM < $prior_mem} { |
| set PRIOR_MAX_MEM $prior_mem |
| } |
| if [expr ($mem > $prior_mem) && ($no_previous_time_content == 0)] { |
| set MEM [format "%-*s %-*s " 3 "${mem}" 3 "(+[expr $mem - $prior_mem])"] |
| set DIFF_MEM 1 |
| } elseif [expr ($mem == $prior_mem) || ($no_previous_time_content)] { |
| set MEM [format "%-*s " 4 "${mem}"] |
| } else { |
| set MEM [format "%-*s %-*s " 3 "${mem}" 3 "(-[expr $prior_mem - $mem])"] |
| set DIFF_MEM 1 |
| } |
| |
| if {($fatals != $log_fatals) || ($errors != $log_errors) || ($warnings != $log_warnings) || ($notes != $log_notes) || ($syntax != $log_syntax)} { |
| set overrallpass "DIFF" |
| set passstatus "DIFF" |
| set DIFF_TESTS($testname) $test |
| if {$fatals != $log_fatals} { |
| set fatals "$fatals ([expr $fatals - $log_fatals])" |
| } |
| if {$errors != $log_errors} { |
| set errors "$errors ([expr $errors - $log_errors])" |
| } |
| if {$warnings != $log_warnings} { |
| set warnings "$warnings ([expr $warnings - $log_warnings])" |
| } |
| if {$notes != $log_notes} { |
| set notes "$notes ([expr $notes - $log_notes])" |
| } |
| if {$syntax != $log_syntax} { |
| set syntax "$syntax ([expr $syntax - $log_syntax])" |
| } |
| } |
| } |
| if {($fatals == -1) || ($errors == -1) || ($warnings == -1) || ($notes == -1)} { |
| if {$segfault == 0} { |
| set segfault 1 |
| } |
| set fatals "SEGFAULT" |
| set passstatus "FAIL" |
| set overrallpass "FAIL" |
| } |
| if {$segfault == 1 || $segfault == 2} { |
| set fatals "SEGFAULT" |
| } |
| |
| log [format " %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s | %-*s |" $w2 $passstatus $w6 $fatals $w2 $syntax $w4 $errors $w2 $warnings $w4 $notes $w5 $SPEED $w5 $MEM ] |
| flush stdout |
| if {$SHOW_DETAILS == 1} { |
| log "Log:\n" |
| foreach de $details { |
| log $de |
| } |
| log "Diff Log:\n" |
| foreach de $log_details { |
| log $de |
| } |
| |
| } |
| |
| |
| set fid 0 |
| set fid_t 0 |
| if {$UPDATE == 1} { |
| set fid [open "$testname.log" "w"] |
| } else { |
| set fid [open "$REGRESSION_PATH/tests/$test/${testname}.log" "w"] |
| set fid_t [open "$REGRESSION_PATH/tests/$test/${testname}.time" "w"] |
| puts $fid_t $time_result |
| close $fid_t |
| } |
| puts $fid $result |
| close $fid |
| |
| cd $REGRESSION_PATH/tests |
| } |
| log $sep |
| return $overrallpass |
| } |
| |
| |
| log "************************" |
| log "START SURELOG REGRESSION" |
| log "" |
| set systemTime [clock seconds] |
| set date "Starts on [clock format $systemTime -format %D] [clock format $systemTime -format %H:%M:%S]" |
| log "$date" |
| log "COMMAND: $SURELOG_COMMAND" |
| |
| load_tests |
| set result [run_regression] |
| |
| log "\n RESULT : $result\n" |
| |
| if {$COMMIT_TEXT != ""} { |
| if {($result == "PASS") && ($ONETEST == "") && ($TESTTARGET =="")} { |
| log "git commit -m \"$COMMIT_TEXT\"" |
| exec sh -c "cd ~/surelog; git commit . -m \"$COMMIT_TEXT\"" |
| exec sh -c "git push" |
| } else { |
| log "CANNOT COMMIT CHANGES: $COMMIT_TEXT" |
| } |
| log "" |
| } |
| |
| cd $REGRESSION_PATH |
| |
| foreach testname [array names DIFF_TESTS] { |
| set testdir $TESTS_DIR($testname) |
| if {$SHOW_DIFF == 0} { |
| log " tkdiff $testdir/${testname}.log tests/$DIFF_TESTS($testname)/${testname}.log" |
| } else { |
| log "============================== DIFF ======================================================" |
| log "diff $testdir/${testname}.log tests/$DIFF_TESTS($testname)/${testname}.log" |
| catch {exec sh -c "diff -d $testdir/${testname}.log tests/$DIFF_TESTS($testname)/${testname}.log"} dummy |
| puts $dummy |
| } |
| } |
| if [info exists DIFF_TESTS] { |
| log "" |
| } |
| |
| set w1 8 |
| set sep +-[string repeat - 12]-+-[string repeat - $w1]-+-[string repeat - $w1]-+ |
| log $sep |
| log [format "| | %-*s | %-*s |" $w1 "CURRENT" $w1 "PREVIOUS" ] |
| log $sep |
| log [format "|TOTAL ELAPSED | %-*s | %-*s |" $w1 "${ELAPSED}s" $w1 "${PRIOR_ELAPSED}s" ] |
| log [format "|TOTAL USER | %-*s | %-*s |" $w1 "${USER}s" $w1 "${PRIOR_USER}s"] |
| log [format "|MAX MEM TEST | %-*s | %-*s |" $w1 "${MAX_MEM}Mb" $w1 "${PRIOR_MAX_MEM}Mb"] |
| log [format "|MAX TIME TEST | %-*s | %-*s |" $w1 "${MAX_TIME}s" $w1 "${PRIOR_MAX_TIME}s"] |
| log $sep |
| log "" |
| set systemTime [clock seconds] |
| set date "End on [clock format $systemTime -format %D] [clock format $systemTime -format %H:%M:%S]" |
| log "$date" |
| log "END SURELOG REGRESSION" |
| log "************************" |
| |
| if {$result == "PASS"} { |
| exit 0 |
| } else { |
| exit 1 |
| } |