Improve testing.
Remove explicit endBlock function. Test some of the new features.
This commit is contained in:
parent
711719289f
commit
bbb2cb471e
51
src/tests.sh
51
src/tests.sh
|
@ -15,17 +15,19 @@ if [ "$1" == "-val" ]; then
|
||||||
VALGRIND=true
|
VALGRIND=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
endBlock() {
|
FIRST_TITLE=true
|
||||||
echo "[0m"
|
|
||||||
if (($FAILS != 0)); then
|
|
||||||
echo -e "$FAIL_OUTPUT"
|
|
||||||
FAIL_OUTPUT=""
|
|
||||||
fi
|
|
||||||
FAILS=0
|
|
||||||
DISABLED=false
|
|
||||||
}
|
|
||||||
|
|
||||||
title() {
|
title() {
|
||||||
|
if ! $FIRST_TITLE; then
|
||||||
|
echo "[0m"
|
||||||
|
if (($FAILS != 0)); then
|
||||||
|
echo -e "$FAIL_OUTPUT"
|
||||||
|
FAIL_OUTPUT=""
|
||||||
|
fi
|
||||||
|
FAILS=0
|
||||||
|
DISABLED=false
|
||||||
|
else
|
||||||
|
FIRST_TITLE=false
|
||||||
|
fi
|
||||||
echo -n "[[0m$1] "
|
echo -n "[[0m$1] "
|
||||||
if [[ "$2" == "disable" ]]; then
|
if [[ "$2" == "disable" ]]; then
|
||||||
echo -n "[33mDISABLED[0m"
|
echo -n "[33mDISABLED[0m"
|
||||||
|
@ -72,7 +74,6 @@ check "StrRetrn" "\"hey\"" "hey"
|
||||||
check "SingleStrRetrn" "\"hey\"" "hey"
|
check "SingleStrRetrn" "\"hey\"" "hey"
|
||||||
check "HexReturn" "0x0f0f0" "61680"
|
check "HexReturn" "0x0f0f0" "61680"
|
||||||
check "BinaryReturn" "0b011010011010011" "13523"
|
check "BinaryReturn" "0b011010011010011" "13523"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Arithmetic"
|
title "Arithmetic"
|
||||||
check "Addition" "(+ 1093 102852)" "103945"
|
check "Addition" "(+ 1093 102852)" "103945"
|
||||||
|
@ -84,7 +85,6 @@ check "ChainDiv" "(/ 1493856 741 96 7)" "3"
|
||||||
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 )"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Comparison"
|
title "Comparison"
|
||||||
check "GratrThn" "(> 23847123 19375933)" "T"
|
check "GratrThn" "(> 23847123 19375933)" "T"
|
||||||
|
@ -93,7 +93,6 @@ 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"
|
||||||
check "NullInequality" "(= \"Beans\" \"\" )" "F"
|
check "NullInequality" "(= \"Beans\" \"\" )" "F"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "TypeCheck"
|
title "TypeCheck"
|
||||||
check "IsNum" "(isnum 23847123)" "T"
|
check "IsNum" "(isnum 23847123)" "T"
|
||||||
|
@ -102,14 +101,12 @@ check "IsString" "(isstr \"words\")" "T"
|
||||||
check "IsStringEmpty" "(isstr \"\")" "T"
|
check "IsStringEmpty" "(isstr \"\")" "T"
|
||||||
check "NumNotString" "(isstr 5)" "F"
|
check "NumNotString" "(isstr 5)" "F"
|
||||||
check "ListNotString" "(isstr (\"hello\"))" "F"
|
check "ListNotString" "(isstr (\"hello\"))" "F"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Ifs/Bools"
|
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"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Lists"
|
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 )"
|
||||||
|
@ -124,13 +121,14 @@ check "PrependToList" "(pre (1 20 300 4000 50000) 600000)" "( 600000 1 20 300 40
|
||||||
check "PrepndToEnvList" "(def l (50000 4000 300 20)) (def l (pre l 1)) l" "( 1 50000 4000 300 20 )"
|
check "PrepndToEnvList" "(def l (50000 4000 300 20)) (def l (pre l 1)) l" "( 1 50000 4000 300 20 )"
|
||||||
check "Rest(Tail)OfList" "(def l (50000 4000 300 20)) (rest l)" "( 4000 300 20 )"
|
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"
|
check "ListLength" "(def l (1 20 3 \"abc\" \"banana\" (+ 10 5))) (len l)" "6"
|
||||||
endBlock
|
check "Identifying list" "(islist (1 2 3))" "T"
|
||||||
|
check "Identifying empty list" "(islist ())" "T"
|
||||||
|
check "Identifying not a list" "(islist 1)" "F"
|
||||||
|
|
||||||
title "Spacing"
|
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"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "DemoFunctions"
|
title "DemoFunctions"
|
||||||
check "Squaring" "(sq 9876)" "97535376"
|
check "Squaring" "(sq 9876)" "97535376"
|
||||||
|
@ -140,7 +138,6 @@ check "MaxRight" "(max 5 20)" "20"
|
||||||
check "MaxLeft" "(max 135890 98372)" "135890"
|
check "MaxLeft" "(max 135890 98372)" "135890"
|
||||||
check "MinRight" "(min 8429 192449)" "8429"
|
check "MinRight" "(min 8429 192449)" "8429"
|
||||||
check "MinLeft" "(min 17294722 17294721)" "17294721"
|
check "MinLeft" "(min 17294722 17294721)" "17294721"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Lambdas"
|
title "Lambdas"
|
||||||
check "MultStmt" "(def yee (fn (a) (* 10 a))) ; (yee 5)" "50"
|
check "MultStmt" "(def yee (fn (a) (* 10 a))) ; (yee 5)" "50"
|
||||||
|
@ -163,7 +160,6 @@ check "Factorial" "\
|
||||||
(fac 11)" "39916800"
|
(fac 11)" "39916800"
|
||||||
check "LambdaClone" "(def y (fn (a) (* 10 a))) (def b y) (def y 12345) ((b 5) y)" "( 50 12345 )"
|
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 )"
|
check "Duplicate" "(def dupe (fn (a) (() (a a a))));(dupe (*10 10))" "( 100 100 100 )"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Cat"
|
title "Cat"
|
||||||
check "ExplicitCat" "(cat \"Big\" \" Kitty\")" "Big Kitty"
|
check "ExplicitCat" "(cat \"Big\" \" Kitty\")" "Big Kitty"
|
||||||
|
@ -171,19 +167,26 @@ 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 currently expected but not recommended:
|
# Mixing of `+` and implicit cat currently expected but not recommended:
|
||||||
check "CatAssocLeft" "(+ 10 20 \" rascals\")" "30 rascals"
|
check "CatAssocLeft" "(+ 10 20 \" rascals\")" "30 rascals"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Filtering"
|
title "Filtering"
|
||||||
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 "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 "Structs"
|
||||||
|
check "StructDef" "(struct Post (title body))" "T"
|
||||||
|
check "Building a struct"\
|
||||||
|
'(struct Post (title body)) (Post "A title" "The Body")'\
|
||||||
|
'{ title: "A title", body: "The Body" }'
|
||||||
|
check "Accessing struct fields"\
|
||||||
|
"(struct Post (title body)) (def p (Post \"TITLE\" \"BODY\")) (p's title p's body)"\
|
||||||
|
"( TITLE BODY )"
|
||||||
|
|
||||||
title "HigherOrder"
|
title "HigherOrder"
|
||||||
|
check "Simple reducing" '(reduce ((1 2 3) 0) +)' '6'
|
||||||
check "FuncReturningAFunc" "(def plusser (fn (outer) (fn (inner) (+ outer inner))))\
|
check "FuncReturningAFunc" "(def plusser (fn (outer) (fn (inner) (+ outer inner))))\
|
||||||
(def plusFive (plusser 5))\
|
(def plusFive (plusser 5))\
|
||||||
(plusFive 10)" "15"
|
(plusFive 10)" "15"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "ShouldError"
|
title "ShouldError"
|
||||||
check "LenOfNotList" "(len 5)" "NOT_A_LIST"
|
check "LenOfNotList" "(len 5)" "NOT_A_LIST"
|
||||||
|
@ -202,24 +205,20 @@ check "BadParens4" ")))hey" \
|
||||||
"'MISMATCHED_PARENS': (loadfile \"examples/lib.pbl\") )))hey"
|
"'MISMATCHED_PARENS': (loadfile \"examples/lib.pbl\") )))hey"
|
||||||
check "BadParens5" "hey))(" \
|
check "BadParens5" "hey))(" \
|
||||||
"'MISMATCHED_PARENS': (loadfile \"examples/lib.pbl\") hey))("
|
"'MISMATCHED_PARENS': (loadfile \"examples/lib.pbl\") hey))("
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Eval"
|
title "Eval"
|
||||||
check "BasicNumberEval" "(eval \"5\")" "5"
|
check "BasicNumberEval" "(eval \"5\")" "5"
|
||||||
check "BasicOpEval" "(eval \"(+ 5 10)\")" "15"
|
check "BasicOpEval" "(eval \"(+ 5 10)\")" "15"
|
||||||
check "MapFilter" "(eval \"(fil (< 50) (map sq (1 2 3 4 5 6 7 8 9 10 11 12)))\")" "( 64 81 100 121 144 )"
|
check "MapFilter" "(eval \"(fil (< 50) (map sq (1 2 3 4 5 6 7 8 9 10 11 12)))\")" "( 64 81 100 121 144 )"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Forbble" disable
|
title "Forbble" disable
|
||||||
check "BasicForbbleOp" "(loadfile \"examples/forbble.pbl\") (feval (10 10 * .)) \"\"" "100"
|
check "BasicForbbleOp" "(loadfile \"examples/forbble.pbl\") (feval (10 10 * .)) \"\"" "100"
|
||||||
check "FibForbble" "(loadfile \"examples/forbble.pbl\") (feval (1 1 _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f .)) \"\"" "28657"
|
check "FibForbble" "(loadfile \"examples/forbble.pbl\") (feval (1 1 _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f _f .)) \"\"" "28657"
|
||||||
check "ForbbleDefine" "(loadfile \"examples/forbble.pbl\") (feval ( : \"cubed\" dup dup * * $ )) (feval (4 cubed .)) \"\"" "64"
|
check "ForbbleDefine" "(loadfile \"examples/forbble.pbl\") (feval ( : \"cubed\" dup dup * * $ )) (feval (4 cubed .)) \"\"" "64"
|
||||||
endBlock
|
|
||||||
|
|
||||||
title "Environment"
|
title "Environment"
|
||||||
check "EnvStressTestEarly" "(def a 1)(def b 20)(def c \"yee\")(def d \"yeehunnid\")(def e 3) (a)" "( 1 )"
|
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 g 6)(def n 40) n" "40"
|
check "EnvStressTestLate" "(def a 1)(def b 2)(def c 3)(def d 4)(def e 5)(def g 6)(def n 40) n" "40"
|
||||||
endBlock
|
|
||||||
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
Loading…
Reference in New Issue