about summary refs log tree commit diff stats
path: root/subx/test_apps
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-10-01 22:09:46 -0700
committerKartik Agaram <vc@akkartik.com>2018-10-01 22:09:46 -0700
commit839dc88dc0439ae3f32c8c0f7650f32b09f311cc (patch)
tree9515ae5bb7bc4cb8594f3fd5187cb696872d57da /subx/test_apps
parent1aacbdf5beafe03d16c0c69801bd34e29aeb25b6 (diff)
downloadmu-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-xsubx/test_apps148
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