{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Main where

import Cardano.Ledger.Mary (MaryEra)
import qualified Test.Cardano.Ledger.Allegra.Binary.Golden as Golden
import Test.Cardano.Ledger.Core.JSON (roundTripJsonEraSpec)
import Test.Cardano.Ledger.Era
import qualified Test.Cardano.Ledger.Mary.Binary.CddlSpec as CddlSpec
import qualified Test.Cardano.Ledger.Mary.BinarySpec as BinarySpec
import qualified Test.Cardano.Ledger.Mary.Imp as Imp
import Test.Cardano.Ledger.Mary.ImpTest ()
import qualified Test.Cardano.Ledger.Mary.ValueSpec as ValueSpec
import Test.Cardano.Ledger.Shelley.JSON (roundTripJsonShelleyEraSpec)

instance EraSpec MaryEra where
  eraImpSpec :: Proxy MaryEra -> Spec
eraImpSpec Proxy MaryEra
era = do
    Proxy MaryEra -> Spec
forall era (proxy :: * -> *).
(ShelleyEraImp era, ShelleyEraAccounts era) =>
proxy era -> Spec
Imp.shelleyToBabbageSpec Proxy MaryEra
era
    Proxy MaryEra -> Spec
forall era (proxy :: * -> *).
(MaryEraImp era, Event (EraRule "RUPD" era) ~ RupdEvent) =>
proxy era -> Spec
Imp.spec Proxy MaryEra
era

main :: IO ()
IO ()
main =
  forall era. EraSpec era => Spec -> IO ()
ledgerEraTestMain @MaryEra (Spec -> IO ()) -> Spec -> IO ()
forall a b. (a -> b) -> a -> b
$ do
    Spec
ValueSpec.spec
    Spec
BinarySpec.spec
    Spec
CddlSpec.spec
    forall era. (HasCallStack, EraTest era) => Spec
roundTripJsonEraSpec @MaryEra
    forall era. ShelleyEraTest era => Spec
roundTripJsonShelleyEraSpec @MaryEra
    forall era. (AllegraEraTest era, ShelleyEraTxCert era) => Spec
Golden.spec @MaryEra