{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

module Main where

import Cardano.Ledger.Allegra (AllegraEra)
import Cardano.Ledger.Alonzo (AlonzoEra)
import Cardano.Ledger.Mary (MaryEra)
import Cardano.Ledger.Shelley (ShelleyEra)
import Cardano.Protocol.Crypto (StandardCrypto)
import Cardano.Protocol.TPraos.BHeader (BHeader)
import Test.Cardano.Ledger.Allegra.Binary.Annotator ()
import Test.Cardano.Ledger.Alonzo.Binary.Annotator ()
import Test.Cardano.Ledger.Common
import Test.Cardano.Ledger.Mary.Binary.Annotator ()
import Test.Cardano.Ledger.Shelley.Binary.Annotator ()
import qualified Test.Cardano.Protocol.Binary.BinarySpec as Binary
import qualified Test.Cardano.Protocol.Binary.CddlSpec as Cddl
import Test.Cardano.Protocol.Binary.RoundTrip
import Test.Cardano.Protocol.TPraos.Arbitrary ()

main :: IO ()
IO ()
main =
  Spec -> IO ()
ledgerTestMain (Spec -> IO ()) -> Spec -> IO ()
forall a b. (a -> b) -> a -> b
$
    String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"TPraos" (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$ do
      Spec
Cddl.spec
      Spec
Binary.spec
      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 h era.
(Eq h, Show h, DecCBOR h, DecCBOR (Annotator h), EncCBOR h,
 EraSegWits era, Arbitrary (Block h era), DecCBOR (TxSeq era)) =>
Spec
roundTripBlockSpec @(BHeader StandardCrypto) @ShelleyEra
        forall h era.
(Eq h, Show h, DecCBOR h, DecCBOR (Annotator h), EncCBOR h,
 EraSegWits era, Arbitrary (Block h era), DecCBOR (TxSeq era)) =>
Spec
roundTripBlockSpec @(BHeader StandardCrypto) @AllegraEra
        forall h era.
(Eq h, Show h, DecCBOR h, DecCBOR (Annotator h), EncCBOR h,
 EraSegWits era, Arbitrary (Block h era), DecCBOR (TxSeq era)) =>
Spec
roundTripBlockSpec @(BHeader StandardCrypto) @MaryEra
        forall h era.
(Eq h, Show h, DecCBOR h, DecCBOR (Annotator h), EncCBOR h,
 EraSegWits era, Arbitrary (Block h era), DecCBOR (TxSeq era)) =>
Spec
roundTripBlockSpec @(BHeader StandardCrypto) @AlonzoEra