diff options
Diffstat (limited to 'test_apps')
-rwxr-xr-x | test_apps | 244 |
1 files changed, 116 insertions, 128 deletions
diff --git a/test_apps b/test_apps index 129e429c..8f6253ba 100755 --- a/test_apps +++ b/test_apps @@ -1,180 +1,171 @@ #!/bin/sh -# Build and test all included SubX programs: +# Build and test all included SubX programs on Linux: # translate them into ELF binaries # compare the generated binaries with what's already in git -# run/test the ELF binaries in emulated mode (unless $NO_EMULATION) -# run/test the ELF binaries in native mode (if on Linux) +# run/test the ELF binaries in emulated mode +# run/test the ELF binaries in native mode # # Example usage: -# test_apps # compare generated binaries, run them in emulated and native mode -# test_apps record # run binaries in emulated and native mode -# NO_EMULATION=1 test_apps # compare generated binaries, run them in native mode -# NO_EMULATION=1 test_apps record # run binaries just in native mode +# test_apps +# test_apps record # don't compare with what's in git set -e cd `dirname $0` -test $NO_EMULATION || EMULATED=1 -test $EMULATED && echo 'testing emulated runs' -test `uname` = 'Linux' && NATIVE=1 -test $NATIVE && echo 'testing native runs' - ./build -export OS=${OS:-linux} - -echo "== translating and running using C++" +echo "== translating using the bootstrap C++ translator" # example programs echo ex1 -./bootstrap translate init.$OS apps/ex1.subx -o apps/ex1 +./bootstrap_bin translate init.linux apps/ex1.subx -o apps/ex1 test "$1" = 'record' || git diff --exit-code apps/ex1 -test $EMULATED && { - ./bootstrap run apps/ex1 || ret=$? +{ + ./bootstrap_bin run apps/ex1 || ret=$? test $ret -eq 42 # life, the universe and everything } -test $NATIVE && { +{ apps/ex1 || ret=$? test $ret -eq 42 # life, the universe and everything } echo ex2 -./bootstrap translate init.$OS apps/ex2.subx -o apps/ex2 +./bootstrap_bin translate init.linux apps/ex2.subx -o apps/ex2 test "$1" = 'record' || git diff --exit-code apps/ex2 -test $EMULATED && { - ./bootstrap run apps/ex2 || ret=$? +{ + ./bootstrap_bin run apps/ex2 || ret=$? test $ret -eq 7 # 3 + 4 } -test $NATIVE && { +{ apps/ex2 || ret=$? test $ret -eq 7 # 3 + 4 } echo ex3 -./bootstrap translate init.$OS apps/ex3.subx -o apps/ex3 +./bootstrap_bin translate init.linux apps/ex3.subx -o apps/ex3 test "$1" = 'record' || git diff --exit-code apps/ex3 -test $EMULATED && { - ./bootstrap run apps/ex3 || ret=$? +{ + ./bootstrap_bin run apps/ex3 || ret=$? test $ret -eq 55 # 1 + 2 + ... + 10 } -test $NATIVE && { +{ apps/ex3 || ret=$? test $ret -eq 55 # 1 + 2 + ... + 10 } echo ex4 -./bootstrap translate init.$OS apps/ex4.subx -o apps/ex4 +./bootstrap_bin translate init.linux apps/ex4.subx -o apps/ex4 test "$1" = 'record' || git diff --exit-code apps/ex4 -test $EMULATED && { - echo a | ./bootstrap run apps/ex4 >ex4.out || true +{ + echo a | ./bootstrap_bin run apps/ex4 >ex4.out || true test `cat ex4.out` = 'a' } -test $NATIVE && { +{ echo a | apps/ex4 >ex4.out || true test `cat ex4.out` = 'a' } echo ex5 -./bootstrap translate init.$OS apps/ex5.subx -o apps/ex5 +./bootstrap_bin translate init.linux apps/ex5.subx -o apps/ex5 test "$1" = 'record' || git diff --exit-code apps/ex5 -test $EMULATED && { - echo a | ./bootstrap run apps/ex5 >ex5.out || true +{ + echo a | ./bootstrap_bin run apps/ex5 >ex5.out || true test `cat ex5.out` = 'a' } -test $NATIVE && { +{ echo a | apps/ex5 >ex5.out || true test `cat ex5.out` = 'a' } echo ex6 -./bootstrap translate init.$OS apps/ex6.subx -o apps/ex6 +./bootstrap_bin translate init.linux apps/ex6.subx -o apps/ex6 test "$1" = 'record' || git diff --exit-code apps/ex6 -test $EMULATED && { - ./bootstrap run apps/ex6 >ex6.out || true +{ + ./bootstrap_bin run apps/ex6 >ex6.out || true test "`cat ex6.out`" = 'Hello, world!' } -test $NATIVE && { +{ apps/ex6 >ex6.out || true test "`cat ex6.out`" = 'Hello, world!' } echo ex7 -./bootstrap translate init.$OS apps/ex7.subx -o apps/ex7 +./bootstrap_bin translate init.linux apps/ex7.subx -o apps/ex7 test "$1" = 'record' || git diff --exit-code apps/ex7 -test $EMULATED && { - ./bootstrap run apps/ex7 || ret=$? +{ + ./bootstrap_bin run apps/ex7 || ret=$? test $ret -eq 97 # 'a' } -test $NATIVE && { +{ apps/ex7 || ret=$? test $ret -eq 97 # 'a' } echo ex8 -./bootstrap translate init.$OS apps/ex8.subx -o apps/ex8 +./bootstrap_bin translate init.linux apps/ex8.subx -o apps/ex8 test "$1" = 'record' || git diff --exit-code apps/ex8 -test $EMULATED && { - ./bootstrap run apps/ex8 abcd || ret=$? +{ + ./bootstrap_bin run apps/ex8 abcd || ret=$? test $ret -eq 4 # length('abcd') } -test $NATIVE && { +{ apps/ex8 abcd || ret=$? test $ret -eq 4 # length('abcd') } echo ex9 -./bootstrap translate init.$OS apps/ex9.subx -o apps/ex9 +./bootstrap_bin translate init.linux apps/ex9.subx -o apps/ex9 test "$1" = 'record' || git diff --exit-code apps/ex9 -test $EMULATED && { - ./bootstrap run apps/ex9 z x || ret=$? +{ + ./bootstrap_bin run apps/ex9 z x || ret=$? test $ret -eq 2 # 'z' - 'x' } -test $NATIVE && { +{ apps/ex9 z x || ret=$? test $ret -eq 2 # 'z' - 'x' } echo ex10 -./bootstrap translate init.$OS apps/ex10.subx -o apps/ex10 +./bootstrap_bin translate init.linux apps/ex10.subx -o apps/ex10 test "$1" = 'record' || git diff --exit-code apps/ex10 -test $EMULATED && { - ./bootstrap run apps/ex10 abc abc || ret=$? +{ + ./bootstrap_bin run apps/ex10 abc abc || ret=$? test $ret -eq 1 # equal - ./bootstrap run apps/ex10 abc abcd # 0; not equal + ./bootstrap_bin run apps/ex10 abc abcd # 0; not equal } -test $NATIVE && { +{ apps/ex10 abc abc || ret=$? test $ret -eq 1 # equal apps/ex10 abc abcd # 0; not equal } echo ex11 -./bootstrap translate init.$OS apps/ex11.subx -o apps/ex11 +./bootstrap_bin translate init.linux apps/ex11.subx -o apps/ex11 test "$1" = 'record' || git diff --exit-code apps/ex11 -test $EMULATED && { - ./bootstrap run apps/ex11 +{ + ./bootstrap_bin run apps/ex11 echo } -test $NATIVE && { +{ apps/ex11 echo } echo ex12 -./bootstrap translate init.$OS apps/ex12.subx -o apps/ex12 +./bootstrap_bin translate init.linux apps/ex12.subx -o apps/ex12 test "$1" = 'record' || git diff --exit-code apps/ex12 -test $EMULATED && ./bootstrap run apps/ex12 # final byte of mmap'd address is well-nigh guaranteed to be 0 +test $EMULATED && ./bootstrap_bin run apps/ex12 # final byte of mmap'd address is well-nigh guaranteed to be 0 test $NATIVE && apps/ex12 echo ex13 -./bootstrap translate init.$OS apps/ex13.subx -o apps/ex13 +./bootstrap_bin translate init.linux apps/ex13.subx -o apps/ex13 test "$1" = 'record' || git diff --exit-code apps/ex13 -test $EMULATED && { - ./bootstrap run apps/ex13 || ret=$? +{ + ./bootstrap_bin run apps/ex13 || ret=$? test $ret -eq 1 # 3 == 3 } -test $NATIVE && { +{ apps/ex13 || ret=$? test $ret -eq 1 # 3 == 3 } @@ -182,15 +173,15 @@ test $NATIVE && { # Larger apps that use the standard library. echo factorial -./bootstrap translate init.$OS [01]*.subx apps/factorial.subx -o apps/factorial +./bootstrap_bin translate init.linux [01]*.subx apps/factorial.subx -o apps/factorial test "$1" = 'record' || git diff --exit-code apps/factorial -test $EMULATED && { - ./bootstrap run apps/factorial || ret=$? +{ + ./bootstrap_bin run apps/factorial || ret=$? test $ret -eq 120 # factorial(5) - ./bootstrap run apps/factorial test + ./bootstrap_bin run apps/factorial test echo } -test $NATIVE && { +{ apps/factorial || ret=$? test $ret -eq 120 # factorial(5) apps/factorial test @@ -198,25 +189,25 @@ test $NATIVE && { } echo crenshaw2-1 -./bootstrap translate init.$OS [01]*.subx apps/crenshaw2-1.subx -o apps/crenshaw2-1 +./bootstrap_bin translate init.linux [01]*.subx apps/crenshaw2-1.subx -o apps/crenshaw2-1 test "$1" = 'record' || git diff --exit-code apps/crenshaw2-1 -test $EMULATED && { - ./bootstrap run apps/crenshaw2-1 test +{ + ./bootstrap_bin run apps/crenshaw2-1 test echo } -test $NATIVE && { +{ apps/crenshaw2-1 test echo } echo crenshaw2-1b -./bootstrap translate init.$OS [01]*.subx apps/crenshaw2-1b.subx -o apps/crenshaw2-1b +./bootstrap_bin translate init.linux [01]*.subx apps/crenshaw2-1b.subx -o apps/crenshaw2-1b test "$1" = 'record' || git diff --exit-code apps/crenshaw2-1b -test $EMULATED && { - ./bootstrap run apps/crenshaw2-1b test +{ + ./bootstrap_bin run apps/crenshaw2-1b test echo } -test $NATIVE && { +{ apps/crenshaw2-1b test echo } @@ -226,13 +217,13 @@ test $NATIVE && { for phase in hex survey pack assort dquotes tests do echo $phase - ./bootstrap translate init.$OS [01]*.subx apps/subx-params.subx apps/$phase.subx -o apps/$phase + ./bootstrap_bin translate init.linux [01]*.subx apps/subx-params.subx apps/$phase.subx -o apps/$phase test "$1" = 'record' || git diff --exit-code apps/$phase - test $EMULATED && { - ./bootstrap run apps/$phase test + { + ./bootstrap_bin run apps/$phase test echo } - test $NATIVE && { + { apps/$phase test echo } @@ -241,70 +232,67 @@ done # Higher-level syntax. # Certain phases of translation run native beyond this point. We're starting -# to go beyond functionality of the C++ bootstrap. +# to go beyond functionality of the C++ bootstrap_bin. echo sigils -./bootstrap translate init.$OS [012]*.subx apps/subx-params.subx apps/sigils.subx -o apps/sigils +./bootstrap_bin translate init.linux [012]*.subx apps/subx-params.subx apps/sigils.subx -o apps/sigils test "$1" = 'record' || git diff --exit-code apps/sigils -test $EMULATED && { - ./bootstrap run apps/sigils test +{ + ./bootstrap_bin run apps/sigils test echo } -test $NATIVE && { +{ apps/sigils test echo } -test $NATIVE || { echo 'there are more tests, but you need Linux to run them'; exit 0; } - echo calls -cat init.$OS [012]*.subx apps/subx-params.subx apps/calls.subx | apps/sigils > a.sigils -./bootstrap translate a.sigils -o apps/calls +cat init.linux [012]*.subx apps/subx-params.subx apps/calls.subx | apps/sigils > a.sigils +./bootstrap_bin translate a.sigils -o apps/calls test "$1" = 'record' || git diff --exit-code apps/calls -test $EMULATED && { - ./bootstrap run apps/calls test +{ + ./bootstrap_bin run apps/calls test echo } -test $NATIVE && { +{ apps/calls test echo } echo braces -cat init.$OS [012]*.subx apps/subx-params.subx apps/braces.subx | apps/calls | apps/sigils > a.sigils -./bootstrap translate a.sigils -o apps/braces +cat init.linux [012]*.subx apps/subx-params.subx apps/braces.subx | apps/calls | apps/sigils > a.sigils +./bootstrap_bin translate a.sigils -o apps/braces test "$1" = 'record' || git diff --exit-code apps/braces -test $EMULATED && { - ./bootstrap run apps/braces test +{ + ./bootstrap_bin run apps/braces test echo } -test $NATIVE && { +{ apps/braces test echo } echo mu -cat init.$OS [0-2]*.subx apps/mu.subx | apps/braces | apps/calls | apps/sigils > a.sigils -./bootstrap translate a.sigils -o apps/mu +cat init.linux [0-2]*.subx apps/mu.subx | apps/braces | apps/calls | apps/sigils > a.sigils +./bootstrap_bin translate a.sigils -o apps/mu test "$1" = 'record' || git diff --exit-code apps/mu -test $EMULATED && { - ./bootstrap run apps/mu test +{ + ./bootstrap_bin run apps/mu test echo } -test $NATIVE && { +{ apps/mu test echo } -test $NATIVE || exit 0 -echo "== translating using SubX (native only)" +echo "== translating using the self-hosted translator" # example programs for n in `seq 1 12` do echo ex$n - ./translate_subx init.$OS apps/ex$n.subx + ./translate_subx init.linux apps/ex$n.subx diff apps/ex$n a.elf done @@ -313,7 +301,7 @@ done for app in factorial crenshaw2-1 crenshaw2-1b do echo $app - ./translate_subx init.$OS [01]*.subx apps/$app.subx + ./translate_subx init.linux [01]*.subx apps/$app.subx diff apps/$app a.elf done @@ -322,77 +310,77 @@ done for app in hex survey pack assort dquotes tests do echo $app - ./translate_subx init.$OS [01]*.subx apps/subx-params.subx apps/$app.subx + ./translate_subx init.linux [01]*.subx apps/subx-params.subx apps/$app.subx diff apps/$app a.elf done for app in sigils calls braces do echo $app - ./translate_subx init.$OS [012]*.subx apps/subx-params.subx apps/$app.subx + ./translate_subx init.linux [012]*.subx apps/subx-params.subx apps/$app.subx diff apps/$app a.elf done # Mu translator echo mu -./translate_subx init.$OS [0-2]*.subx apps/mu.subx +./translate_subx init.linux [0-2]*.subx apps/mu.subx diff apps/mu a.elf # Mu programs echo ex1.mu ./translate_mu apps/ex1.mu -test $EMULATED && { - ./bootstrap run a.elf || ret=$? +{ + ./bootstrap_bin run a.elf || ret=$? test $ret -eq 42 # life, the universe and everything } -test $NATIVE && { +{ ./a.elf || ret=$? test $ret -eq 42 # life, the universe and everything } echo ex2.mu ./translate_mu apps/ex2.mu -test $EMULATED && { - ./bootstrap run a.elf || ret=$? +{ + ./bootstrap_bin run a.elf || ret=$? test $ret -eq 7 } -test $NATIVE && { +{ ./a.elf || ret=$? test $ret -eq 7 } echo ex3.mu ./translate_mu apps/ex3.mu -test $EMULATED && { - ./bootstrap run a.elf || ret=$? +{ + ./bootstrap_bin run a.elf || ret=$? test $ret -eq 55 } -test $NATIVE && { +{ ./a.elf || ret=$? test $ret -eq 55 } echo ex3.2.mu ./translate_mu apps/ex3.2.mu -test $EMULATED && { - ./bootstrap run a.elf || ret=$? +{ + ./bootstrap_bin run a.elf || ret=$? test $ret -eq 55 } -test $NATIVE && { +{ ./a.elf || ret=$? test $ret -eq 55 } echo factorial.mu ./translate_mu apps/factorial.mu -test $EMULATED && { - ./bootstrap run a.elf || ret=$? +{ + ./bootstrap_bin run a.elf || ret=$? test $ret -eq 120 - ./bootstrap run a.elf test + ./bootstrap_bin run a.elf test echo } -test $NATIVE && { +{ ./a.elf || ret=$? test $ret -eq 120 ./a.elf test |