about summary refs log tree commit diff stats
path: root/test_apps
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2019-07-27 16:01:55 -0700
committerKartik Agaram <vc@akkartik.com>2019-07-27 17:47:59 -0700
commit6e1eeeebfb453fa7c871869c19375ce60fbd7413 (patch)
tree539c4a3fdf1756ae79770d5c4aaf6366f1d1525e /test_apps
parent8846a7f85cc04b77b2fe8a67b6d317723437b00c (diff)
downloadmu-6e1eeeebfb453fa7c871869c19375ce60fbd7413.tar.gz
5485 - promote SubX to top-level
Diffstat (limited to 'test_apps')
-rwxr-xr-xtest_apps336
1 files changed, 336 insertions, 0 deletions
diff --git a/test_apps b/test_apps
new file mode 100755
index 00000000..b8c142be
--- /dev/null
+++ b/test_apps
@@ -0,0 +1,336 @@
+#!/bin/sh
+# Build and test (in emulated mode) all included SubX programs.
+# Also compare generated binaries.
+# If running on Linux, also test natively.
+
+set -e
+cd `dirname $0`
+
+test `uname` = 'Linux'  &&  echo 'testing native runs as well'
+
+CFLAGS=$CFLAGS ./build
+
+echo "== translating and running using C++"
+
+echo ex1
+./subx translate examples/ex1.subx  -o examples/ex1
+[ "$1" != record ]  &&  git diff --exit-code examples/ex1
+./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
+./subx translate examples/ex2.subx  -o examples/ex2
+[ "$1" != record ]  &&  git diff --exit-code examples/ex2
+./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
+./subx translate examples/ex3.subx  -o examples/ex3
+[ "$1" != record ]  &&  git diff --exit-code examples/ex3
+./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
+./subx translate examples/ex4.subx  -o examples/ex4
+[ "$1" != record ]  &&  git diff --exit-code examples/ex4
+echo a | ./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
+./subx translate examples/ex5.subx  -o examples/ex5
+[ "$1" != record ]  &&  git diff --exit-code examples/ex5
+echo a | ./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
+./subx translate examples/ex6.subx  -o examples/ex6
+[ "$1" != record ]  &&  git diff --exit-code examples/ex6
+./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
+./subx translate examples/ex7.subx  -o examples/ex7
+[ "$1" != record ]  &&  git diff --exit-code examples/ex7
+./subx run examples/ex7  ||  ret=$?
+test $ret -eq 97  # 'a'
+test `uname` = 'Linux'  &&  {
+  examples/ex7  ||  ret=$?
+  test $ret -eq 97  # 'a'
+}
+
+echo ex8
+./subx translate examples/ex8.subx  -o examples/ex8
+[ "$1" != record ]  && git diff --exit-code examples/ex8
+./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
+./subx translate examples/ex9.subx  -o examples/ex9
+[ "$1" != record ]  && git diff --exit-code examples/ex9
+./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
+./subx translate examples/ex10.subx  -o examples/ex10
+[ "$1" != record ]  && git diff --exit-code examples/ex10
+./subx run examples/ex10 abc abc  ||  ret=$?
+test $ret -eq 1  # equal
+./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
+./subx translate examples/ex11.subx  -o examples/ex11
+[ "$1" != record ]  && git diff --exit-code examples/ex11
+./subx run examples/ex11
+echo
+test `uname` = 'Linux'  &&  {
+  examples/ex11
+  echo
+}
+
+echo ex12
+./subx translate examples/ex12.subx  -o examples/ex12
+[ "$1" != record ]  && git diff --exit-code examples/ex12
+./subx run examples/ex12  # final byte of mmap'd address is well-nigh guaranteed to be 0
+test `uname` = 'Linux'  &&  examples/ex12
+
+echo factorial
+./subx translate 0*.subx apps/factorial.subx  -o apps/factorial
+[ "$1" != record ]  &&  git diff --exit-code apps/factorial
+./subx run apps/factorial  ||  ret=$?
+test $ret -eq 120  # factorial(5)
+./subx run apps/factorial test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/factorial  ||  ret=$?
+  test $ret -eq 120  # factorial(5)
+  apps/factorial test
+  echo
+}
+
+echo crenshaw2-1
+./subx translate 0*.subx apps/crenshaw2-1.subx  -o apps/crenshaw2-1
+[ "$1" != record ]  &&  git diff --exit-code apps/crenshaw2-1
+./subx run apps/crenshaw2-1 test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/crenshaw2-1 test
+  echo
+}
+
+echo crenshaw2-1b
+./subx translate 0*.subx apps/crenshaw2-1b.subx  -o apps/crenshaw2-1b
+[ "$1" != record ]  &&  git diff --exit-code apps/crenshaw2-1b
+./subx run apps/crenshaw2-1b test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/crenshaw2-1b test
+  echo
+}
+
+echo handle
+./subx translate 0*.subx apps/handle.subx  -o apps/handle
+[ "$1" != record ]  &&  git diff --exit-code apps/handle
+./subx run apps/handle > handle.out 2>&1  ||  true
+grep -q 'lookup succeeded' handle.out  ||  { echo "missing success test"; exit 1; }
+grep -q 'lookup failed' handle.out  ||  { echo "missing failure test"; exit 1; }
+test `uname` = 'Linux'  &&  {
+  apps/handle > handle.out 2>&1  ||  true
+  grep -q 'lookup succeeded' handle.out  ||  { echo "missing success test"; exit 1; }
+  grep -q 'lookup failed' handle.out  ||  { echo "missing failure test"; exit 1; }
+}
+
+echo hex
+./subx translate 0*.subx apps/subx-common.subx apps/hex.subx  -o apps/hex
+[ "$1" != record ]  &&  git diff --exit-code apps/hex
+./subx run apps/hex test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/hex test
+  echo
+}
+
+echo survey
+./subx translate 0*.subx apps/subx-common.subx apps/survey.subx  -o apps/survey
+[ "$1" != record ]  &&  git diff --exit-code apps/survey
+./subx run apps/survey test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/survey test
+  echo
+}
+
+echo pack
+./subx translate 0*.subx apps/subx-common.subx apps/pack.subx  -o apps/pack
+[ "$1" != record ]  &&  git diff --exit-code apps/pack
+./subx run apps/pack test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/pack test
+  echo
+}
+
+echo assort
+./subx translate 0*.subx apps/subx-common.subx apps/assort.subx  -o apps/assort
+[ "$1" != record ]  &&  git diff --exit-code apps/assort
+./subx run apps/assort test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/assort test
+  echo
+}
+
+echo dquotes
+./subx translate 0*.subx apps/subx-common.subx apps/dquotes.subx  -o apps/dquotes
+[ "$1" != record ]  &&  git diff --exit-code apps/dquotes
+./subx run apps/dquotes test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/dquotes test
+  echo
+}
+
+echo tests
+./subx translate 0*.subx apps/subx-common.subx apps/tests.subx  -o apps/tests
+[ "$1" != record ]  &&  git diff --exit-code apps/tests
+./subx run apps/tests test
+echo
+test `uname` = 'Linux'  &&  {
+  apps/tests test
+  echo
+}
+
+echo "== translating using SubX"
+
+echo ex1
+cat examples/ex1.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex1 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex1.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex1 -
+}
+
+echo ex2
+cat examples/ex2.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex2 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex2.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex2 -
+}
+
+echo ex3
+cat examples/ex3.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex3 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex3.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex3 -
+}
+
+echo ex4
+cat examples/ex4.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex4 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex4.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex4 -
+}
+
+echo ex5
+cat examples/ex5.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex5 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex5.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex5 -
+}
+
+echo ex6
+cat examples/ex6.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex6 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex6.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex6 -
+}
+
+echo ex7
+cat examples/ex7.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex7 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex7.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex7 -
+}
+
+echo ex8
+cat examples/ex8.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex8 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex8.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex8 -
+}
+
+echo ex9
+cat examples/ex9.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex9 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex9.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex9 -
+}
+
+echo ex10
+cat examples/ex10.subx |./subx_bin run apps/tests |./subx_bin run apps/dquotes |./subx_bin run apps/assort |./subx_bin run apps/pack |./subx_bin run apps/survey |./subx_bin run apps/hex |diff examples/ex10 -
+test `uname` = 'Linux'  &&  {
+  cat examples/ex10.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex10 -
+}
+
+# Only native runs beyond this point. Emulated runs time out on travis-ci.org.
+test `uname` = 'Linux'  ||  exit 0
+
+echo ex11
+cat examples/ex11.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex11 -
+
+echo ex12
+cat examples/ex12.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff examples/ex12 -
+
+# Larger apps that use the standard library.
+
+echo factorial
+cat 0*.subx apps/factorial.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/factorial -
+echo crenshaw2-1
+cat 0*.subx apps/crenshaw2-1.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/crenshaw2-1 -
+echo crenshaw2-1b
+cat 0*.subx apps/crenshaw2-1b.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/crenshaw2-1b -
+echo handle
+cat 0*.subx apps/handle.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/handle -
+
+# Phases of the self-hosted SubX translator.
+
+echo hex
+cat 0*.subx apps/subx-common.subx apps/hex.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/hex -
+echo survey
+cat 0*.subx apps/subx-common.subx apps/survey.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/survey -
+echo pack
+cat 0*.subx apps/subx-common.subx apps/pack.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/pack -
+echo assort
+cat 0*.subx apps/subx-common.subx apps/assort.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/assort -
+echo dquotes
+cat 0*.subx apps/subx-common.subx apps/dquotes.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/dquotes -
+echo tests
+cat 0*.subx apps/subx-common.subx apps/tests.subx |apps/tests |apps/dquotes |apps/assort |apps/pack |apps/survey |apps/hex |diff apps/tests -
+
+exit 0