module HaskellWorks.Hedgehog where import Hedgehog import Hedgehog.Internal.Property (MonadTest(..), failDiff, failWith) import Hedgehog.Internal.Source (HasCallStack(..), withFrozenCallStack) import Hedgehog.Internal.Show reversed :: Group -> Group reversed :: Group -> Group reversed (Group GroupName name [(PropertyName, Property)] properties) = GroupName -> [(PropertyName, Property)] -> Group Group GroupName name ([(PropertyName, Property)] -> [(PropertyName, Property)] forall a. [a] -> [a] reverse [(PropertyName, Property)] properties) (/==) :: (MonadTest m, Eq a, Show a, HasCallStack) => a -> a -> m () /== :: a -> a -> m () (/==) a x a y = do Bool ok <- (HasCallStack => m Bool) -> m Bool forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack ((HasCallStack => m Bool) -> m Bool) -> (HasCallStack => m Bool) -> m Bool forall a b. (a -> b) -> a -> b $ Bool -> m Bool forall (m :: * -> *) a. (MonadTest m, HasCallStack) => a -> m a eval (a x a -> a -> Bool forall a. Eq a => a -> a -> Bool /= a y) if Bool ok then m () forall (m :: * -> *). MonadTest m => m () success else (HasCallStack => m ()) -> m () forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m () forall a b. (a -> b) -> a -> b $ a -> a -> m () forall (m :: * -> *) a b. (MonadTest m, Show a, Show b, HasCallStack) => a -> b -> m () failDiff a x a y (?==) :: (MonadTest m, Eq a, Show a, HasCallStack) => a -> (a -> Bool) -> m () ?== :: a -> (a -> Bool) -> m () (?==) a x a -> Bool p = do a r <- (HasCallStack => m a) -> m a forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack ((HasCallStack => m a) -> m a) -> (HasCallStack => m a) -> m a forall a b. (a -> b) -> a -> b $ a -> m a forall (m :: * -> *) a. (MonadTest m, HasCallStack) => a -> m a eval a x if a -> Bool p a r then m () forall (m :: * -> *). MonadTest m => m () success else (HasCallStack => m ()) -> m () forall a. HasCallStack => (HasCallStack => a) -> a withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m () forall a b. (a -> b) -> a -> b $ Maybe Diff -> String -> m () forall (m :: * -> *) a. (MonadTest m, HasCallStack) => Maybe Diff -> String -> m a failWith Maybe Diff forall a. Maybe a Nothing (String -> m ()) -> String -> m () forall a b. (a -> b) -> a -> b $ [String] -> String unlines [ String "━━━ Invalid result ━━━" , a -> String forall a. Show a => a -> String showPretty a x ]