diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-10-01 22:09:46 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-10-01 22:09:46 -0700 |
commit | 839dc88dc0439ae3f32c8c0f7650f32b09f311cc (patch) | |
tree | 9515ae5bb7bc4cb8594f3fd5187cb696872d57da /subx/test_apps | |
parent | 1aacbdf5beafe03d16c0c69801bd34e29aeb25b6 (diff) | |
download | mu-839dc88dc0439ae3f32c8c0f7650f32b09f311cc.tar.gz |
4647 - support 64-bit Linux in CI
Generated 32-bit binaries are different on 64-bit. So let's compare them only on a 32-bit platform. And let's start also verifying their run-time behavior on Linux.
Diffstat (limited to 'subx/test_apps')
-rwxr-xr-x | subx/test_apps | 148 |
1 files changed, 148 insertions, 0 deletions
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 |