proc single-run { src } { set path [split $src "/"] set filename [lindex $path [expr [llength $path]-1]] # extract basename and check extension set fname [split $filename "."] if {[llength $fname] < 2} { fail "Bad filename syntax '$src'" return -1 } if {[lindex $fname [expr [llength $fname]-1]] != "single"} { fail "Not .single extension '$src'" return -1 } # setup filenames # $src is the name of the original testfile with absolute path # tests/$filename is the name of the original testfile with relative path, # relative to the testsuite directory set test_prg "$filename" set base_name [lindex $fname 0] puts "Running $base_name..." #generate output directory exec mkdir -p ./single.out/out set outfile ./single.out/out/$base_name.out set refoutfile ./single.out/$base_name.out set errfile ./single.out/out/$base_name.err set referrfile ./single.out/$base_name.err # run the test set command "LD_LIBRARY_PATH=\"\${LD_LIBRARY_PATH}:../src/.libs\" $src >$outfile 2>$errfile" set result "" set oops [catch { set result [exec sh -c $command] } catched] if {$oops != 0} { fail "test case failed for $base_name: $catched" return -1 } # check return code from runprg if {$result != ""} { warning "Run of $base_name results in '$result'" return -1 } if { [ file exists $refoutfile ] == 0 } { perror "Missing file $refoutfile" 0 } else { if { [ diff $refoutfile $outfile ] != 1 } { puts "Output doesn't match expected data:" puts [ exec sh -c "diff -u $refoutfile $outfile || true" ] fail $base_name return -1 } } if { [ file exists $referrfile ] == 0 } { perror "Missing file $referrfile" 0 } else { if { [ diff $referrfile $errfile ] != 1 } { puts "Output doesn't match expected data:" puts [ exec sh -c "diff -u $referrfile $errfile || true" ] fail $base_name return -1 } } # ok, all is fine pass $base_name return 0 } proc multi-run { src } { set errorOccured 0 set path [split $src "/"] set filename [lindex $path [expr [llength $path]-1]] # extract basename and check extension set fname [split $filename "."] if {[llength $fname] < 2} { fail "Bad filename syntax '$src'" return -1 } if {[lindex $fname [expr [llength $fname]-1]] != "multi"} { fail "Not .multi extension '$src'" return -1 } # setup filenames # $src is the name of the original testfile with absolute path # tests/$filename is the name of the original testfile with relative path, # relative to the testsuite directory set test_prg "$filename" set base_name [lindex $fname 0] puts "Running $base_name..." set testcases [glob $base_name/*.in ] foreach testcase $testcases { set testPath [split $testcase "/"] set testFilename [lindex $testPath [expr [llength $testPath]-1]] set testFname [split $testFilename "."] set testBase_name [lindex $testFname 0] puts " ... $testBase_name" #generate output directory exec mkdir -p ./$base_name/out set errfile ./$base_name/out/$testBase_name.err set referrfile ./$base_name/$testBase_name.err set outfile ./$base_name/out/$testBase_name.out set refoutfile ./$base_name/$testBase_name.out # run the test set command "LD_LIBRARY_PATH=\"\${LD_LIBRARY_PATH}:../src/.libs\" $src $testcase >$outfile 2>$errfile" set result "" set oops [catch { set result [exec sh -c $command] } catched] if {$oops != 0} { fail "test case failed for $testBase_name: $catched" set errorOccured 0 continue } # check return code from runprg if {$result != ""} { warning "Run of $testBase_name results in '$result'" set errorOccured 0 continue } if { [ file exists $refoutfile ] == 0 } { perror "Missing file $refoutfile" 0 } else { if { [ diff $refoutfile $outfile ] != 1 } { puts "Output doesn't match expected data:" puts [ exec sh -c "diff -u $refoutfile $outfile || true" ] fail $testBase_name set errorOccured 0 continue } } if { [ file exists $referrfile ] == 0 } { perror "Missing file $referrfile" 0 } else { if { [ diff $referrfile $errfile ] != 1 } { puts "Output doesn't match expected data:" puts [ exec sh -c "diff -u $referrfile $errfile || true" ] fail $testBase_name set errorOccured 0 continue } } # ok, all is fine pass $testBase_name } if { $errorOccured == 0 } { return 0 } else { return -1 } }