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

module Main where

import Cardano.Ledger.Babbage (BabbageEra)
import qualified Test.Cardano.Ledger.Alonzo.Binary.CostModelsSpec as CostModelsSpec
import qualified Test.Cardano.Ledger.Alonzo.Binary.TxWitsSpec as TxWitsSpec
import qualified Test.Cardano.Ledger.Alonzo.Imp as Alonzo
import qualified Test.Cardano.Ledger.Babbage.Binary.CddlSpec as CddlSpec
import qualified Test.Cardano.Ledger.Babbage.BinarySpec as BinarySpec
import qualified Test.Cardano.Ledger.Babbage.GoldenSpec as GoldenSpec
import qualified Test.Cardano.Ledger.Babbage.GoldenTranslation as GoldenTranslation
import qualified Test.Cardano.Ledger.Babbage.Imp as Imp
import Test.Cardano.Ledger.Babbage.ImpTest ()
import qualified Test.Cardano.Ledger.Babbage.TxInfoSpec as TxInfo
import Test.Cardano.Ledger.Common
import Test.Cardano.Ledger.Core.JSON (roundTripJsonEraSpec)
import Test.Cardano.Ledger.Era
import qualified Test.Cardano.Ledger.Shelley.Imp as Shelley
import Test.Cardano.Ledger.Shelley.JSON (roundTripJsonShelleyEraSpec)

instance EraSpec BabbageEra where
  eraImpSpec :: Proxy BabbageEra -> Spec
eraImpSpec Proxy BabbageEra
era = do
    Proxy BabbageEra -> Spec
forall era (proxy :: * -> *).
(ShelleyEraImp era, ShelleyEraAccounts era) =>
proxy era -> Spec
Shelley.shelleyEraSpecificSpec Proxy BabbageEra
era
    Proxy BabbageEra -> Spec
forall era (proxy :: * -> *).
(AlonzoEraImp era, ShelleyEraTxCert era) =>
proxy era -> Spec
Alonzo.alonzoEraSpecificSpec Proxy BabbageEra
era
    Proxy BabbageEra -> Spec
forall era (proxy :: * -> *).
(BabbageEraImp era, ShelleyEraAccounts era,
 Event (EraRule "NEWEPOCH" era) ~ ShelleyNewEpochEvent era) =>
proxy era -> Spec
Imp.babbageEraSpecificSpec Proxy BabbageEra
era
    Proxy BabbageEra -> Spec
forall era (proxy :: * -> *).
(BabbageEraImp era, Event (EraRule "RUPD" era) ~ RupdEvent) =>
proxy era -> Spec
Imp.spec Proxy BabbageEra
era

main :: IO ()
IO ()
main =
  forall era. EraSpec era => Spec -> IO ()
ledgerEraTestMain @BabbageEra (Spec -> IO ()) -> Spec -> IO ()
forall a b. (a -> b) -> a -> b
$ do
    forall era.
(EraTx era, BabbageEraTxBody era, Value era ~ MaryValue,
 Inject (BabbageContextError era) (ContextError era),
 EraPlutusTxInfo 'PlutusV1 era, EraPlutusTxInfo 'PlutusV2 era) =>
Spec
TxInfo.spec @BabbageEra
    Spec
GoldenTranslation.spec
    Spec
GoldenSpec.spec
    Spec
BinarySpec.spec
    Spec
CddlSpec.spec
    forall era. (HasCallStack, EraTest era) => Spec
roundTripJsonEraSpec @BabbageEra
    forall era. ShelleyEraTest era => Spec
roundTripJsonShelleyEraSpec @BabbageEra
    String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"CostModels" (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$ do
      forall era. (AlonzoEraPParams era, AlonzoEraScript era) => Spec
CostModelsSpec.spec @BabbageEra
    String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"TxWits" (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$ do
      forall era.
(EraPlutusContext era, Arbitrary (NativeScript era)) =>
Spec
TxWitsSpec.spec @BabbageEra