diff --git a/src/tests.sh b/src/tests.sh index 2b9d127..f111e4e 100755 --- a/src/tests.sh +++ b/src/tests.sh @@ -1,20 +1,42 @@ #!/bin/bash + +TOTAL_PASSES=0 +TOTAL_FAILS=0 PASSES=0 FAILS=0 VALGRIND=0 +CURRENT_BLOCK="" + if [ "$1" == "-val" ]; then VALGRIND=1 fi +endBlock() { + echo "$PASSES tests PASSED" + if (($FAILS != 0)); then + echo "$FAILS tests FAILED" + fi + PASSES=0 + FAILS=0 + echo "" +} + +title() { + echo "$1" + # echo "$1" | sed 's/./-/g' | sed 's/$/-/g' +} + pass() { - echo "$1 test PASSED" + # echo "$1 test PASSED" ((PASSES++)) + ((TOTAL_PASSES++)) } fail() { echo "$1 test FAILED $2" ((FAILS++)) + ((TOTAL_FAILS++)) } check() { @@ -33,43 +55,73 @@ check() { fi } +echo "STARTING TESTS" +echo "" + +title "Plain return tests" check "PlainRet" "10" "10" check "StrRetrn" "\"hey\"" "hey" -echo "" +check "SingleStrRetrn" "'hey'" "hey" +endBlock + +title "Arithmetic" check "Addition" "(+ 1093 102852)" "103945" check "Multiply" "(*1000 10000)" "10000000" check "Division" "(/ 6418425 65)" "98745" -echo "" check "ChainAdd" "(+ 3917 17304 1293844 400 100000)" "1415465" check "ChainMul" "(* 8263 23 123)" "23376027" check "ChainDiv" "(/ 1493856 741 96 7)" "3" -echo "" check "ListAddi" "(+ 5 (1 2 3 (+ 10 10)))" "( 6 7 8 25 )" check "ListModu" "(% 5 (1 2 3 (* 11 11)))" "( 1 2 3 1 )" check "ListsMul" "(* (10 20 30) (1 20 300))" "( 10 400 9000 )" -echo "" +endBlock + +title "Comparison" check "GratrThn" "(> 23847123 19375933)" "T" check "LessThan" "(< 23847123 19375933)" "F" check "Equality" "(= 987654321 987654321 )" "T" check "StringEquality" "(= \"Bean\" \"Bean\" )" "T" -check "Stringinequality" "(= \"Beans\" \"Bean\" )" "F" -echo "" +check "StringInequality" "(= \"Beans\" \"Bean\" )" "F" +endBlock + +title "Ifs/Bools" check "IfReturn" "(if (T) 123456789 987654321)" "123456789" check "IfRetTwo" "(if F 123456789 987654321)" "987654321" check "EmptyCnd" "(if () T F)" "F" check "EtyLstLt" "(if (()) T F)" "T" -echo "" +endBlock + +title "Lists" check "RegLists" "(1 2 3 4 5)" "( 1 2 3 4 5 )" check "MultiTypeList" "(10 20 \"rascals\")" "( 10 20 rascals )" check "EmptyLst" "()" "( )" check "EmptLst2" "( )" "( )" -echo "" +check "ListIndex" "(at (+ 1 1) (1 2 1000 4 5))" "1000" +check "EvalElems" "((* 10 10) 7)" "( 100 7 )" +check "AppendToList" "(ap (1 20 300 4000 50000) 600000)" "( 1 20 300 4000 50000 600000 )" +check "AppndToEnvList" "(def l (50000 4000 300 20)) (def l (ap l 1)) (l)" "( 50000 4000 300 20 1 )" +check "Rest(Tail)OfList" "(def l (50000 4000 300 20)) (rest l)" "( 4000 300 20 )" +check "ListLength" "(def l (1 20 3 'abc' 'banana' (+ 10 5))) (len l)" "6" +endBlock + +title "Spacing" check "DenseSpc" "(+1093 102852)" "103945" check "WideSpac" "( + 1093 102852 )" "103945" check "VWidwSpc" " ( + 1093 102852 ) " "103945" -echo "" +endBlock + +title "DemoFunctions" check "DemoFunc" "(spent 68)" "Tip: \$13.60" -echo "" +check "Squaring" "(sq 9876)" "97535376" +check "Cubing" "(cube 81)" "531441" +check "Exponent" "(exp 9 9)" "387420489" +check "MaxRight" "(max 5 20)" "20" +check "MaxLeft" "(max 135890 98372)" "135890" +check "MinRight" "(min 8429 192449)" "8429" +check "MinLeft" "(min 17294722 17294721)" "17294721" +endBlock + +title "Lambdas" check "MultStmt" "(def yee (fn (a) (* 10 a))) ; (yee 5)" "50" check "DefinMap" "(def yee (fn (a) (* 10 a))) ; (map yee (5 10 2 (+ 12 0)))" "( 50 100 20 120 )" check "FbnciSeq" "(def fib (fn (a) \ @@ -84,31 +136,41 @@ check "Factorial" "(def fac (fn (a) \ (* a (fac (- a 1)) ) \ )));\ (fac 11)" "39916800" -echo "" +check "LambdaClone" "(def y (fn (a) (* 10 a))) (def b y) (def y 12345) ((b 5) y)" "( 50 12345 )" +check "Duplicate" "(def dupe (fn (a) (a a a)));(dupe (*10 10))" "( 100 100 100 )" +endBlock + +title "Cat" check "ExplicitCat" "(cat \"Big\" \" Kitty\")" "Big Kitty" check "CatNums" "(cat \"There are \" (+ 2 3) \" kitties\")" "There are 5 kitties" check "ImplicitCat" "(+ \"There are \" (* 5 4) \" bonks\")" "There are 20 bonks" # Mixing of `+` and implicit cat not recommended: check "CatAssocLeft" "(+ 10 20 \" rascals\")" "30 rascals" -echo "" -check "LambdaClone" "(def y (fn (a) (* 10 a))) (def b y) (def y 12345) ((b 5) y)" "( 50 12345 )" -echo "" -check "EvalElems" "((* 10 10) 7)" "( 100 7 )" -check "Duplicate" "(def dupe (fn (a) (a a a)));(dupe (*10 10))" "( 100 100 100 )" -echo "" -check "Squaring" "(sq 9876)" "97535376" -check "Cubing" "(cube 81)" "531441" -check "Exponent" "(exp 9 9)" "387420489" -echo "" +endBlock + +title "Filtering" check "Filtering" "(fil (< 321) (30 300 90 1200 135 801))" "( 1200 801 )" +check "FilterEval" "(fil (= 1000) ((+ 450 550) (* 20 50) (/ 30 3) (- 10000 100)))" "( 1000 1000 )" check "MapFilter" "(fil (< 50) (map sq (1 2 3 4 5 6 7 8 9 10 11 12)))" "( 64 81 100 121 144 )" +endBlock + +title "ShouldError" +check "LenOfNotList" "(len 5)" "NOT_A_LIST" +endBlock + +# title "Environment" +# check "EnvStressTestEarly" "(def a 1)(def b 20)(def c 'yee')(def d 'yeehunnid')(def e 3) (a)" "1" +# check "EnvStressTestLate" "(def a 1)(def b 2)(def c 3)(def d 4)(def e 5)(def f 6)(def n 40) (n)" "40" +# endBlock + + echo "" -if [ "$FAILS" -ne "0" ]; then - echo "$FAILS Tests Failed" +if [ "$TOTAL_FAILS" -ne "0" ]; then + echo "$TOTAL_FAILS Tests Failed" else - echo "$FAILS Tests Failed" + echo "$TOTAL_FAILS Tests Failed" fi -echo "$PASSES Tests Passed" +echo "$TOTAL_PASSES Tests Passed" echo ""