From 281425310c5db21f87981eeb9601a71d1974d98d Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Thu, 10 Apr 2014 05:25:03 +1000 Subject: Rearranging files --- src/Unlambda/Test.hs | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/Unlambda/Test.hs (limited to 'src/Unlambda/Test.hs') diff --git a/src/Unlambda/Test.hs b/src/Unlambda/Test.hs new file mode 100644 index 0000000..f049b59 --- /dev/null +++ b/src/Unlambda/Test.hs @@ -0,0 +1,103 @@ +module Unlambda.Test ( + parserTests, + interpreterTests, + tests, + ioTests + ) where + + +import Test.HUnit +import Text.Parsec.Error +import Control.Monad +import System.IO.Silently +import Unlambda.Types +import Unlambda.Parser +import Unlambda.Interpreter + + +instance Eq Text.Parsec.Error.ParseError + + + + +parser0 = (Right S) ~=? (parseUnlambda "s") + +parser1 = (Right K) ~=? (parseUnlambda "k") + +parser2 = (Right I) ~=? (parseUnlambda "i") + +parser3 = (Right V) ~=? (parseUnlambda "v") + +parser4 = (Right R) ~=? (parseUnlambda "r") + +parser5 = (Right D) ~=? (parseUnlambda "d") + +parser6 = (Right C) ~=? (parseUnlambda "c") + +parser7 = (Right E) ~=? (parseUnlambda "e") + +parser8 = (Right (App S K)) ~=? (parseUnlambda "`sk") + +parser9 = (Right (Dot 'c')) ~=? (parseUnlambda ".c") + +parser10 = (Right (Compare '?')) ~=? (parseUnlambda "??") + +parser11 = (Right Bar) ~=? (parseUnlambda "|") + +parser12 = (Right Reed) ~=? (parseUnlambda "@") + + + +interpretString :: String -> IO (Maybe (String,UnlambdaTerm)) +interpretString input = + let t = parseUnlambda input + in case t of + Left _ -> return Nothing + Right term -> do + c <- capture (unlambda term) + return (Just c) + + + +interpreter0 = (liftM2 (~=?)) + (return (Just ("\n", R)) ) + (interpretString "``cir") + +interpreter1 = (liftM2 (~=?)) + (return (Just ("", I)) ) + (interpretString "`c``s`kr``si`ki") + +interpreter2 = (liftM2 (~=?)) + (return (Just ("", Promise (App R I))) ) + (interpretString "`d`ri") + +interpreter3 = (liftM2 (~=?)) + (return (Just ("\n", Promise I)) ) + (interpretString "``dd`ri") + + + +parserTests :: Test +parserTests = TestList [parser0, parser1, parser2, parser3, parser4, parser5, parser6, parser7, parser8 + ,parser9, parser10, parser11, parser12] + + + +interpreterTests :: IO Test +interpreterTests = do + t0 <- interpreter0 + t1 <- interpreter1 + t2 <- interpreter2 + t3 <- interpreter3 + return (TestList [t0,t1,t2,t3]) + + + +tests :: Test +tests = parserTests + + + +ioTests :: IO Test +ioTests = interpreterTests + -- cgit