libqbe/tools/unit.sh

120 lines
1.3 KiB
Bash
Raw Normal View History

2016-03-02 22:11:50 -05:00
#!/bin/sh
2016-03-27 19:35:19 -04:00
DIR=`cd $(dirname "$0"); pwd`
2016-03-28 12:53:53 -04:00
QBE=$DIR/../obj/qbe
2016-03-27 15:00:45 -04:00
2016-03-02 22:11:50 -05:00
TMP=/tmp/qbe.zzzz
DRV=$TMP.c
ASM=$TMP.s
BIN=$TMP.bin
OUT=$TMP.out
cleanup() {
rm -f $DRV $ASM $BIN $OUT
}
extract() {
WHAT="$1"
FILE="$2"
awk "
/^# >>> $WHAT/ {
p = 1
next
}
/^# <<</ {
2016-10-19 19:26:00 -04:00
p = 0
2016-03-02 22:11:50 -05:00
}
p
" $FILE \
| sed -e 's/# //' \
| sed -e 's/#$//'
}
once() {
T="$1"
if ! test -f $T
then
echo "invalid test file $T" >&2
exit 1
fi
2016-10-19 19:26:00 -04:00
printf "%-45s" "$(basename $T)..."
2016-03-02 22:11:50 -05:00
2016-03-27 15:00:45 -04:00
if ! $QBE -o $ASM $T
2016-03-02 22:11:50 -05:00
then
echo "[qbe fail]"
return 1
fi
extract driver $T > $DRV
extract output $T > $OUT
if test -s $DRV
then
LNK="$DRV $ASM"
else
LNK="$ASM"
fi
2016-12-05 02:50:08 -05:00
if ! cc -no-pie -g -o $BIN $LNK
2016-03-02 22:11:50 -05:00
then
echo "[cc fail]"
return 1
fi
2016-03-03 09:44:06 -05:00
if test -s $OUT
then
2016-03-03 13:39:24 -05:00
$BIN a b c | diff - $OUT
2016-03-03 09:44:06 -05:00
RET=$?
REASON="output"
else
$BIN a b c
2016-03-03 09:44:06 -05:00
RET=$?
REASON="returned $RET"
2016-03-03 09:44:06 -05:00
fi
if test $RET -ne 0
then
echo "[$REASON fail]"
2016-03-03 09:44:06 -05:00
return 1
fi
2016-10-19 19:26:00 -04:00
echo "[ok]"
2016-03-02 22:11:50 -05:00
}
#trap cleanup TERM QUIT
2016-03-03 13:24:31 -05:00
if test -z "$1"
then
2016-08-16 13:38:39 -07:00
echo "usage: tools/unit.sh {all, SSAFILE}" 2>&1
2016-03-03 13:24:31 -05:00
exit 1
fi
2016-03-02 22:11:50 -05:00
case $1 in
"all")
F=0
2016-03-28 12:53:53 -04:00
for T in $DIR/../test/[!_]*.ssa
2016-03-02 22:11:50 -05:00
do
once $T
F=`expr $F + $?`
done
if test $F -ge 1
then
echo
echo "$F test(s) failed!"
else
echo
echo "All is fine!"
fi
2016-10-24 14:36:35 -04:00
exit $F
2016-03-02 22:11:50 -05:00
;;
*)
once $1
exit $?
;;
esac