module Examples.Positive where import Base import Compilation.Base data PosTest = PosTest { _name :: String, _dir :: Path Abs Dir, _file :: Path Abs File, _expectedFile :: Path Abs File, _stdin :: Text } makeLenses ''PosTest srcRoot :: Path Abs Dir srcRoot = relToProject $(mkRelDir "examples/") expectedRoot :: Path Abs Dir expectedRoot = relToProject $(mkRelDir "tests/examplesExpected") toTestDescr :: PosTest -> TestDescr toTestDescr PosTest {..} = TestDescr { _testRoot = _dir, _testName = _name, _testAssertion = Steps $ compileAssertion _dir 3 (CompileOnly _stdin) _file _expectedFile } allTests :: TestTree allTests = testGroup "Compile and test examples" (map (mkTest . toTestDescr) tests) posTest :: String -> Path Rel Dir -> Path Rel File -> Path Rel File -> Text -> PosTest posTest _name rdir rfile routfile _stdin = let _dir = srcRoot rdir _file = _dir rfile _expectedFile = expectedRoot routfile in PosTest {..} tests :: [PosTest] tests = [ posTest "Fibonacci" $(mkRelDir "milestone/Fibonacci") $(mkRelFile "Fibonacci.juvix") $(mkRelFile "Fibonacci/expected.golden") "25\n", posTest "Hello World" $(mkRelDir "milestone/HelloWorld") $(mkRelFile "HelloWorld.juvix") $(mkRelFile "HelloWorld/expected.golden") "", posTest "Collatz calculator" $(mkRelDir "milestone/Collatz") $(mkRelFile "Collatz.juvix") $(mkRelFile "Collatz/expected.golden") "123\n", posTest "Pascal's triangle" $(mkRelDir "milestone/PascalsTriangle") $(mkRelFile "PascalsTriangle.juvix") $(mkRelFile "PascalsTriangle/expected.golden") "", posTest "Demo" $(mkRelDir "demo") $(mkRelFile "Demo.juvix") $(mkRelFile "Demo/expected.golden") "", posTest "TicTacToe" $(mkRelDir "milestone/TicTacToe") $(mkRelFile "CLI/TicTacToe.juvix") $(mkRelFile "TicTacToe/expected.golden") "aaa\n0\n10\n1\n2\n3\n3\n4\n5\n6\n7\n8\n9\n", posTest "Towers of Hanoi" $(mkRelDir "milestone/Hanoi") $(mkRelFile "Hanoi.juvix") $(mkRelFile "Hanoi/expected.golden") "" ]