aboutsummaryrefslogtreecommitdiffstats
path: root/test/Spec.hs
diff options
context:
space:
mode:
Diffstat (limited to 'test/Spec.hs')
-rw-r--r--test/Spec.hs29
1 files changed, 19 insertions, 10 deletions
diff --git a/test/Spec.hs b/test/Spec.hs
index 0869b55..db28f39 100644
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,21 +1,30 @@
{-# OPTIONS_GHC -Wno-missing-signatures #-}
import Test.HUnit
import Control.Monad.Except
+import qualified Data.Map as M
import Tokenizer ( tokenize )
import Parser ( parse )
+import Evaluator ( evaluate )
+import Builtins
import TestUtils
import Utils
-test1 = (runLContext $ tokenize "(+ 1 (- 10 5))")
- >>= assertEqual "tokenize" ["(", "+", "1", "(", "-", "10", "5", ")", ")"]
-
-test2 = (runLContext $ parse ["(", "+", "1", "2", ")"])
- >>= assertEqual "parse" [ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2]]
-
-tests = TestList $ map TestCase [
- test1,
- test2
+tests = [
+ "tokenize1" ~:
+ do got <- runL $ tokenize "(+ 1 (- 10 5))"
+ let expected = ["(", "+", "1", "(", "-", "10", "5", ")", ")"]
+ assertEqual "" got expected,
+ "parse1" ~:
+ do got <- runL $ parse ["(", "+", "1", "2", ")"]
+ let expected = [ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2]]
+ assertEqual "" got expected,
+ "evaluate1" ~:
+ do let env = M.fromList [("+", builtinAdd2)] :: Env
+ (gotEnv, gotAST) <- runL $ evaluate env (ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2])
+ let expectedAST = ASTInteger 3
+ assertEqual "" gotAST expectedAST
+ assertEqual "" (M.keys gotEnv) (M.keys env)
]
main :: IO ()
-main = void $ runTestTT tests
+main = void $ runTestTT $ test tests