aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Spec.hs29
-rw-r--r--test/TestUtils.hs11
2 files changed, 25 insertions, 15 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
diff --git a/test/TestUtils.hs b/test/TestUtils.hs
index 478d923..bcb147c 100644
--- a/test/TestUtils.hs
+++ b/test/TestUtils.hs
@@ -12,8 +12,9 @@ initialConfig = Config {
configShowHelp = False
}
-runLContext :: LContext a -> IO a
-runLContext lc = do res <- runExceptT $ runReaderT lc initialConfig
- case res of
- Left (LException err) -> error err
- Right val -> return val
+runL :: LContext a -> IO a
+runL lc = do res <- runExceptT $ runReaderT lc initialConfig
+ case res of
+ Left (LException err) -> error err
+ Right val -> return val
+