Switch to new testing style

Do blocks of tests, and only report individual tests on error, to save space. Add more tests, including some for upcoming list functions
This commit is contained in:
= 2020-05-28 15:25:36 +01:00
parent f0a8f6ca43
commit d041e7c5bb
1 changed files with 88 additions and 26 deletions

View File

@ -1,20 +1,42 @@
#!/bin/bash #!/bin/bash
TOTAL_PASSES=0
TOTAL_FAILS=0
PASSES=0 PASSES=0
FAILS=0 FAILS=0
VALGRIND=0 VALGRIND=0
CURRENT_BLOCK=""
if [ "$1" == "-val" ]; then if [ "$1" == "-val" ]; then
VALGRIND=1 VALGRIND=1
fi 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() { pass() {
echo "$1 test PASSED" # echo "$1 test PASSED"
((PASSES++)) ((PASSES++))
((TOTAL_PASSES++))
} }
fail() { fail() {
echo "$1 test FAILED $2" echo "$1 test FAILED $2"
((FAILS++)) ((FAILS++))
((TOTAL_FAILS++))
} }
check() { check() {
@ -33,43 +55,73 @@ check() {
fi fi
} }
echo "STARTING TESTS"
echo ""
title "Plain return tests"
check "PlainRet" "10" "10" check "PlainRet" "10" "10"
check "StrRetrn" "\"hey\"" "hey" check "StrRetrn" "\"hey\"" "hey"
echo "" check "SingleStrRetrn" "'hey'" "hey"
endBlock
title "Arithmetic"
check "Addition" "(+ 1093 102852)" "103945" check "Addition" "(+ 1093 102852)" "103945"
check "Multiply" "(*1000 10000)" "10000000" check "Multiply" "(*1000 10000)" "10000000"
check "Division" "(/ 6418425 65)" "98745" check "Division" "(/ 6418425 65)" "98745"
echo ""
check "ChainAdd" "(+ 3917 17304 1293844 400 100000)" "1415465" check "ChainAdd" "(+ 3917 17304 1293844 400 100000)" "1415465"
check "ChainMul" "(* 8263 23 123)" "23376027" check "ChainMul" "(* 8263 23 123)" "23376027"
check "ChainDiv" "(/ 1493856 741 96 7)" "3" check "ChainDiv" "(/ 1493856 741 96 7)" "3"
echo ""
check "ListAddi" "(+ 5 (1 2 3 (+ 10 10)))" "( 6 7 8 25 )" 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 "ListModu" "(% 5 (1 2 3 (* 11 11)))" "( 1 2 3 1 )"
check "ListsMul" "(* (10 20 30) (1 20 300))" "( 10 400 9000 )" check "ListsMul" "(* (10 20 30) (1 20 300))" "( 10 400 9000 )"
echo "" endBlock
title "Comparison"
check "GratrThn" "(> 23847123 19375933)" "T" check "GratrThn" "(> 23847123 19375933)" "T"
check "LessThan" "(< 23847123 19375933)" "F" check "LessThan" "(< 23847123 19375933)" "F"
check "Equality" "(= 987654321 987654321 )" "T" check "Equality" "(= 987654321 987654321 )" "T"
check "StringEquality" "(= \"Bean\" \"Bean\" )" "T" check "StringEquality" "(= \"Bean\" \"Bean\" )" "T"
check "Stringinequality" "(= \"Beans\" \"Bean\" )" "F" check "StringInequality" "(= \"Beans\" \"Bean\" )" "F"
echo "" endBlock
title "Ifs/Bools"
check "IfReturn" "(if (T) 123456789 987654321)" "123456789" check "IfReturn" "(if (T) 123456789 987654321)" "123456789"
check "IfRetTwo" "(if F 123456789 987654321)" "987654321" check "IfRetTwo" "(if F 123456789 987654321)" "987654321"
check "EmptyCnd" "(if () T F)" "F" check "EmptyCnd" "(if () T F)" "F"
check "EtyLstLt" "(if (()) T F)" "T" check "EtyLstLt" "(if (()) T F)" "T"
echo "" endBlock
title "Lists"
check "RegLists" "(1 2 3 4 5)" "( 1 2 3 4 5 )" check "RegLists" "(1 2 3 4 5)" "( 1 2 3 4 5 )"
check "MultiTypeList" "(10 20 \"rascals\")" "( 10 20 rascals )" check "MultiTypeList" "(10 20 \"rascals\")" "( 10 20 rascals )"
check "EmptyLst" "()" "( )" check "EmptyLst" "()" "( )"
check "EmptLst2" "( )" "( )" 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 "DenseSpc" "(+1093 102852)" "103945"
check "WideSpac" "( + 1093 102852 )" "103945" check "WideSpac" "( + 1093 102852 )" "103945"
check "VWidwSpc" " ( + 1093 102852 ) " "103945" check "VWidwSpc" " ( + 1093 102852 ) " "103945"
echo "" endBlock
title "DemoFunctions"
check "DemoFunc" "(spent 68)" "Tip: \$13.60" 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 "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 "DefinMap" "(def yee (fn (a) (* 10 a))) ; (map yee (5 10 2 (+ 12 0)))" "( 50 100 20 120 )"
check "FbnciSeq" "(def fib (fn (a) \ check "FbnciSeq" "(def fib (fn (a) \
@ -84,31 +136,41 @@ check "Factorial" "(def fac (fn (a) \
(* a (fac (- a 1)) ) \ (* a (fac (- a 1)) ) \
)));\ )));\
(fac 11)" "39916800" (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 "ExplicitCat" "(cat \"Big\" \" Kitty\")" "Big Kitty"
check "CatNums" "(cat \"There are \" (+ 2 3) \" kitties\")" "There are 5 kitties" check "CatNums" "(cat \"There are \" (+ 2 3) \" kitties\")" "There are 5 kitties"
check "ImplicitCat" "(+ \"There are \" (* 5 4) \" bonks\")" "There are 20 bonks" check "ImplicitCat" "(+ \"There are \" (* 5 4) \" bonks\")" "There are 20 bonks"
# Mixing of `+` and implicit cat not recommended: # Mixing of `+` and implicit cat not recommended:
check "CatAssocLeft" "(+ 10 20 \" rascals\")" "30 rascals" check "CatAssocLeft" "(+ 10 20 \" rascals\")" "30 rascals"
echo "" endBlock
check "LambdaClone" "(def y (fn (a) (* 10 a))) (def b y) (def y 12345) ((b 5) y)" "( 50 12345 )"
echo "" title "Filtering"
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 ""
check "Filtering" "(fil (< 321) (30 300 90 1200 135 801))" "( 1200 801 )" 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 )" 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 "" echo ""
if [ "$FAILS" -ne "0" ]; then if [ "$TOTAL_FAILS" -ne "0" ]; then
echo "$FAILS Tests Failed" echo "$TOTAL_FAILS Tests Failed"
else else
echo "$FAILS Tests Failed" echo "$TOTAL_FAILS Tests Failed"
fi fi
echo "$PASSES Tests Passed" echo "$TOTAL_PASSES Tests Passed"
echo "" echo ""