{-# LANGUAGE TemplateHaskell #-} module Test.Fold where import Data.Proxy import Hedgehog import qualified Hedgehog.Gen as Gen import Yaya.Fold import Yaya.Fold.Common import Yaya.Fold.Native import Yaya.Hedgehog.Expr import Yaya.Hedgehog.Fold import qualified Yaya.Unsafe.Fold.Instances () -- | NB: Only in yaya-unsafe instead of yaya because the `Eq (Fix f)` instance -- is needed. prop_fixAnaRefl :: Property prop_fixAnaRefl = property $ law_anaRefl =<< forAll (Gen.sized genFixExpr) prop_fixCataCancel :: Property prop_fixCataCancel = property $ law_cataCancel size =<< forAll (genExpr (Gen.sized genFixExpr)) prop_fixCataRefl :: Property prop_fixCataRefl = property $ law_cataRefl =<< forAll (Gen.sized genFixExpr) prop_fixCataCompose :: Property prop_fixCataCompose = property $ law_cataCompose (Proxy :: Proxy (Fix Expr)) size id =<< forAll (Gen.sized genFixExpr) -- | NB: Only in yaya-unsafe instead of yaya because the `Eq (Nu f)` instance is -- needed. prop_nuAnaRefl :: Property prop_nuAnaRefl = property $ law_anaRefl =<< forAll (Gen.sized genNuExpr) prop_nuCataCancel :: Property prop_nuCataCancel = property $ law_cataCancel size =<< forAll (genExpr (Gen.sized genNuExpr)) prop_nuCataRefl :: Property prop_nuCataRefl = property $ law_cataRefl =<< forAll (Gen.sized genNuExpr) prop_nuCataCompose :: Property prop_nuCataCompose = property $ law_cataCompose (Proxy :: Proxy (Nu Expr)) size id =<< forAll (Gen.sized genNuExpr) tests :: IO Bool tests = checkParallel $$(discover)