{-# LANGUAGE TypeApplications #-}

module Main where

import Cardano.Ledger.Conway (ConwayEra)
import qualified Test.Cardano.Ledger.Alonzo.Binary.CostModelsSpec as CostModelsSpec
import qualified Test.Cardano.Ledger.Alonzo.Binary.TxWitsSpec as TxWitsSpec
import Test.Cardano.Ledger.Common
import qualified Test.Cardano.Ledger.Conway.Binary.CddlSpec as Cddl
import qualified Test.Cardano.Ledger.Conway.Binary.Regression as Regression
import qualified Test.Cardano.Ledger.Conway.BinarySpec as Binary
import qualified Test.Cardano.Ledger.Conway.CommitteeRatifySpec as CommitteeRatify
import qualified Test.Cardano.Ledger.Conway.DRepRatifySpec as DRepRatify
import qualified Test.Cardano.Ledger.Conway.GenesisSpec as Genesis
import qualified Test.Cardano.Ledger.Conway.GoldenTranslation as Golden
import qualified Test.Cardano.Ledger.Conway.GovActionReorderSpec as GovActionReorder
import qualified Test.Cardano.Ledger.Conway.Imp as Imp
import Test.Cardano.Ledger.Conway.Plutus.PlutusSpec as PlutusSpec
import qualified Test.Cardano.Ledger.Conway.Proposals as Proposals
import qualified Test.Cardano.Ledger.Conway.SPORatifySpec as SPORatifySpec
import qualified Test.Cardano.Ledger.Conway.Spec as Spec
import qualified Test.Cardano.Ledger.Conway.TxInfoSpec as TxInfo
import Test.Cardano.Ledger.Core.JSON (roundTripJsonEraSpec)

main :: IO ()
IO ()
main =
  Spec -> IO ()
ledgerTestMain forall a b. (a -> b) -> a -> b
$
    forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"Conway" forall a b. (a -> b) -> a -> b
$ do
      Spec
Golden.spec
      Spec
Spec.spec
      Spec
Proposals.spec
      Spec
Binary.spec
      Spec
Cddl.spec
      Spec
DRepRatify.spec
      Spec
CommitteeRatify.spec
      Spec
SPORatifySpec.spec
      Spec
Genesis.spec
      Spec
GovActionReorder.spec
      forall era.
(HasCallStack, EraPParams era, Arbitrary (PParams era)) =>
Spec
roundTripJsonEraSpec @ConwayEra
      forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"Imp" forall a b. (a -> b) -> a -> b
$
        forall era.
(Arbitrary (TxAuxData era), ConwayEraImp era, EraSegWits era,
 Inject (BabbageContextError era) (ContextError era),
 Inject (ConwayContextError era) (ContextError era),
 InjectRuleFailure "LEDGER" ConwayGovPredFailure era,
 InjectRuleFailure "LEDGER" ConwayCertsPredFailure era,
 InjectRuleFailure "LEDGER" BabbageUtxoPredFailure era,
 InjectRuleFailure "LEDGER" BabbageUtxowPredFailure era,
 InjectRuleFailure "LEDGER" AlonzoUtxoPredFailure era,
 InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era,
 InjectRuleFailure "LEDGER" AlonzoUtxowPredFailure era,
 InjectRuleFailure "LEDGER" ShelleyUtxoPredFailure era,
 InjectRuleFailure "LEDGER" ShelleyUtxowPredFailure era,
 InjectRuleFailure "LEDGER" ConwayDelegPredFailure era,
 InjectRuleFailure "LEDGER" ConwayGovCertPredFailure era,
 InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era,
 InjectRuleFailure "BBODY" ConwayBbodyPredFailure era,
 InjectRuleEvent "TICK" ConwayEpochEvent era,
 Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era,
 Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era,
 Event (EraRule "MEMPOOL" era) ~ ConwayMempoolEvent era,
 Event (EraRule "LEDGERS" era) ~ ShelleyLedgersEvent era,
 Event (EraRule "LEDGER" era) ~ ConwayLedgerEvent era,
 Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era,
 BaseM (EraRule "LEDGERS" era) ~ ShelleyBase,
 Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era,
 Signal (EraRule "LEDGERS" era) ~ Seq (Tx era),
 STS (EraRule "LEDGERS" era), ApplyTx era,
 NFData (Event (EraRule "ENACT" era)),
 ToExpr (Event (EraRule "ENACT" era)),
 Eq (Event (EraRule "ENACT" era)),
 Typeable (Event (EraRule "ENACT" era))) =>
Spec
Imp.spec @ConwayEra
      forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"CostModels" forall a b. (a -> b) -> a -> b
$ do
        forall era. (AlonzoEraPParams era, AlonzoEraScript era) => Spec
CostModelsSpec.spec @ConwayEra
      forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"TxWits" forall a b. (a -> b) -> a -> b
$ do
        forall era.
(AlonzoEraScript era, Script era ~ AlonzoScript era,
 NativeScript era ~ Timelock era) =>
Spec
TxWitsSpec.spec @ConwayEra
      forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"Plutus" forall a b. (a -> b) -> a -> b
$ do
        Spec
PlutusSpec.spec
      forall era. (EraTx era, NFData (Tx era)) => Spec
Regression.spec @ConwayEra
      Spec
TxInfo.spec