{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Test.Cardano.Ledger.Core.Binary.Annotator ( decoderEquivalenceEraSpec, decoderEquivalenceCoreEraTypesSpec, ) where import Cardano.Ledger.Binary import Cardano.Ledger.Block import Cardano.Ledger.Core import Cardano.Ledger.Plutus import Test.Cardano.Ledger.Binary (decoderEquivalenceSpec) import Test.Cardano.Ledger.Common import Test.Cardano.Ledger.Core.Arbitrary () instance ( EraSegWits era , DecCBOR h , DecCBOR (TxSeq era) ) => DecCBOR (Block h era) where decCBOR :: forall s. Decoder s (Block h era) decCBOR = Text -> (Block h era -> Int) -> Decoder s (Block h era) -> Decoder s (Block h era) forall a s. Text -> (a -> Int) -> Decoder s a -> Decoder s a decodeRecordNamed Text "Block" (Int -> Block h era -> Int forall a b. a -> b -> a const Int blockSize) (Decoder s (Block h era) -> Decoder s (Block h era)) -> Decoder s (Block h era) -> Decoder s (Block h era) forall a b. (a -> b) -> a -> b $ h -> TxSeq era -> Block h era forall h era. h -> TxSeq era -> Block h era Block (h -> TxSeq era -> Block h era) -> Decoder s h -> Decoder s (TxSeq era -> Block h era) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Decoder s h forall s. Decoder s h forall a s. DecCBOR a => Decoder s a decCBOR Decoder s (TxSeq era -> Block h era) -> Decoder s (TxSeq era) -> Decoder s (Block h era) forall a b. Decoder s (a -> b) -> Decoder s a -> Decoder s b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Decoder s (TxSeq era) forall s. Decoder s (TxSeq era) forall a s. DecCBOR a => Decoder s a decCBOR where blockSize :: Int blockSize = Int 1 Int -> Int -> Int forall a. Num a => a -> a -> a + Word64 -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral (forall era. EraSegWits era => Word64 numSegComponents @era) decoderEquivalenceEraSpec :: forall era t. ( Era era , Eq t , ToCBOR t , DecCBOR (Annotator t) , Arbitrary t , Show t ) => Spec decoderEquivalenceEraSpec :: forall era t. (Era era, Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Spec decoderEquivalenceEraSpec = forall t. (Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Version -> Version -> Spec decoderEquivalenceSpec @t (forall era. Era era => Version eraProtVerLow @era) (forall era. Era era => Version eraProtVerHigh @era) decoderEquivalenceCoreEraTypesSpec :: forall era. ( EraTx era , Arbitrary (Tx era) , Arbitrary (TxBody era) , Arbitrary (TxWits era) , Arbitrary (TxAuxData era) , Arbitrary (Script era) , HasCallStack ) => Spec decoderEquivalenceCoreEraTypesSpec :: forall era. (EraTx era, Arbitrary (Tx era), Arbitrary (TxBody era), Arbitrary (TxWits era), Arbitrary (TxAuxData era), Arbitrary (Script era), HasCallStack) => Spec decoderEquivalenceCoreEraTypesSpec = 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 era t. (Era era, Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Spec decoderEquivalenceEraSpec @era @(Data era) forall era t. (Era era, Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Spec decoderEquivalenceEraSpec @era @(Script era) forall era t. (Era era, Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Spec decoderEquivalenceEraSpec @era @(TxAuxData era) forall era t. (Era era, Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Spec decoderEquivalenceEraSpec @era @(TxWits era) forall era t. (Era era, Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Spec decoderEquivalenceEraSpec @era @(TxBody era) forall era t. (Era era, Eq t, ToCBOR t, DecCBOR (Annotator t), Arbitrary t, Show t) => Spec decoderEquivalenceEraSpec @era @(Tx era)