{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TypeApplications #-}

module Test.Cardano.Ledger.Conformance.Imp.Dijkstra (spec) where

import Cardano.Ledger.BaseTypes
import Cardano.Ledger.Dijkstra (DijkstraEra)
import Cardano.Ledger.Dijkstra.Tx (Tx (..))
import Test.Cardano.Ledger.Conformance.ExecSpecRule.Dijkstra ()
import Test.Cardano.Ledger.Conformance.Imp.Core
import Test.Cardano.Ledger.Conway.Imp.BbodySpec qualified as ConwayBBODY
import Test.Cardano.Ledger.Conway.Imp.CertsSpec qualified as ConwayCERTS
import Test.Cardano.Ledger.Conway.Imp.DelegSpec qualified as ConwayDELEG
import Test.Cardano.Ledger.Conway.Imp.EnactSpec qualified as ConwayENACT
import Test.Cardano.Ledger.Conway.Imp.EpochSpec qualified as ConwayEPOCH
import Test.Cardano.Ledger.Conway.Imp.GovCertSpec qualified as ConwayGOVCERT
import Test.Cardano.Ledger.Conway.Imp.GovSpec qualified as ConwayGOV
import Test.Cardano.Ledger.Conway.Imp.LedgerSpec qualified as ConwayLEDGER
import Test.Cardano.Ledger.Conway.Imp.RatifySpec qualified as ConwayRATIFY
import Test.Cardano.Ledger.Conway.Imp.UtxoSpec qualified as ConwayUTXO
import Test.Cardano.Ledger.Conway.Imp.UtxosSpec qualified as ConwayUTXOS
import Test.Cardano.Ledger.Conway.Imp.UtxowSpec qualified as ConwayUTXOW
import Test.Cardano.Ledger.Dijkstra.Imp.CertSpec qualified as CERT
import Test.Cardano.Ledger.Dijkstra.Imp.EntitiesSpec qualified as ENTITIES
import Test.Cardano.Ledger.Dijkstra.Imp.LedgerSpec qualified as LEDGER
import Test.Cardano.Ledger.Dijkstra.Imp.UtxoSpec qualified as UTXO
import Test.Cardano.Ledger.Dijkstra.Imp.UtxowSpec qualified as UTXOW
import Test.Cardano.Ledger.Dijkstra.ImpTest
import Test.Cardano.Ledger.Imp.Common hiding (Args)

spec :: Spec
spec :: Spec
spec = do
  String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"Imp" (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$ do
    forall t. ImpSpec t => SpecWith (ImpInit t) -> Spec
withImpInit @(LedgerSpec DijkstraEra) (SpecWith (ImpInit (LedgerSpec DijkstraEra)) -> Spec)
-> SpecWith (ImpInit (LedgerSpec DijkstraEra)) -> Spec
forall a b. (a -> b) -> a -> b
$
      forall era.
(ShelleyEraImp era, ShelleyEraImp era) =>
Version
-> SpecWith (ImpInit (LedgerSpec era))
-> SpecWith (ImpInit (LedgerSpec era))
modifyImpInitProtVer @DijkstraEra (forall (v :: Natural).
(KnownNat v, MinVersion <= v, v <= MaxVersion) =>
Version
natVersion @12) (SpecWith (ImpInit (LedgerSpec DijkstraEra))
 -> SpecWith (ImpInit (LedgerSpec DijkstraEra)))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall a b. (a -> b) -> a -> b
$
        (forall t.
 Globals
 -> TRC (EraRule "LEDGER" DijkstraEra)
 -> Either
      (NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra)))
      (State (EraRule "LEDGER" DijkstraEra),
       [Event (EraRule "LEDGER" DijkstraEra)])
 -> ImpM t ())
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
(forall t.
 Globals
 -> TRC (EraRule "LEDGER" era)
 -> Either
      (NonEmpty (PredicateFailure (EraRule "LEDGER" era)))
      (State (EraRule "LEDGER" era), [Event (EraRule "LEDGER" era)])
 -> ImpM t ())
-> SpecWith (ImpInit (LedgerSpec era))
-> SpecWith (ImpInit (LedgerSpec era))
modifyImpInitPostSubmitTxHook Globals
-> TRC (EraRule "LEDGER" DijkstraEra)
-> Either
     (NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra)))
     (State (EraRule "LEDGER" DijkstraEra),
      [Event (EraRule "LEDGER" DijkstraEra)])
-> ImpM t ()
forall t.
Globals
-> TRC (EraRule "LEDGER" DijkstraEra)
-> Either
     (NonEmpty (PredicateFailure (EraRule "LEDGER" DijkstraEra)))
     (State (EraRule "LEDGER" DijkstraEra),
      [Event (EraRule "LEDGER" DijkstraEra)])
-> ImpM t ()
forall era t.
(HasCallStack, ExecSpecTopLevelRule "LEDGER" era) =>
Globals
-> TRC (EraRule "LEDGER" era)
-> Either
     (NonEmpty (PredicateFailure (EraRule "LEDGER" era)))
     (State (EraRule "LEDGER" era), [Event (EraRule "LEDGER" era)])
-> ImpM t ()
submitTxConformanceHook (SpecWith (ImpInit (LedgerSpec DijkstraEra))
 -> SpecWith (ImpInit (LedgerSpec DijkstraEra)))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall a b. (a -> b) -> a -> b
$ do
          (forall t.
 Globals
 -> TRC (EraRule "NEWEPOCH" DijkstraEra)
 -> State (EraRule "NEWEPOCH" DijkstraEra)
 -> ImpM t ())
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
(forall t.
 Globals
 -> TRC (EraRule "NEWEPOCH" era)
 -> State (EraRule "NEWEPOCH" era)
 -> ImpM t ())
-> SpecWith (ImpInit (LedgerSpec era))
-> SpecWith (ImpInit (LedgerSpec era))
modifyImpInitPostEpochBoundaryHook Globals
-> TRC (EraRule "NEWEPOCH" DijkstraEra)
-> State (EraRule "NEWEPOCH" DijkstraEra)
-> ImpM t ()
forall t.
Globals
-> TRC (EraRule "NEWEPOCH" DijkstraEra)
-> State (EraRule "NEWEPOCH" DijkstraEra)
-> ImpM t ()
forall era t.
(ExecSpecTopLevelRule "NEWEPOCH" era,
 ToExpr (Event (EraRule "NEWEPOCH" era))) =>
Globals
-> TRC (EraRule "NEWEPOCH" era)
-> State (EraRule "NEWEPOCH" era)
-> ImpM t ()
epochBoundaryConformanceHook (SpecWith (ImpInit (LedgerSpec DijkstraEra))
 -> SpecWith (ImpInit (LedgerSpec DijkstraEra)))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall a b. (a -> b) -> a -> b
$ do
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayBBODY.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
CERT.spec
            String
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
xdescribe String
"disabled" SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayCERTS.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
ENTITIES.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayDELEG.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
(ConwayEraImp era,
 Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era,
 Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era,
 Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era) =>
SpecWith (ImpInit (LedgerSpec era))
ConwayENACT.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
(ConwayEraImp era,
 Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era,
 Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era) =>
SpecWith (ImpInit (LedgerSpec era))
ConwayEPOCH.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayGOV.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayGOVCERT.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayLEDGER.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
LEDGER.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
(HasCallStack, ConwayEraImp era) =>
SpecWith (ImpInit (LedgerSpec era))
ConwayRATIFY.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayUTXO.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
UTXO.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayUTXOW.spec
            SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
UTXOW.spec
            String
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
-> SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
xdescribe String
"disabled" SpecWith (ImpInit (LedgerSpec DijkstraEra))
forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era))
ConwayUTXOS.spec