diff --git a/src/Makefile b/src/Makefile index 280a9b6..ec32124 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 diff --git a/src/calc.h b/src/calc.h index 0b82dca..95a77a9 100644 --- a/src/calc.h +++ b/src/calc.h @@ -43,6 +43,8 @@ char *tokens[] = { "7","8","9", "0", "a", "b", "c", "d", "e", "= ", "< ", "> ", + "spent", + "\"", "map", "fn", "def", "if", "\n", END_PHRASE }; diff --git a/src/object.c b/src/object.c index 2a3ab20..daa3222 100644 --- a/src/object.c +++ b/src/object.c @@ -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); +} diff --git a/src/pebblisp.c b/src/pebblisp.c index fdcdef2..1ca155c 100644 --- a/src/pebblisp.c +++ b/src/pebblisp.c @@ -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); } } diff --git a/src/tests.sh b/src/tests.sh index 861a6ee..3ff83e9 100755 --- a/src/tests.sh +++ b/src/tests.sh @@ -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,28 +18,49 @@ 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 "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 "" 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"