diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2022-12-09 18:55:21 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2022-12-09 18:55:21 +0200 |
| commit | 8ba98a86805c886719057f9df0d5a74c58c6dabd (patch) | |
| tree | 8bb5a0890f9a69c01ff219553750058b5da82476 /test | |
| parent | cff5a0dfa89ab3a7f95512382cedf88f8e1709d1 (diff) | |
Add do builtin
Diffstat (limited to 'test')
| -rw-r--r-- | test/Spec.hs | 33 | ||||
| -rw-r--r-- | test/TestUtils.hs | 2 | ||||
| -rw-r--r-- | test/scripts/do1.milch | 7 | ||||
| -rw-r--r-- | test/scripts/try1.milch | 8 |
4 files changed, 38 insertions, 12 deletions
diff --git a/test/Spec.hs b/test/Spec.hs index d4d5bf9..4839ace 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -62,16 +62,14 @@ e2eTests = testGroup "e2e" [ do let env = M.empty :: Env let script1 = "(record A foo)\n(let a (A/create 123))\n(A/get-foo a)" - (gotASTs, _) <- expectSuccessL env $ - runInlineScript "<test>" script1 + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 let expectedLastAST = ast $ ASTInteger 123 assertEqual "" expectedLastAST (last gotASTs), do let env = makeEnv [builtinSortByFirst] let script1 = "(sort-by-first [[2 1] [3 2] [1 3]])" - (gotASTs, _) <- expectSuccessL env $ - runInlineScript "<test>" script1 + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 let expectedLastAST = astVector $ [astVector [astInteger 1, astInteger 3], @@ -81,8 +79,7 @@ e2eTests = testGroup "e2e" [ do let env = makeEnv [builtinAdd2, builtinMultiply2] let script1 = "(let f (\\[x] (let y (+ x 1)) (let z (+ 3 y)) (* 2 z)))\n(f 1)" - (gotASTs, _) <- expectSuccessL env $ - runInlineScript "<test>" script1 + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 let expectedLastAST = astInteger 10 assertEqual "" expectedLastAST (last gotASTs), @@ -95,8 +92,7 @@ e2eTests = testGroup "e2e" [ \ _ (+ (fibo (- n 1)) (fibo (- n 2))))))\ \ \ \(fibo 50)" - (gotASTs, _) <- expectSuccessL env $ - runInlineScript "<test>" script1 + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 let expectedLastAST = astInteger 12586269025 assertEqual "" expectedLastAST (last gotASTs), @@ -105,18 +101,31 @@ e2eTests = testGroup "e2e" [ let script1 = "(let a :thing)\ \(let b :thing)\ \(eq? a b)" - (gotASTs, _) <- expectSuccessL env $ - runInlineScript "<test>" script1 + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 let expectedLastAST = astBoolean True assertEqual "" expectedLastAST (last gotASTs), do let env = builtinEnv script1 <- readFile "test/scripts/record1.milch" - (gotASTs, _) <- expectSuccessL env $ - runInlineScript "<test>" script1 + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 let expectedLastAST = astInteger 369 + assertEqual "" expectedLastAST (last gotASTs), + + do let env = builtinEnv + script1 <- readFile "test/scripts/do1.milch" + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 + + let expectedLastAST = astString "foo" + assertEqual "" expectedLastAST (last gotASTs), + + do let env = builtinEnv + script1 <- readFile "test/scripts/try1.milch" + (gotASTs, _) <- expectSuccessL env $ runInlineScript "<test>" script1 + + let expectedLastAST = astRecord "Result/Ex" $ + M.fromList [("value", astString "failed to read file: does-not-exist.txt")] assertEqual "" expectedLastAST (last gotASTs) ] diff --git a/test/TestUtils.hs b/test/TestUtils.hs index f023bb7..ff53310 100644 --- a/test/TestUtils.hs +++ b/test/TestUtils.hs @@ -61,6 +61,8 @@ astFunctionCall :: [AST] -> AST astFunctionCall a = ast $ ASTFunctionCall a astHashMap :: M.Map AST AST -> AST astHashMap a = ast $ ASTHashMap a +astRecord :: String -> LRecord -> AST +astRecord a hmap = ast $ ASTRecord (computeTagN a) a hmap astUnit :: AST astUnit = ast $ ASTUnit astHole :: AST diff --git a/test/scripts/do1.milch b/test/scripts/do1.milch new file mode 100644 index 0000000..d66c122 --- /dev/null +++ b/test/scripts/do1.milch @@ -0,0 +1,7 @@ +(let foo + (do (+ 1 2) + (- 10 2) + "foo")) + +foo +; => "foo" diff --git a/test/scripts/try1.milch b/test/scripts/try1.milch new file mode 100644 index 0000000..32abba2 --- /dev/null +++ b/test/scripts/try1.milch @@ -0,0 +1,8 @@ +(import "core/common") +(import "core/result") + +(let safe-read-file! (Result/safe! read-file!)) + +; calls read-file! and wraps the result in a Result/ok on success +; in case of error, calls Result/ex on the error string +(safe-read-file! "does-not-exist.txt") |
