about summary refs log tree commit diff stats
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
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.
-rw-r--r--.travis.yml1
-rwxr-xr-xsubx/test_apps148
-rwxr-xr-xsubx/test_layers16
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