module Gen.Hedgehog.Roundtrip.Bech32
  ( roundtrip_Bech32
  ) where

import           Bcc.Api
import           Bcc.Prelude
import           Hedgehog (Gen, Property)

import qualified Hedgehog as H

roundtrip_Bech32
  :: (SerialiseAsBech32 a, Eq a, Show a)
  => AsType a -> Gen a -> Property
roundtrip_Bech32 :: AsType a -> Gen a -> Property
roundtrip_Bech32 AsType a
typeProxy Gen a
gen =
  HasCallStack => PropertyT IO () -> Property
PropertyT IO () -> Property
H.property (PropertyT IO () -> Property) -> PropertyT IO () -> Property
forall a b. (a -> b) -> a -> b
$ do
    a
val <- Gen a -> PropertyT IO a
forall (m :: * -> *) a.
(Monad m, Show a, HasCallStack) =>
Gen a -> PropertyT m a
H.forAll Gen a
gen
    a
-> (a -> Text)
-> (Text -> Either Bech32DecodeError a)
-> PropertyT IO ()
forall (m :: * -> *) (f :: * -> *) b a.
(MonadTest m, Applicative f, Show b, Show (f a), Eq (f a),
 HasCallStack) =>
a -> (a -> b) -> (b -> f a) -> m ()
H.tripping a
val a -> Text
forall a. SerialiseAsBech32 a => a -> Text
serialiseToBech32 (AsType a -> Text -> Either Bech32DecodeError a
forall a.
SerialiseAsBech32 a =>
AsType a -> Text -> Either Bech32DecodeError a
deserialiseFromBech32 AsType a
typeProxy)