evaluator: add if and primitives and tests

This commit is contained in:
2018-04-30 17:47:15 +02:00
parent 92a2ecbd8e
commit 013c0844c7
28 changed files with 110 additions and 4 deletions

View File

@@ -0,0 +1,5 @@
tests
testEvalCarExpressionEvaluatesItsArgument
self
assert: (ph parseAndEval: '(car (cons (quote a) (cons (quote b) ())))')
equals: #a

View File

@@ -0,0 +1,3 @@
tests
testEvalCdrExpressionEvaluatesItsArgument
self assert: (ph parseAndEval: '(cdr (quote (quote a)))') equals: #(a)

View File

@@ -0,0 +1,4 @@
tests
testEvalExpressionArith
self assert: (ph parseAndEval: '(* (+ 2 3) 8)') equals: 40.
self assert: (ph parseAndEval: '(* 8 (+ 2 3))') equals: 40

View File

@@ -0,0 +1,3 @@
tests
testEvalExpressionMult
self assert: (ph parseAndEval: '(* 3 8)') equals: 24

View File

@@ -0,0 +1,4 @@
tests
testEvalIf
self assert: (ph parseAndEval: '(if true 4 5)') equals: 4.
self assert: (ph parseAndEval: '(if false 4 5)') equals: 5

View File

@@ -0,0 +1,3 @@
tests
testEvalListExpression
self assert: (ph parseAndEval: '(cons (quote a) ())') equals: #(a)

View File

@@ -0,0 +1,8 @@
tests
testEvalQuote
self
assert: (ph parseAndEval: '(quote (* x x))')
equals: #(#* #x #x).
self
assert: (ph parseAndEval: '(quote (quote (* x x)))')
equals: #(quote #(#* #x #x))

View File

@@ -0,0 +1,5 @@
tests
testIsNull
self assert: (ph parseAndEval: '(isNull #())').
self assert: (ph parseAndEval: '(isNull (quote ()))').
self deny: (ph parseAndEval: '(isNull (cons (quote a) #()))')

View File

@@ -0,0 +1,4 @@
tests
testNot
self assert: (ph parseAndEval: '(not false)').
self deny: (ph parseAndEval: '(not true)')