diff options
Diffstat (limited to 'lambda-calcul/haskell/test/Minilang/REPLSpec.hs')
| -rw-r--r-- | lambda-calcul/haskell/test/Minilang/REPLSpec.hs | 17 |
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" |
