-- | 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 :: forall a. HasCallStack => Predicate a -> a -> Assertion
assertSatisfied = forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack forall a. HasCallStack => Predicate a -> a -> Assertion
acceptIO

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

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