Improved testing. Added `spent` and '"' to pebble

Tests automatically run on `make`. Removed breaking cleanObject() in parseEval()
This commit is contained in:
= 2020-05-10 17:51:46 +01:00
parent d83fa29bb4
commit 263af226b7
5 changed files with 46 additions and 19 deletions

View File

@ -1,11 +1,11 @@
all:
gcc -g -O0 -o pebblisp -D STANDALONE pebblisp.c tokens.c object.c
gcc -g -O0 -o pebblisp -D STANDALONE pebblisp.c tokens.c object.c && ./tests.sh
debug:
gcc -g -O0 -o pebblisp -D STANDALONE -D DEBUG pebblisp.c tokens.c object.c
gcc -g -O0 -o pebblisp -D STANDALONE -D DEBUG pebblisp.c tokens.c object.c && ./tests.sh
phrase:
gcc -g -O0 -o pebblisp -D STANDALONE -D DEBUG -D NO_REPL pebblisp.c tokens.c object.c
gcc -g -O0 -o pebblisp -D STANDALONE -D DEBUG -D NO_REPL pebblisp.c tokens.c object.c && ./tests.sh
run:
./pebblisp

View File

@ -43,6 +43,8 @@ char *tokens[] = {
"7","8","9", "0",
"a", "b", "c", "d", "e",
"= ", "< ", "> ",
"spent",
"\"",
"map", "fn", "def", "if", "\n",
END_PHRASE
};

View File

@ -490,3 +490,9 @@ inline Object errorObject(enum errorCode err)
o.err = err;
return o;
}
inline Object toBool(const Object test)
{
if(test.number == 0)
return boolObject(0);
}

View File

@ -231,8 +231,8 @@ void eval_forms(Object *destList, const Object *src, struct Environment *env)
Object eval(const Object *obj, struct Environment *env)
{
printd("eval():\n");
debugObj(obj);
// printf("eval():\n");
// printObj(obj);
switch(obj->type) {
case TYPE_NUMBER:
case TYPE_BOOL:
@ -284,6 +284,7 @@ Object eval(const Object *obj, struct Environment *env)
return ret;
} else {
// printf("Return list as passed");
return *obj;
}
}
@ -494,8 +495,7 @@ struct Environment defaultEnv() {
(cat \"Tip: $\" (/ a 5) \".\" \
(/ (* 100 (% a 5)) 5) \
) \
))",
&e);
))", &e);
return e;
}
@ -518,9 +518,7 @@ Object parseEval(const char *input, struct Environment *env)
#endif
Object parsed = parse(tokens).obj;
free(tokens);
Object ret = eval(&parsed, env);
cleanObject(&parsed);
return ret;
return eval(&parsed, env);
}
#ifdef STANDALONE
@ -531,8 +529,8 @@ int repl(struct Environment *env)
printf("pebblisp>> ");
fgets(input, 100, stdin);
Object obj = parseEval(input, env);
// printAndClean(&obj);
printObj(&obj);
printAndClean(&obj);
// printObj(&obj);
// printEnv(env);
}
}

View File

@ -3,12 +3,12 @@ PASSES=0
FAILS=0
pass() {
echo "$1 test PASSED"
echo "$1 test PASSED"
((PASSES++))
}
fail() {
echo "$1 test FAILED"
echo "$1 test FAILED"
((FAILS++))
}
@ -18,9 +18,12 @@ check() {
pass $1
else
fail $1
echo " Expected '$3' but received '$output'"
fi
}
check "PlainRet" "5" "5"
echo ""
check "Addition" "(+ 1093 102852)" "103945"
check "Multiply" "(*1000 10000)" "10000000"
check "Division" "(/ 6418425 65)" "98745"
@ -29,17 +32,35 @@ 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 ""
check "GratrThn" "(> 23847123 19375933)" "T"
check "LessThan" "(< 23847123 19375933)" "F"
check "Equality" "(= 987654321 987654321 )" "T"
echo ""
check "IfReturn" "(if (T) 123456789 987654321)" "123456789"
check "IfRetTwo" "(if F 123456789 987654321)" "987654321"
check "IfRetTwo" "(if () 123456789 987654321)" "987654321"
# check "IfRetTwo" "(if (()) 123456789 987654321)" "123456789"
check "EmptyCnd" "(if () T F)" "F"
# check "EtyLstLt" "(if (()) T F)" "T"
echo ""
check "RegLists" "(1 2 3 4 5)" "( 1 2 3 4 5 )"
check "EmptyLst" "()" "( )"
check "EmptLst2" "( )" "( )"
echo ""
check "DenseSpc" "(+1093 102852)" "103945"
check "WideSpac" "( + 1093 102852 )" "103945"
check "VWidwSpc" " ( + 1093 102852 ) " "103945"
echo ""
check "DemoFunc" "(spent 68)" "Tip: \$13.60"
echo ""
echo "$PASSES Tests Passed"
echo "$FAILS Tests Failed"
if [ "$FAILS" -ne "0" ]; then
echo "$FAILS Tests Failed"
else
echo "$FAILS Tests Failed"
fi
echo "$PASSES Tests Passed"