proc test_treelang_output { testname srcfiles infile resfile args } {
    set comp_output [treelang_target_compile $srcfiles $testname executable $args]
    if { [treelang_check_compile $testname $args $testname $comp_output] == 0 } {
    	return 0;
    }

    verbose "Expected output is in $resfile"
    set id [open $resfile r]
    set expected ""
    append expected [read $id]
    close $id
    set output ""
    set output [exec $testname $infile]
    regsub -all "\r" "$output" "" output
    regsub "\n*$" $expected "" expected
    regsub "\n*$" $output "" output
    regsub "^\n*" $expected "" expected
    regsub "^\n*" $output "" output
    regsub -all "\[ \t\]\[ \t\]*" $expected " " expected
    regsub -all "\[ \t\]*\n\n*" $expected "\n" expected
    regsub -all "\[ \t\]\[ \t\]*" $output " " output
    regsub -all "\[ \t\]*\n\n*" $output "\n" output
    verbose "expected is $expected"
    verbose "actual is $output"

    if { $expected == $output } {
	pass $testname
    } else {
        fail $testname
    }
    exec rm $testname
}
global srcdir subdir

catch { lsort [glob -nocomplain ${srcdir}/${subdir}/*.out] } outfiles
verbose "Output files are $outfiles"

set prefix ""
foreach x $outfiles {
    regsub "\\.out$" $x "" prefix
    set bname [file tail $prefix]

    if [file exists ${prefix}.inp] {
	set inpfile ${prefix}.inp
    } else {
	set inpfile ""
    }

    verbose "inpfile is $inpfile"

    set srcfiles [lsort [glob -nocomplain ${prefix}.{c,tree}]]
    verbose "source files are $srcfiles"
    test_treelang_output "treelang/$bname" $srcfiles $inpfile $x ""
}

# Local Variables:
# tcl-indent-level:4
# End:
