-- | HUnit and Hspec integration for 'Predicate'
module Test.Predicates.HUnit (assertSatisfied, (@?~), shouldSatisfy) where

import GHC.Stack (HasCallStack, withFrozenCallStack)
import Test.HUnit (Assertion)
import Test.Predicates (Predicate, acceptIO)

assertSatisfied :: HasCallStack => Predicate a -> a -> Assertion
assertSatisfied :: Predicate a -> a -> Assertion
assertSatisfied = (HasCallStack => Predicate a -> a -> Assertion)
-> Predicate a -> a -> Assertion
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => Predicate a -> a -> Assertion
forall a. HasCallStack => Predicate a -> a -> Assertion
acceptIO

(@?~) :: HasCallStack => a -> Predicate a -> Assertion
@?~ :: a -> Predicate a -> Assertion
(@?~) = (Predicate a -> a -> Assertion) -> a -> Predicate a -> Assertion
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((HasCallStack => Predicate a -> a -> Assertion)
-> Predicate a -> a -> Assertion
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => Predicate a -> a -> Assertion
forall a. HasCallStack => Predicate a -> a -> Assertion
acceptIO)

shouldSatisfy :: HasCallStack => a -> Predicate a -> Assertion
shouldSatisfy :: a -> Predicate a -> Assertion
shouldSatisfy = (Predicate a -> a -> Assertion) -> a -> Predicate a -> Assertion
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((HasCallStack => Predicate a -> a -> Assertion)
-> Predicate a -> a -> Assertion
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => Predicate a -> a -> Assertion
forall a. HasCallStack => Predicate a -> a -> Assertion
acceptIO)