{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Cardano.Ledger.Dijkstra.Imp where

import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Dijkstra.Core
import qualified Cardano.Ledger.Shelley.Rules as Shelley
import Test.Cardano.Ledger.Common
import qualified Test.Cardano.Ledger.Conway.Imp as ConwayImp
import qualified Test.Cardano.Ledger.Dijkstra.Imp.CertSpec as CERT
import qualified Test.Cardano.Ledger.Dijkstra.Imp.CertsSpec as CERTS
import qualified Test.Cardano.Ledger.Dijkstra.Imp.LedgerSpec as LEDGER
import qualified Test.Cardano.Ledger.Dijkstra.Imp.UtxoSpec as UTXO
import qualified Test.Cardano.Ledger.Dijkstra.Imp.UtxowSpec as UTXOW
import Test.Cardano.Ledger.Dijkstra.ImpTest

spec ::
  ( DijkstraEraImp era
  , Shelley.Event (EraRule "EPOCH" era) ~ Conway.ConwayEpochEvent era
  , Shelley.Event (EraRule "NEWEPOCH" era) ~ Conway.ConwayNewEpochEvent era
  , Shelley.Event (EraRule "HARDFORK" era) ~ Conway.ConwayHardForkEvent era
  , Shelley.Event (EraRule "RUPD" era) ~ Shelley.RupdEvent
  ) =>
  proxy era ->
  Spec
spec :: forall era (proxy :: * -> *).
(DijkstraEraImp era,
 Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era,
 Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era,
 Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era,
 Event (EraRule "RUPD" era) ~ RupdEvent) =>
proxy era -> Spec
spec proxy era
era = do
  proxy era -> 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
ConwayImp.spec proxy era
era
  String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"DijkstraEra 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.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
LEDGER.spec
    SpecWith (ImpInit (LedgerSpec era))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
CERT.spec
    SpecWith (ImpInit (LedgerSpec era))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
CERTS.spec
    SpecWith (ImpInit (LedgerSpec era))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
UTXOW.spec
    SpecWith (ImpInit (LedgerSpec era))
forall era.
DijkstraEraImp era =>
SpecWith (ImpInit (LedgerSpec era))
UTXO.spec