{-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeApplications #-} module Main where import Cardano.Ledger.BaseTypes (natVersion) import Cardano.Protocol.Crypto (StandardCrypto) import qualified Cardano.Protocol.Leios.BlockHeader as Leios import qualified Cardano.Protocol.Praos.BlockHeader as Praos import qualified Cardano.Protocol.TPraos.BlockHeader as TPraos import Test.Cardano.Ledger.Binary (decoderEquivalenceSpec) import Test.Cardano.Ledger.Binary.RoundTrip (roundTripCborSpec) import Test.Cardano.Ledger.Common import Test.Cardano.Protocol.Leios.BlockHeader.Arbitrary () import qualified Test.Cardano.Protocol.Leios.BlockHeaderSpec as LeiosBlockHeaderSpec import Test.Cardano.Protocol.Praos.BlockHeader.Arbitrary () import Test.Cardano.Protocol.TPraos.BlockHeader.Arbitrary () main :: IO () IO () main = Spec -> IO () ledgerTestMain (Spec -> IO ()) -> Spec -> IO () forall a b. (a -> b) -> a -> b $ do String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "RoundTrip" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall t. (Show t, Eq t, Arbitrary t, EncCBOR t, DecCBOR t) => Spec roundTripCborSpec @(TPraos.BHBody StandardCrypto) forall t. (Show t, Eq t, Arbitrary t, EncCBOR t, DecCBOR t) => Spec roundTripCborSpec @(TPraos.BHeader StandardCrypto) forall t. (Show t, Eq t, Arbitrary t, EncCBOR t, DecCBOR t) => Spec roundTripCborSpec @(Praos.HeaderBody StandardCrypto) forall t. (Show t, Eq t, Arbitrary t, EncCBOR t, DecCBOR t) => Spec roundTripCborSpec @(Praos.Header StandardCrypto) forall t. (Show t, Eq t, Arbitrary t, EncCBOR t, DecCBOR t) => Spec roundTripCborSpec @(Leios.HeaderBody StandardCrypto) forall t. (Show t, Eq t, Arbitrary t, EncCBOR t, DecCBOR t) => Spec roundTripCborSpec @(Leios.Header StandardCrypto) String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "DecCBOR instances equivalence" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall t. (Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Version -> Version -> Spec decoderEquivalenceSpec @(TPraos.BHeader StandardCrypto) (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @2) (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @6) forall t. (Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Version -> Version -> Spec decoderEquivalenceSpec @(Praos.Header StandardCrypto) (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @7) (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @11) forall t. (Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Version -> Version -> Spec decoderEquivalenceSpec @(Leios.Header StandardCrypto) (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @12) Version forall a. Bounded a => a maxBound Spec LeiosBlockHeaderSpec.spec