{-# LANGUAGE DataKinds #-} {-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE TypeApplications #-} module Test.Cardano.Ledger.Conformance.Imp.Conway (spec) where import Cardano.Ledger.BaseTypes import Cardano.Ledger.Conway (ConwayEra) import Test.Cardano.Ledger.Conformance.Imp.Conway.Ratify qualified as RatifySpec import Test.Cardano.Ledger.Conformance.Imp.Core import Test.Cardano.Ledger.Conway.Imp.BbodySpec qualified as Bbody import Test.Cardano.Ledger.Conway.Imp.CertsSpec qualified as Certs import Test.Cardano.Ledger.Conway.Imp.DelegSpec qualified as Deleg import Test.Cardano.Ledger.Conway.Imp.EnactSpec qualified as Enact import Test.Cardano.Ledger.Conway.Imp.EpochSpec qualified as Epoch import Test.Cardano.Ledger.Conway.Imp.GovCertSpec qualified as GovCert import Test.Cardano.Ledger.Conway.Imp.GovSpec qualified as Gov import Test.Cardano.Ledger.Conway.Imp.LedgerSpec qualified as Ledger import Test.Cardano.Ledger.Conway.Imp.RatifySpec qualified as Ratify import Test.Cardano.Ledger.Conway.Imp.UtxoSpec qualified as Utxo import Test.Cardano.Ledger.Conway.Imp.UtxosSpec qualified as Utxos import Test.Cardano.Ledger.Conway.ImpTest import Test.Cardano.Ledger.Imp.Common hiding (Args) import UnliftIO (evaluateDeep) 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 ConwayEra) (SpecWith (ImpInit (LedgerSpec ConwayEra)) -> Spec) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> Spec forall a b. (a -> b) -> a -> b $ forall era. (ShelleyEraImp era, ShelleyEraImp era) => Version -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) modifyImpInitProtVer @ConwayEra (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @10) (SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra))) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a b. (a -> b) -> a -> b $ (forall t. Globals -> TRC (EraRule "LEDGER" ConwayEra) -> Either (NonEmpty (PredicateFailure (EraRule "LEDGER" ConwayEra))) (State (EraRule "LEDGER" ConwayEra), [Event (EraRule "LEDGER" ConwayEra)]) -> ImpM t ()) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) 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" ConwayEra) -> Either (NonEmpty (PredicateFailure (EraRule "LEDGER" ConwayEra))) (State (EraRule "LEDGER" ConwayEra), [Event (EraRule "LEDGER" ConwayEra)]) -> ImpM t () forall t. Globals -> TRC (EraRule "LEDGER" ConwayEra) -> Either (NonEmpty (PredicateFailure (EraRule "LEDGER" ConwayEra))) (State (EraRule "LEDGER" ConwayEra), [Event (EraRule "LEDGER" ConwayEra)]) -> ImpM t () forall era t. (ConwayEraImp era, ExecSpecRule "LEDGER" era, ExecContext "LEDGER" era ~ ConwayLedgerExecContext era, SpecTranslate (ExecContext "LEDGER" era) (TxWits era), HasCallStack, SpecRep (TxWits era) ~ TxWitnesses, SpecRep (TxBody TopTx era) ~ TxBody, SpecTranslate TxId (TxBody TopTx era), SpecTranslate (ConwayLedgerExecContext era) (Tx TopTx era), ToExpr (SpecRep (Tx TopTx era)), SpecNormalize (SpecState "LEDGER" era), Eq (SpecState "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 ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra))) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a b. (a -> b) -> a -> b $ do (forall t. Globals -> TRC (EraRule "NEWEPOCH" ConwayEra) -> State (EraRule "NEWEPOCH" ConwayEra) -> ImpM t ()) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) 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" ConwayEra) -> State (EraRule "NEWEPOCH" ConwayEra) -> ImpM t () forall t. Globals -> TRC (EraRule "NEWEPOCH" ConwayEra) -> State (EraRule "NEWEPOCH" ConwayEra) -> ImpM t () forall era t. (ShelleyEraImp era, ExecSpecRule "NEWEPOCH" era, ExecContext "NEWEPOCH" era ~ (), ToExpr (Event (EraRule "NEWEPOCH" era))) => Globals -> TRC (EraRule "NEWEPOCH" era) -> State (EraRule "NEWEPOCH" era) -> ImpM t () epochBoundaryConformanceHook (SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra))) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a b. (a -> b) -> a -> b $ do String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "Basic" (SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra))) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a b. (a -> b) -> a -> b $ do String -> ImpM (LedgerSpec ConwayEra) () -> SpecWith (Arg (ImpM (LedgerSpec ConwayEra) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Submit constitution" (ImpM (LedgerSpec ConwayEra) () -> SpecWith (Arg (ImpM (LedgerSpec ConwayEra) ()))) -> ImpM (LedgerSpec ConwayEra) () -> SpecWith (Arg (ImpM (LedgerSpec ConwayEra) ())) forall a b. (a -> b) -> a -> b $ do _ <- forall era. ConwayEraImp era => StrictMaybe (GovPurposeId 'ConstitutionPurpose) -> ImpTestM era GovActionId submitConstitution @ConwayEra StrictMaybe (GovPurposeId 'ConstitutionPurpose) forall a. StrictMaybe a SNothing passNEpochs 2 String -> ImpM (LedgerSpec ConwayEra) () -> SpecWith (Arg (ImpM (LedgerSpec ConwayEra) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Can elect a basic committee" (ImpM (LedgerSpec ConwayEra) () -> SpecWith (Arg (ImpM (LedgerSpec ConwayEra) ()))) -> ImpM (LedgerSpec ConwayEra) () -> SpecWith (Arg (ImpM (LedgerSpec ConwayEra) ())) forall a b. (a -> b) -> a -> b $ do ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) -> ImpM (LedgerSpec ConwayEra) () forall (f :: * -> *) a. Functor f => f a -> f () void (ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) -> ImpM (LedgerSpec ConwayEra) ()) -> ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) -> ImpM (LedgerSpec ConwayEra) () forall a b. (a -> b) -> a -> b $ (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) -> ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) forall (m :: * -> *) a. (MonadIO m, NFData a) => a -> m a evaluateDeep ((Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) -> ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose)) -> ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) -> ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< ImpM (LedgerSpec ConwayEra) (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) forall era. (HasCallStack, ConwayEraImp era) => ImpTestM era (Credential DRepRole, Credential HotCommitteeRole, GovPurposeId 'CommitteePurpose) electBasicCommittee String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "BBODY" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) Bbody.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "CERTS" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) Certs.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "DELEG" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) Deleg.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "ENACT" SpecWith (ImpInit (LedgerSpec ConwayEra)) 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)) Enact.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "EPOCH" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. (ConwayEraImp era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era) => SpecWith (ImpInit (LedgerSpec era)) Epoch.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "GOV" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) Gov.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "GOVCERT" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) GovCert.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "LEDGER" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) Ledger.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "RATIFY" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. (HasCallStack, ConwayEraImp era) => SpecWith (ImpInit (LedgerSpec era)) Ratify.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "UTXO" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) Utxo.spec String -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a xdescribe String "UTXOS" SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) Utxos.spec String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "Imp (only spec)" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do RatifySpec.spec