# Test gasp.

# GASP is now deprecated (and not built by default)
# so if it does not exist, do not test it.
global GASP
if {![info exists GASP] || ! [file exists $GASP] } then {
    return 1
}

proc gasp_test { filename testname opt }  {
    global GASP
    global srcdir
    global host_triplet

    send_log "$srcdir/lib/run $GASP -I$srcdir/gasp -s $opt $filename.asm -o gasp.out\n"
    catch "exec $srcdir/lib/run $GASP -I$srcdir/gasp -s $opt $filename.asm -o gasp.out" errs
    catch "exec diff gasp.out $filename.out" diffs
    set diffs [prune_warnings $diffs]
    if ![string match "" $diffs] {
	send_log "$diffs\n"
	verbose $diffs
	fail $testname
	return 0
    } else {
	pass $testname
    }

}

foreach src [ lsort [ glob $srcdir/gasp/*.asm ] ] {
    regsub -all ".asm" $src "" t
    regsub "^.*/(\[^/\]*)$" $t "gasp \\1" testname
    gasp_test $t $testname ""
}

foreach src [ lsort [ glob $srcdir/gasp/mri/*.asm ] ] {
    regsub -all ".asm" $src "" t
    regsub "^.*/(\[^/\]*)$" $t "gasp MRI \\1" testname
    gasp_test $t $testname "-M"
}
