diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2022-09-26 11:15:48 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2022-12-05 14:21:53 +0200 |
| commit | 158b202ba113914a8aa1fc7a8a410d98bfb18f5b (patch) | |
| tree | e4fda8c15395c16e2116bb33d4f9d317af1ec282 /test/Spec.hs | |
| parent | 98d3f41cd8cebf1c1e26c29f01140d0543ee5853 (diff) | |
Improve tests
Diffstat (limited to 'test/Spec.hs')
| -rw-r--r-- | test/Spec.hs | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/test/Spec.hs b/test/Spec.hs index db28f39..9011aba 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -2,28 +2,40 @@ import Test.HUnit import Control.Monad.Except import qualified Data.Map as M +import Builtins import Tokenizer ( tokenize ) import Parser ( parse ) import Evaluator ( evaluate ) -import Builtins -import TestUtils import Utils +import TestUtils + +tokenizeTests = TestLabel "tokenize" $ TestList $ map TestCase [ + do got <- expectSuccessL $ tokenize "(+ 1 (- 10 5))" + let expected = ["(", "+", "1", "(", "-", "10", "5", ")", ")"] + assertEqual "" got expected + ] + +parseTests = TestLabel "parse" $ TestList $ map TestCase [ + do got <- expectSuccessL $ parse ["(", "+", "1", "2", ")"] + let expected = [ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2]] + assertEqual "" got expected, + do got <- expectErrorL $ parse ["(", "+", "1", "2"] + let expected = "unbalanced function call" + assertEqual "" got expected + ] + +evaluateTests = TestLabel "evaluate" $ TestList $ map TestCase [ + do let env = M.fromList [("+", builtinAdd2)] :: Env + (gotEnv, gotAST) <- expectSuccessL $ evaluate env (ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2]) + let expectedAST = ASTInteger 3 + assertEqual "" gotAST expectedAST + assertEqual "" (M.keys gotEnv) (M.keys env) + ] 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) + tokenizeTests, + parseTests, + evaluateTests ] main :: IO () |
