From c03b2a547302bd0ef81659241a1ffab4cf4e37a3 Mon Sep 17 00:00:00 2001 From: crumbtoo Date: Wed, 13 Dec 2023 11:35:09 -0700 Subject: [PATCH] arith fixes --- tst/Arith.hs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tst/Arith.hs b/tst/Arith.hs index da55be1..b6c3a2f 100644 --- a/tst/Arith.hs +++ b/tst/Arith.hs @@ -35,7 +35,7 @@ instance Arbitrary ArithExpr where gen :: Int -> Gen ArithExpr gen n | n > 0 = oneof - -- i don't feel like dealing with zero at the moment + -- i don't feel like dealing with division at the moment [ IntA <$> int , NegateA <$> arbitrary -- , IdA <$> arbitrary @@ -47,7 +47,8 @@ instance Arbitrary ArithExpr where where b f = liftA2 f s s s = gen (n `div` 2) - int = chooseInt (minBound,maxBound) + -- int = chooseInt (minBound,maxBound) + int = chooseInt (-500,500) prop_ArithExprEqCoreExpr :: ArithExpr -> Bool prop_ArithExprEqCoreExpr e = arithResult `eq1` coreResult @@ -55,23 +56,23 @@ prop_ArithExprEqCoreExpr e = arithResult `eq1` coreResult arithResult = Just (evalA e) coreResult = evalCore (toCore e) -toCore :: ArithExpr -> Program +toCore :: ArithExpr -> Program' toCore expr = Program [ ScDef "id" ["x"] $ Var "x" , ScDef "main" [] $ go expr ] where - go :: ArithExpr -> Expr - go (IntA n) = IntE n + go :: ArithExpr -> Expr' + go (IntA n) = LitE (IntL n) go (NegateA e) = "negate#" :$ go e go (IdA e) = "id" :$ go e - go (a :+ b) = f "+#" a b - go (a :- b) = f "-#" a b - go (a :* b) = f "*#" a b + go (a :+ b) = f "+#" a b + go (a :- b) = f "-#" a b + go (a :* b) = f "*#" a b f n a b = n :$ go a :$ go b -evalCore :: Program -> Maybe Int +evalCore :: Program' -> Maybe Int evalCore p = do a <- fst <$> evalProg p case a of