Eval optimization! Tests for demos
This commit is contained in:
		
							
								
								
									
										60
									
								
								test/Spec.hs
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								test/Spec.hs
									
									
									
									
									
								
							| @ -25,16 +25,17 @@ runTricu s = show $ result (evalTricu Map.empty $ parseTricu s) | ||||
|  | ||||
| tests :: TestTree | ||||
| tests = testGroup "Tricu Tests" | ||||
|   [ lexerTests | ||||
|   , parserTests | ||||
|   , evaluationTests | ||||
|   , lambdaEvalTests | ||||
|   , libraryTests | ||||
|   , fileEvaluationTests | ||||
|   [ lexer | ||||
|   , parser | ||||
|   , simpleEvaluation | ||||
|   , lambdas | ||||
|   , baseLibrary | ||||
|   , fileEval | ||||
|   , demos | ||||
|   ] | ||||
|  | ||||
| lexerTests :: TestTree | ||||
| lexerTests = testGroup "Lexer Tests" | ||||
| lexer :: TestTree | ||||
| lexer = testGroup "Lexer Tests" | ||||
|   [ testCase "Lex simple identifiers" $ do | ||||
|       let input = "x a b = a" | ||||
|           expect = Right [LIdentifier "x", LIdentifier "a", LIdentifier "b", LAssign, LIdentifier "a"] | ||||
| @ -74,8 +75,8 @@ lexerTests = testGroup "Lexer Tests" | ||||
|           Right _ -> assertFailure "Expected failure when trying to assign the value of __result" | ||||
|   ] | ||||
|  | ||||
| parserTests :: TestTree | ||||
| parserTests = testGroup "Parser Tests" | ||||
| parser :: TestTree | ||||
| parser = testGroup "Parser Tests" | ||||
|   [ testCase "Error when assigning a value to T" $ do | ||||
|       let tokens = lexTricu "t = x"  | ||||
|       case parseSingleExpr tokens of | ||||
| @ -175,8 +176,8 @@ parserTests = testGroup "Parser Tests" | ||||
|       parseTricu input @?= expect | ||||
|   ] | ||||
|  | ||||
| evaluationTests :: TestTree | ||||
| evaluationTests = testGroup "Evaluation Tests" | ||||
| simpleEvaluation :: TestTree | ||||
| simpleEvaluation = testGroup "Evaluation Tests" | ||||
|   [ testCase "Evaluate single Leaf" $ do | ||||
|       let input = "t" | ||||
|       let ast = parseSingle input | ||||
| @ -244,7 +245,7 @@ evaluationTests = testGroup "Evaluation Tests" | ||||
|       (result env) @?= (Stem (Stem Leaf)) | ||||
|  | ||||
|  | ||||
|   , testCase "Evaluate variable shadowing" $ do | ||||
|   , testCase "Immutable definitions" $ do | ||||
|       let input = "x = t t\nx = t\nx" | ||||
|           env = evalTricu Map.empty (parseTricu input) | ||||
|       result <- try (evaluate (runTricu input)) :: IO (Either SomeException String) | ||||
| @ -260,8 +261,8 @@ evaluationTests = testGroup "Evaluation Tests" | ||||
|       result env @?= Fork (Fork (Stem Leaf) (Fork Leaf Leaf)) Leaf | ||||
|   ] | ||||
|  | ||||
| lambdaEvalTests :: TestTree | ||||
| lambdaEvalTests = testGroup "Lambda Evaluation Tests" | ||||
| lambdas :: TestTree | ||||
| lambdas = testGroup "Lambda Evaluation Tests" | ||||
|   [ testCase "Lambda Identity Function" $ do | ||||
|       let input = "id = (\\x : x)\nid t" | ||||
|       runTricu input @?= "Leaf" | ||||
| @ -340,8 +341,8 @@ lambdaEvalTests = testGroup "Lambda Evaluation Tests" | ||||
|         runTricu input @?= "Fork Leaf (Fork (Stem Leaf) Leaf)" | ||||
|   ] | ||||
|  | ||||
| libraryTests :: TestTree | ||||
| libraryTests = testGroup "Library Tests" | ||||
| baseLibrary :: TestTree | ||||
| baseLibrary = testGroup "Library Tests" | ||||
|   [ testCase "K combinator 1" $ do | ||||
|       library <- evaluateFile "./lib/base.tri" | ||||
|       let input = "k (t) (t t)" | ||||
| @ -476,8 +477,8 @@ libraryTests = testGroup "Library Tests" | ||||
|       result env @?= Stem Leaf | ||||
|   ] | ||||
|  | ||||
| fileEvaluationTests :: TestTree | ||||
| fileEvaluationTests = testGroup "Evaluation tests" | ||||
| fileEval :: TestTree | ||||
| fileEval = testGroup "File evaluation tests" | ||||
|   [ testCase "Forks" $ do | ||||
|       res <- liftIO $ evaluateFileResult "./test/fork.tri" | ||||
|       res @?= Fork Leaf Leaf | ||||
| @ -495,3 +496,24 @@ fileEvaluationTests = testGroup "Evaluation tests" | ||||
|       res <- liftIO $ evaluateFileWithContext library "./test/string.tri" | ||||
|       decodeResult (result res) @?= "\"String test!\"" | ||||
|   ] | ||||
|  | ||||
|  | ||||
| demos :: TestTree | ||||
| demos = testGroup "Test provided demo functionality" | ||||
|   [ testCase "Structural equality demo" $ do | ||||
|       library <- liftIO $ evaluateFile "./lib/base.tri" | ||||
|       res     <- liftIO $ evaluateFileWithContext library "./demos/equality.tri" | ||||
|       decodeResult (result res) @?= "t t" | ||||
|   , testCase "Convert values back to source code demo" $ do | ||||
|       library <- liftIO $ evaluateFile "./lib/base.tri" | ||||
|       res     <- liftIO $ evaluateFileWithContext library "./demos/toSource.tri" | ||||
|       decodeResult (result res) @?= "\"(t (t (t t) (t t t)) (t t (t t t)))\"" | ||||
|   , testCase "Determining the size of functions" $ do | ||||
|       library <- liftIO $ evaluateFile "./lib/base.tri" | ||||
|       res     <- liftIO $ evaluateFileWithContext library "./demos/size.tri" | ||||
|       decodeResult (result res) @?= "2071" | ||||
|   , testCase "Level Order Traversal demo" $ do | ||||
|       library <- liftIO $ evaluateFile "./lib/base.tri" | ||||
|       res     <- liftIO $ evaluateFileWithContext library "./demos/levelOrderTraversal.tri" | ||||
|       decodeResult (result res) @?= "\"\n1 \n2 3 \n4 5 6 7 \n8 11 10 9 12 \"" | ||||
|   ] | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 James Eversole
						James Eversole