packages feed

yaya-unsafe-test-0.1.1.2: test/Test/Fold.hs

{-# 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)