🤡 parsePrinted

This commit is contained in:
2024-10-11 15:17:55 +02:00
parent e994dbda38
commit 533f16ba81
2 changed files with 9 additions and 6 deletions

View File

@ -60,9 +60,9 @@ printExp (Let v e1 e2) =
printExp (Lambda v body) = printExp (Lambda v body) =
parens $ "\\" ++ v ++ " -> " ++ printExp body parens $ "\\" ++ v ++ " -> " ++ printExp body
printExp (Apply x y) = printExp (Apply x y) =
printExp x ++ " " ++ printExp y printExp x ++ " (" ++ printExp y ++ ")"
printExp (TryCatch x y) = printExp (TryCatch x y) =
"try " ++ printExp x ++ " catch " ++ printExp y parens $ "try " ++ printExp x ++ " catch " ++ printExp y
subExp :: Exp -> [Exp] subExp :: Exp -> [Exp]
subExp e = e : case e of subExp e = e : case e of

View File

@ -22,6 +22,7 @@ import Test.QuickCheck
, listOf , listOf
, suchThat , suchThat
, resize , resize
, withMaxSuccess
) )
genString :: Gen String genString :: Gen String
@ -33,6 +34,8 @@ varTest s = (not (s `elem` keywords)) && ((length s) > 1)
genVar :: Gen String genVar :: Gen String
genVar = suchThat (genString) (varTest) genVar = suchThat (genString) (varTest)
genInt :: Gen Integer
genInt = suchThat arbitrary (\i -> i >= 0)
instance Arbitrary Exp where instance Arbitrary Exp where
arbitrary = sized (genExp []) arbitrary = sized (genExp [])
@ -62,10 +65,10 @@ instance Arbitrary Exp where
shrink _ = [] shrink _ = []
genExp :: [VName] -> Int -> Gen Exp genExp :: [VName] -> Int -> Gen Exp
genExp _ 0 = oneof [CstInt <$> arbitrary, CstBool <$> arbitrary] genExp _ 0 = oneof [CstInt <$> genInt, CstBool <$> arbitrary]
genExp vars size = genExp vars size =
frequency frequency
[ (1, CstInt <$> arbitrary) [ (1, CstInt <$> genInt)
, (1, CstBool <$> arbitrary) , (1, CstBool <$> arbitrary)
, (1, Add <$> genExp vars halfSize <*> genExp vars halfSize) , (1, Add <$> genExp vars halfSize <*> genExp vars halfSize)
, (1, Sub <$> genExp vars halfSize <*> genExp vars halfSize) , (1, Sub <$> genExp vars halfSize <*> genExp vars halfSize)
@ -74,7 +77,7 @@ genExp vars size =
, (1, Pow <$> genExp vars halfSize <*> genExp vars halfSize) , (1, Pow <$> genExp vars halfSize <*> genExp vars halfSize)
, (1, Eql <$> genExp vars halfSize <*> genExp vars halfSize) , (1, Eql <$> genExp vars halfSize <*> genExp vars halfSize)
, (1, If <$> genExp vars thirdSize <*> genExp vars thirdSize <*> genExp vars thirdSize) , (1, If <$> genExp vars thirdSize <*> genExp vars thirdSize <*> genExp vars thirdSize)
, (1, Var <$> arbitrary) , (1, Var <$> genVar)
, (if (length vars) > 0 then 50 else 0, Var <$> elements vars) , (if (length vars) > 0 then 50 else 0, Var <$> elements vars)
, (25, do , (25, do
var <- genVar var <- genVar
@ -116,6 +119,6 @@ onlyCheckedErrors _ = undefined
properties :: [(String, Property)] properties :: [(String, Property)]
properties = properties =
[ ("expCoverage", property expCoverage) [ ("expCoverage", property expCoverage)
, ("parsePrinted", property parsePrinted) , ("parsePrinted", property (withMaxSuccess 10000 parsePrinted))
, ("onlyCheckedErrors", property onlyCheckedErrors) , ("onlyCheckedErrors", property onlyCheckedErrors)
] ]