|  |  |  | @ -30,7 +30,7 @@ tests = testGroup "Tricu Tests" | 
		
	
		
			
				|  |  |  |  |   , parser | 
		
	
		
			
				|  |  |  |  |   , simpleEvaluation | 
		
	
		
			
				|  |  |  |  |   , lambdas | 
		
	
		
			
				|  |  |  |  |   , baseLibrary | 
		
	
		
			
				|  |  |  |  |   , providedLibraries | 
		
	
		
			
				|  |  |  |  |   , fileEval | 
		
	
		
			
				|  |  |  |  |   , modules | 
		
	
		
			
				|  |  |  |  |   , demos | 
		
	
	
		
			
				
					
					|  |  |  | @ -343,137 +343,101 @@ lambdas = testGroup "Lambda Evaluation Tests" | 
		
	
		
			
				|  |  |  |  |         runTricu input @?= "Fork Leaf (Fork (Stem Leaf) Leaf)" | 
		
	
		
			
				|  |  |  |  |   ] | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | baseLibrary :: TestTree | 
		
	
		
			
				|  |  |  |  | baseLibrary = 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" | 
		
	
		
			
				|  |  |  |  | providedLibraries :: TestTree | 
		
	
		
			
				|  |  |  |  | providedLibraries = testGroup "Library Tests" | 
		
	
		
			
				|  |  |  |  |   [ testCase "Triage test Leaf" $ do | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       let input = "not? true" | 
		
	
		
			
				|  |  |  |  |           env = result $ evalTricu library (parseTricu input) | 
		
	
		
			
				|  |  |  |  |       env @?= Leaf | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   , testCase "Boolean NOT: false" $ do | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/base.tri" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       let input = "not? false" | 
		
	
		
			
				|  |  |  |  |           env = result $ evalTricu library (parseTricu input) | 
		
	
		
			
				|  |  |  |  |       env @?= Stem Leaf | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   , testCase "Boolean AND TF" $ do | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/base.tri" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       let input = "and? (t) (t)" | 
		
	
		
			
				|  |  |  |  |           env = evalTricu library (parseTricu input) | 
		
	
		
			
				|  |  |  |  |       result env @?= Leaf | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   , testCase "Boolean AND TT" $ do | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/base.tri" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       let input = "emptyList? []" | 
		
	
		
			
				|  |  |  |  |           env = evalTricu library (parseTricu input) | 
		
	
		
			
				|  |  |  |  |       result env @?= Stem Leaf | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   , testCase "Non-empty list check" $ do | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/base.tri" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.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" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       let input = "append \"Hello, \" \"world!\"" | 
		
	
		
			
				|  |  |  |  |           env = decodeResult $ result $ evalTricu library (parseTricu input) | 
		
	
		
			
				|  |  |  |  |       env @?= "\"Hello, world!\"" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   , testCase "Verifying Equality" $ do | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/base.tri" | 
		
	
		
			
				|  |  |  |  |       library <- evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       let input = "equal? (t t t) (t t t)" | 
		
	
		
			
				|  |  |  |  |           env = evalTricu library (parseTricu input) | 
		
	
		
			
				|  |  |  |  |       result env @?= Stem Leaf | 
		
	
	
		
			
				
					
					|  |  |  | @ -490,12 +454,12 @@ fileEval = testGroup "File evaluation tests" | 
		
	
		
			
				|  |  |  |  |       res @?= Fork (Stem Leaf) Leaf | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   , testCase "Mapping and Equality" $ do | 
		
	
		
			
				|  |  |  |  |       library <- liftIO $ evaluateFile "./lib/base.tri" | 
		
	
		
			
				|  |  |  |  |       library <- liftIO $ evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       fEnv    <- liftIO $ evaluateFileWithContext library "./test/map.tri" | 
		
	
		
			
				|  |  |  |  |       (mainResult fEnv) @?= Stem Leaf | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   , testCase "Eval and decoding string" $ do | 
		
	
		
			
				|  |  |  |  |       library <- liftIO $ evaluateFile "./lib/base.tri" | 
		
	
		
			
				|  |  |  |  |       library <- liftIO $ evaluateFile "./lib/list.tri" | 
		
	
		
			
				|  |  |  |  |       res <- liftIO $ evaluateFileWithContext library "./test/string.tri" | 
		
	
		
			
				|  |  |  |  |       decodeResult (result res) @?= "\"String test!\"" | 
		
	
		
			
				|  |  |  |  |   ] | 
		
	
	
		
			
				
					
					|  |  |  | 
 |