summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/test/Minilang/REPLSpec.hs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-11-05 12:02:23 +0100
committerArnaud Bailly <arnaud@pankzsoft.com>2025-11-05 12:02:23 +0100
commit99e2ce71faa82e7b99574895e0fe24183ba9f6c3 (patch)
tree10538bb91d187a3c1d281a87a3974a6036f2ad2f /lambda-calcul/haskell/test/Minilang/REPLSpec.hs
parent438e3f8c5dcdfeead15a6a9a1760f7c254fc54b2 (diff)
downloadlambda-nantes-99e2ce71faa82e7b99574895e0fe24183ba9f6c3.tar.gz
can parse whole programs and load them
Diffstat (limited to 'lambda-calcul/haskell/test/Minilang/REPLSpec.hs')
-rw-r--r--lambda-calcul/haskell/test/Minilang/REPLSpec.hs17
1 files changed, 17 insertions, 0 deletions
diff --git a/lambda-calcul/haskell/test/Minilang/REPLSpec.hs b/lambda-calcul/haskell/test/Minilang/REPLSpec.hs
index 861c24c..aa73b69 100644
--- a/lambda-calcul/haskell/test/Minilang/REPLSpec.hs
+++ b/lambda-calcul/haskell/test/Minilang/REPLSpec.hs
@@ -1,8 +1,15 @@
module Minilang.REPLSpec where
import Control.Exception (bracket)
+import Data.Either (isRight)
import Data.Text.IO
+import Minilang.Lambda.Eval (Term (Lam, Var))
+import Minilang.Lambda.Parser (AST (..))
+import Minilang.Lambda.Unify (Type (TyVar))
import Minilang.REPL
+import Minilang.REPL.Purer (PurerEnv (..))
+import Minilang.REPL.Run (loadProgramInEnv)
+import Minilang.REPL.Types (Out (Evaluated))
import System.Directory (getTemporaryDirectory, removeFile)
import System.FilePath ((<.>), (</>))
import System.IO (IOMode (..), hClose, withFile)
@@ -83,6 +90,16 @@ spec = parallel $
"REPLError \"cannot load file foo in Pure interpreter\""
]
+ -- it "can load 'bool-prog.lisp'" $ do
+ -- boolProg <- readFile "bool-prog.lisp"
+ -- let PurerEnv{outputs} = runProgram (loadProgramInEnv boolProg)
+ -- outputs `shouldBe` []
+
+ it "can load 'bool.lisp'" $ do
+ boolProg <- readFile "bool.lisp"
+ let PurerEnv {outputs} = runProgram (loadProgramInEnv boolProg)
+ outputs `shouldBe` [Evaluated (Abs ["f", "t"] (Sym "f")) (Lam "f" (Lam "t" (Var "f"))) (TyVar "<?>")]
+
around withTempFile $
it "evaluates single MiniLang term read from IO" $ \fileName -> do
let outputFileName = fileName <> ".out"