Provide "library" via tricu file directly
Allows easier loading of other files and drops the list of Haskell strings containing the basic tools included
This commit is contained in:
		
							
								
								
									
										34
									
								
								test/Spec.hs
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								test/Spec.hs
									
									
									
									
									
								
							| @ -3,7 +3,6 @@ module Main where | ||||
| import Eval | ||||
| import FileEval | ||||
| import Lexer | ||||
| import Library | ||||
| import Parser | ||||
| import REPL | ||||
| import Research | ||||
| @ -288,90 +287,112 @@ lambdaEvalTests = testGroup "Lambda Evaluation Tests" | ||||
| libraryTests :: TestTree | ||||
| libraryTests = testGroup "Library Tests" | ||||
|   [ testCase "K combinator 1" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "k (t) (t t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Leaf | ||||
|   , testCase "K combinator 2" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "k (t t) (t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Stem Leaf | ||||
|   , testCase "K combinator 3" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "k (t t t) (t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Fork Leaf Leaf | ||||
|   , testCase "S combinator" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "s (t) (t) (t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Fork Leaf (Stem Leaf) | ||||
|   , testCase "SKK == I (fully expanded)" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "s k k" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Fork (Stem (Stem Leaf)) (Stem Leaf) | ||||
|   , testCase "I combinator" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "i not" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Fork (Fork (Stem Leaf) (Fork Leaf Leaf)) (Fork Leaf (Fork Leaf Leaf)) | ||||
|   , testCase "Triage test Leaf" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "test t" | ||||
|           env = decodeResult $ result $ evalTricu library (parseTricu input) | ||||
|       env @?= "Leaf" | ||||
|   , testCase "Triage test (Stem Leaf)" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "test (t t)" | ||||
|           env = decodeResult $ result $ evalTricu library (parseTricu input) | ||||
|       env @?= "Stem" | ||||
|   , testCase "Triage test (Fork Leaf Leaf)" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "test (t t t)" | ||||
|           env = decodeResult $ result $ evalTricu library (parseTricu input) | ||||
|       env @?= "Fork" | ||||
|   , testCase "Boolean NOT: true" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "not true" | ||||
|           env = result $ evalTricu library (parseTricu input) | ||||
|       env @?= Leaf | ||||
|   , testCase "Boolean NOT: false" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "not false" | ||||
|           env = result $ evalTricu library (parseTricu input) | ||||
|       env @?= Stem Leaf | ||||
|   , testCase "Boolean AND TF" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "and (t t) (t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Leaf | ||||
|   , testCase "Boolean AND FT" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "and (t) (t t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Leaf | ||||
|   , testCase "Boolean AND FF" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "and (t) (t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Leaf | ||||
|   , testCase "Boolean AND TT" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "and (t t) (t t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Stem Leaf | ||||
|   , testCase "List head" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "head [(t) (t t) (t t t)]" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Leaf | ||||
|   , testCase "List tail" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "head (tail (tail [(t) (t t) (t t t)]))" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Fork Leaf Leaf | ||||
|   , testCase "List map" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "head (tail (map (\\a : (t t t)) [(t) (t) (t)]))" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Fork Leaf Leaf | ||||
|   , testCase "Empty list check" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "emptyList []" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Stem Leaf | ||||
|   , testCase "Non-empty list check" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "not (emptyList [(1) (2) (3)])" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Stem Leaf | ||||
|   , testCase "Concatenate strings" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "lconcat \"Hello, \" \"world!\"" | ||||
|           env = decodeResult $ result $ evalTricu library (parseTricu input) | ||||
|       env @?= "Hello, world!" | ||||
|   , testCase "Verifying Equality" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "equal (t t t) (t t t)" | ||||
|           env = evalTricu library (parseTricu input) | ||||
|       result env @?= Stem Leaf | ||||
| @ -380,17 +401,18 @@ libraryTests = testGroup "Library Tests" | ||||
| fileEvaluationTests :: TestTree | ||||
| fileEvaluationTests = testGroup "Evaluation tests" | ||||
|   [ testCase "Forks" $ do | ||||
|       res <- liftIO $ evaluateFile "./test/fork.tri" | ||||
|       res <- liftIO $ evaluateFileResult "./test/fork.tri" | ||||
|       res @?= Fork Leaf Leaf | ||||
|   , testCase "File ends with comment" $ do | ||||
|       res <- liftIO $ evaluateFile "./test/comments-1.tri" | ||||
|       res <- liftIO $ evaluateFileResult "./test/comments-1.tri" | ||||
|       res @?= Fork (Stem Leaf) Leaf | ||||
|   , testCase "Mapping and Equality" $ do | ||||
|       res <- liftIO $ evaluateFile "./test/map.tri" | ||||
|       res <- liftIO $ evaluateFileResult "./test/map.tri" | ||||
|       res @?= Stem Leaf | ||||
|   , testCase "Eval and decoding string" $ do | ||||
|       res <- liftIO $ evaluateFile "./test/string.tri" | ||||
|       decodeResult res @?= "String test!" | ||||
|       library <- liftIO $ evaluateFile "./lib/base.tri" | ||||
|       res <- liftIO $ evaluateFileWithContext library "./test/string.tri" | ||||
|       decodeResult (result res) @?= "String test!" | ||||
|   ] | ||||
|  | ||||
| propertyTests :: TestTree | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 James Eversole
						James Eversole