module Main.LawfulConversionsHspec where
import Control.Monad (forM_)
import Data.Proxy (Proxy (..))
import qualified LawfulConversions
import Test.Hspec
import Test.Hspec.QuickCheck
import Test.QuickCheck (Arbitrary)
import Test.QuickCheck.Instances ()
import TextBuilderLawfulConversions ()
import Prelude
isSome :: (LawfulConversions.IsSome a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec
isSome a b = describe "IsSome" do
forM_ (LawfulConversions.isSomeProperties a b) \(name, property) ->
prop name property
isMany :: (LawfulConversions.IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec
isMany a b = describe "IsMany" do
forM_ (LawfulConversions.isManyProperties a b) \(name, property) ->
prop name property
is :: (LawfulConversions.Is a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec
is a b = describe "Is" do
forM_ (LawfulConversions.isProperties a b) \(name, property) ->
prop name property
allUptoIs :: (LawfulConversions.Is a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec
allUptoIs a b = do
describe "Forward" do
isSome a b
isMany a b
is a b
describe "Backward" do
isSome b a
isMany b a
is b a
allUptoIsMany :: (LawfulConversions.IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec
allUptoIsMany a b = do
isSome a b
isMany a b