parse/unparse test

This commit is contained in:
crumbtoo
2023-12-29 21:22:26 -07:00
parent 650a4cf22f
commit d3a25742f1
4 changed files with 45 additions and 7 deletions

39
tst/Core/ParseSpec.hs Normal file
View File

@@ -0,0 +1,39 @@
module Core.ParseSpec
( spec
)
where
----------------------------------------------------------------------------------
import CoreSyntax
import Core.Syntax
import Compiler.JustRun
import Compiler.RlpcError
import Control.Monad ((<=<))
import Data.Coerce
import Data.Text qualified as T
import Data.Functor.Classes (Eq1(..))
import Test.Hspec
import Test.QuickCheck
----------------------------------------------------------------------------------
spec :: Spec
spec = do
it "should be a right-inverse to the unparser\
\up to source code congruency" $
property $ \p -> (unparse <=< parse) p ~== Right p
-- TODO: abitrary ASTs
-- it "should be a right-inverse to the unparser\
-- \up to source code congruency" $
-- property $ \p -> (parse <=< unparse) p == Right p
(~==) :: (Eq1 f) => f ProgramSrc -> f ProgramSrc -> Bool
(~==) = liftEq congruentSrc
infix 4 ~==
parse :: ProgramSrc -> Either RlpcError Program'
parse (ProgramSrc s) = justParseSrc (T.unpack s)
unparse :: Program' -> Either RlpcError ProgramSrc
unparse = Right . unparseCoreProg