{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}

module Test.Cardano.Ledger.Mary.Imp (spec, Allegra.shelleyToBabbageSpec) where

import Cardano.Ledger.Core
import qualified Cardano.Ledger.Shelley.Rules as Shelley
import qualified Test.Cardano.Ledger.Allegra.Imp as Allegra
import Test.Cardano.Ledger.Imp.Common
import qualified Test.Cardano.Ledger.Mary.Imp.UtxoSpec as UTXO
import Test.Cardano.Ledger.Mary.ImpTest

spec ::
  ( MaryEraImp era
  , Shelley.Event (EraRule "RUPD" era) ~ Shelley.RupdEvent
  ) =>
  proxy era ->
  Spec
spec :: forall era (proxy :: * -> *).
(MaryEraImp era, Event (EraRule "RUPD" era) ~ RupdEvent) =>
proxy era -> Spec
spec proxy era
era = do
  proxy era -> Spec
forall era (proxy :: * -> *).
(ShelleyEraImp era, Event (EraRule "RUPD" era) ~ RupdEvent) =>
proxy era -> Spec
Allegra.spec proxy era
era
  String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"MaryEra 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
      UTXO.spec