{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# OPTIONS_GHC -Wno-orphans #-} module Test.Cardano.Ledger.Conway.Imp ( spec, Babbage.alonzoToConwaySpec, conwayOnlySpec, ) where import Cardano.Ledger.Conway (ConwayEra) import Cardano.Ledger.Conway.Core import Cardano.Ledger.Conway.Rules ( ConwayEpochEvent, ConwayHardForkEvent, ConwayNewEpochEvent, ) import qualified Cardano.Ledger.Shelley.Rules as Shelley import Control.State.Transition.Extended import Data.Proxy import qualified Test.Cardano.Ledger.Babbage.Imp as Babbage import qualified Test.Cardano.Ledger.Conway.Imp.BbodySpec as BBODY import qualified Test.Cardano.Ledger.Conway.Imp.CertsSpec as CERTS import qualified Test.Cardano.Ledger.Conway.Imp.DelegSpec as DELEG import qualified Test.Cardano.Ledger.Conway.Imp.EnactSpec as ENACT import qualified Test.Cardano.Ledger.Conway.Imp.EpochSpec as EPOCH import qualified Test.Cardano.Ledger.Conway.Imp.GovCertSpec as GOVCERT import qualified Test.Cardano.Ledger.Conway.Imp.GovSpec as GOV import qualified Test.Cardano.Ledger.Conway.Imp.HardForkSpec as HARDFORK import qualified Test.Cardano.Ledger.Conway.Imp.LedgerSpec as LEDGER import qualified Test.Cardano.Ledger.Conway.Imp.RatifySpec as RATIFY import qualified Test.Cardano.Ledger.Conway.Imp.SnapSpec as SNAP import qualified Test.Cardano.Ledger.Conway.Imp.UtxoSpec as UTXO import qualified Test.Cardano.Ledger.Conway.Imp.UtxosSpec as UTXOS import qualified Test.Cardano.Ledger.Conway.Imp.UtxowSpec as UTXOW import Test.Cardano.Ledger.Conway.ImpTest import Test.Cardano.Ledger.Imp.Common spec :: ( ConwayEraImp era , Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era , Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era , Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era , Event (EraRule "RUPD" era) ~ Shelley.RupdEvent ) => proxy era -> Spec spec :: forall era (proxy :: * -> *). (ConwayEraImp era, Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era, Event (EraRule "RUPD" era) ~ RupdEvent) => proxy era -> Spec spec proxy era era = do proxy era -> Spec forall era (proxy :: * -> *). (BabbageEraImp era, Event (EraRule "RUPD" era) ~ RupdEvent) => proxy era -> Spec Babbage.spec proxy era era String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "ConwayEra Onwards" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ proxy era -> SpecWith (ImpInit (LedgerSpec era)) -> Spec forall (proxy :: * -> *) era. ShelleyEraImp era => proxy era -> SpecWith (ImpInit (LedgerSpec era)) -> Spec withImpInitEachEraVersion proxy era era (SpecWith (ImpInit (LedgerSpec era)) -> Spec) -> SpecWith (ImpInit (LedgerSpec era)) -> Spec forall a b. (a -> b) -> a -> b $ do SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) BBODY.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) CERTS.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) DELEG.spec SpecWith (ImpInit (LedgerSpec era)) 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 SpecWith (ImpInit (LedgerSpec era)) forall era. (ConwayEraImp era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era) => SpecWith (ImpInit (LedgerSpec era)) EPOCH.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) GOV.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) GOVCERT.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) LEDGER.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) HARDFORK.spec SpecWith (ImpInit (LedgerSpec era)) forall era. (HasCallStack, ConwayEraImp era) => SpecWith (ImpInit (LedgerSpec era)) RATIFY.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) SNAP.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) UTXO.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) UTXOS.spec SpecWith (ImpInit (LedgerSpec era)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) UTXOW.spec conwayOnlySpec :: Spec conwayOnlySpec :: Spec conwayOnlySpec = do String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "ConwayEra Specific" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ Proxy ConwayEra -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> Spec forall (proxy :: * -> *) era. ShelleyEraImp era => proxy era -> SpecWith (ImpInit (LedgerSpec era)) -> Spec withImpInitEachEraVersion (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @ConwayEra) (SpecWith (ImpInit (LedgerSpec ConwayEra)) -> Spec) -> SpecWith (ImpInit (LedgerSpec ConwayEra)) -> Spec forall a b. (a -> b) -> a -> b $ do SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) CERTS.conwayOnlySpec SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. ConwayEraImp era => SpecWith (ImpInit (LedgerSpec era)) SNAP.conwayOnlySpec SpecWith (ImpInit (LedgerSpec ConwayEra)) forall era. (ConwayEraImp era, ShelleyEraTxCert era) => SpecWith (ImpInit (LedgerSpec era)) UTXO.conwayOnlySpec