diff options
-rw-r--r-- | .travis.yml | 1 | ||||
-rwxr-xr-x | subx/test_apps | 148 | ||||
-rwxr-xr-x | subx/test_layers | 16 |
3 files changed, 149 insertions, 16 deletions
diff --git a/.travis.yml b/.travis.yml index 38c05ead..89e1b57a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,7 @@ matrix: - env: COMMAND=./test_layers BUILD=build2 START=one-off # other directories - env: COMMAND=./subx/test_layers + - env: COMMAND=./subx/test_apps script: - $COMMAND $START $END diff --git a/subx/test_apps b/subx/test_apps new file mode 100755 index 00000000..9be51ab1 --- /dev/null +++ b/subx/test_apps @@ -0,0 +1,148 @@ +#!/bin/sh +# Build and test (in emulated mode) all included SubX programs. +# If running on a 32-bit machine, also compare generated binaries. (64-bit introduces discrepancies.) +# If running on Linux, also test natively. + +set -e +cd `dirname $0` + +test `uname -m` = 'i686' && echo 'comparing generated binaries' +test `uname` = 'Linux' && echo 'testing native runs as well' + +echo ex1 +CFLAGS=-g ./subx translate examples/ex1.subx -o examples/ex1 +test `uname -m` = 'i686' && git diff --quiet examples/ex1 +CFLAGS=-g ./subx run examples/ex1 || ret=$? +test $ret -eq 42 # life, the universe and everything +test `uname` = 'Linux' && { + examples/ex1 || ret=$? + test $ret -eq 42 # life, the universe and everything +} + +echo ex2 +CFLAGS=-g ./subx translate examples/ex2.subx -o examples/ex2 +test `uname -m` = 'i686' && git diff --quiet examples/ex2 +CFLAGS=-g ./subx run examples/ex2 || ret=$? +test $ret -eq 2 # 1 + 1 +test `uname` = 'Linux' && { + examples/ex2 || ret=$? + test $ret -eq 2 # 1 + 1 +} + +echo ex3 +CFLAGS=-g ./subx translate examples/ex3.subx -o examples/ex3 +test `uname -m` = 'i686' && git diff --quiet examples/ex3 +CFLAGS=-g ./subx run examples/ex3 || ret=$? +test $ret -eq 55 # 1 + 2 + ... + 10 +test `uname` = 'Linux' && { + examples/ex3 || ret=$? + test $ret -eq 55 # 1 + 2 + ... + 10 +} + +echo ex4 +CFLAGS=-g ./subx translate examples/ex4.subx -o examples/ex4 +test `uname -m` = 'i686' && git diff --quiet examples/ex4 +echo a | CFLAGS=-g ./subx run examples/ex4 >ex4.out || true +test `cat ex4.out` = 'a' +test `uname` = 'Linux' && { + echo a | examples/ex4 >ex4.out || true + test `cat ex4.out` = 'a' +} + +echo ex5 +CFLAGS=-g ./subx translate examples/ex5.subx -o examples/ex5 +test `uname -m` = 'i686' && git diff --quiet examples/ex5 +echo a | CFLAGS=-g ./subx run examples/ex5 >ex5.out || true +test `cat ex5.out` = 'a' +test `uname` = 'Linux' && { + echo a | examples/ex5 >ex5.out || true + test `cat ex5.out` = 'a' +} + +echo ex6 +CFLAGS=-g ./subx translate examples/ex6.subx -o examples/ex6 +test `uname -m` = 'i686' && git diff --quiet examples/ex6 +CFLAGS=-g ./subx run examples/ex6 >ex6.out || true +test "`cat ex6.out`" = 'Hello, world!' +test `uname` = 'Linux' && { + examples/ex6 >ex6.out || true + test "`cat ex6.out`" = 'Hello, world!' +} + +echo ex7 +CFLAGS=-g ./subx translate examples/ex7.subx -o examples/ex7 +test `uname -m` = 'i686' && git diff --quiet examples/ex7 +CFLAGS=-g ./subx run examples/ex7 || ret=$? +test $ret -eq 97 # 'a' +test `uname` = 'Linux' && { + examples/ex7 || ret=$? + test $ret -eq 97 # 'a' +} + +echo ex8 +CFLAGS=-g ./subx translate examples/ex8.subx -o examples/ex8 +test `uname -m` = 'i686' && git diff --quiet examples/ex8 +CFLAGS=-g ./subx run examples/ex8 abcd || ret=$? +test $ret -eq 4 # length('abcd') +test `uname` = 'Linux' && { + examples/ex8 abcd || ret=$? + test $ret -eq 4 # length('abcd') +} + +echo ex9 +CFLAGS=-g ./subx translate examples/ex9.subx -o examples/ex9 +test `uname -m` = 'i686' && git diff --quiet examples/ex9 +CFLAGS=-g ./subx run examples/ex9 z x || ret=$? +test $ret -eq 2 # 'z' - 'x' +test `uname` = 'Linux' && { + examples/ex9 z x || ret=$? + test $ret -eq 2 # 'z' - 'x' +} + +echo ex10 +CFLAGS=-g ./subx translate examples/ex10.subx -o examples/ex10 +test `uname -m` = 'i686' && git diff --quiet examples/ex10 +CFLAGS=-g ./subx run examples/ex10 abc abc || ret=$? +test $ret -eq 1 # equal +CFLAGS=-g ./subx run examples/ex10 abc abcd # 0; not equal +test `uname` = 'Linux' && { + examples/ex10 abc abc || ret=$? + test $ret -eq 1 # equal + examples/ex10 abc abcd # 0; not equal +} + +echo ex11 +CFLAGS=-g ./subx translate examples/ex11.subx -o examples/ex11 +test `uname -m` = 'i686' && git diff --quiet examples/ex11 +CFLAGS=-g ./subx run examples/ex11 2>ex11.out || true # exit status for run_tests not yet well-defined +grep -vq 'F' ex11.out # no test failures +test `uname` = 'Linux' && { + examples/ex11 2>ex11.out || true # exit status for run_tests not yet well-defined + grep -vq 'F' ex11.out # no test failures +} + +echo factorial +CFLAGS=-g ./subx translate *.subx apps/factorial.subx -o apps/factorial +test `uname -m` = 'i686' && git diff --quiet apps/factorial +CFLAGS=-g ./subx run apps/factorial || ret=$? +test $ret -eq 120 # factorial(5) +CFLAGS=-g ./subx run apps/factorial test 2>factorial.out || true # exit status for run_tests not yet well-defined +grep -vq 'F' factorial.out # no test failures +test `uname` = 'Linux' && { + apps/factorial || ret=$? + test $ret -eq 120 # factorial(5) + apps/factorial test 2>factorial.out || true # exit status for run_tests not yet well-defined + grep -vq 'F' factorial.out # no test failures +} + +echo crenshaw2-1 +CFLAGS=-g ./subx translate *.subx apps/crenshaw2-1.subx -o apps/crenshaw2-1 +test `uname -m` = 'i686' && git diff --quiet apps/crenshaw2-1 +CFLAGS=-g ./subx run apps/crenshaw2-1 2>crenshaw2-1.out || true +test "`cat crenshaw2-1.out`" = 'Error: Integer expected' +test `uname` = 'Linux' && { + apps/crenshaw2-1 2>crenshaw2-1.out || true + test "`cat crenshaw2-1.out`" = 'Error: Integer expected' +} + +exit 0 diff --git a/subx/test_layers b/subx/test_layers index 2afa6dab..ea0a9273 100755 --- a/subx/test_layers +++ b/subx/test_layers @@ -9,19 +9,3 @@ do echo "=== $f" ./build_and_test_until $f || exit 1 done - -./clean top -for f in examples/*.subx -do - echo $f - target=`echo $f |sed 's/\..*//'` - CFLAGS=-g ./subx translate $f -o $target - git diff --quiet $target || exit 1 -done -for f in apps/*.subx -do - echo $f - target=`echo $f |sed 's/\..*//'` - CFLAGS=-g ./subx translate *.subx $f -o $target - git diff --quiet $target || exit 1 -done |