compactable-0.2.0.0: test/DichotomousSpec.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module DichotomousSpec where
import Control.Functor.Dichotomous (Dichotomous (..), LeftOnly,
LeftOrBoth, MaybeBoth,
MaybeEither, MaybeLeft,
MaybeLeftOrBoth, MaybeRight,
MaybeRightOrBoth, None, RightOnly,
RightOrBoth, These, TheseOrNot)
import Core ()
import Data.These (These)
import Test.QuickCheck (Arbitrary, Testable (property))
import Test.Syd (SpecWith, describe, it, parallel)
sweetIsomorphism
:: forall g
. ( Eq (g Int String)
, Show (g Int String)
, Arbitrary (g Int String)
, Dichotomous g
) => SpecWith ()
sweetIsomorphism = do
it "ymotohcid . dichotomy = Just" . property $ \(g :: g Int String) -> ymotohcid (dichotomy g) == Just g
spec :: SpecWith ()
spec = describe "Dichotomous" $ do
describe "(,)" $ sweetIsomorphism @(,)
describe "LeftOnly" $ sweetIsomorphism @LeftOnly
describe "LeftOrBoth" $ sweetIsomorphism @LeftOrBoth
describe "RightOnly" $ sweetIsomorphism @RightOnly
describe "RightOrBoth" $ sweetIsomorphism @RightOrBoth
describe "Either" $ sweetIsomorphism @Either
describe "These" $ sweetIsomorphism @These
describe "None" $ sweetIsomorphism @None
describe "MaybeBoth" $ sweetIsomorphism @MaybeBoth
describe "MaybeRight" $ sweetIsomorphism @MaybeRight
describe "MaybeRightOrBoth" $ sweetIsomorphism @MaybeRightOrBoth
describe "MaybeLeft" $ sweetIsomorphism @MaybeLeft
describe "MaybeLeftOrBoth" $ sweetIsomorphism @MaybeLeftOrBoth
describe "MaybeEither" $ sweetIsomorphism @MaybeEither
describe "TheseOrNot" $ sweetIsomorphism @TheseOrNot