From 533f16ba81b8ff75c44c6be53d28381e920e0d13 Mon Sep 17 00:00:00 2001 From: Nikolaj Gade Date: Fri, 11 Oct 2024 15:17:55 +0200 Subject: [PATCH] :clown_face: parsePrinted --- a5/src/APL/AST.hs | 4 ++-- a5/src/APL/Tests.hs | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/a5/src/APL/AST.hs b/a5/src/APL/AST.hs index e64fa83..dcaa542 100644 --- a/a5/src/APL/AST.hs +++ b/a5/src/APL/AST.hs @@ -60,9 +60,9 @@ printExp (Let v e1 e2) = printExp (Lambda v body) = parens $ "\\" ++ v ++ " -> " ++ printExp body printExp (Apply x y) = - printExp x ++ " " ++ printExp y + printExp x ++ " (" ++ printExp y ++ ")" printExp (TryCatch x y) = - "try " ++ printExp x ++ " catch " ++ printExp y + parens $ "try " ++ printExp x ++ " catch " ++ printExp y subExp :: Exp -> [Exp] subExp e = e : case e of diff --git a/a5/src/APL/Tests.hs b/a5/src/APL/Tests.hs index beffa70..1066ec4 100644 --- a/a5/src/APL/Tests.hs +++ b/a5/src/APL/Tests.hs @@ -22,6 +22,7 @@ import Test.QuickCheck , listOf , suchThat , resize + , withMaxSuccess ) genString :: Gen String @@ -33,6 +34,8 @@ varTest s = (not (s `elem` keywords)) && ((length s) > 1) genVar :: Gen String genVar = suchThat (genString) (varTest) +genInt :: Gen Integer +genInt = suchThat arbitrary (\i -> i >= 0) instance Arbitrary Exp where arbitrary = sized (genExp []) @@ -62,10 +65,10 @@ instance Arbitrary Exp where shrink _ = [] genExp :: [VName] -> Int -> Gen Exp -genExp _ 0 = oneof [CstInt <$> arbitrary, CstBool <$> arbitrary] +genExp _ 0 = oneof [CstInt <$> genInt, CstBool <$> arbitrary] genExp vars size = frequency - [ (1, CstInt <$> arbitrary) + [ (1, CstInt <$> genInt) , (1, CstBool <$> arbitrary) , (1, Add <$> 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, Eql <$> genExp vars halfSize <*> genExp vars halfSize) , (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) , (25, do var <- genVar @@ -116,6 +119,6 @@ onlyCheckedErrors _ = undefined properties :: [(String, Property)] properties = [ ("expCoverage", property expCoverage) - , ("parsePrinted", property parsePrinted) + , ("parsePrinted", property (withMaxSuccess 10000 parsePrinted)) , ("onlyCheckedErrors", property onlyCheckedErrors) ]