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

module Main where

import Cardano.Ledger.Allegra (AllegraEra)
import qualified Test.Cardano.Ledger.Allegra.Binary.CddlSpec as CddlSpec
import qualified Test.Cardano.Ledger.Allegra.Binary.Golden as Golden
import qualified Test.Cardano.Ledger.Allegra.BinarySpec as BinarySpec
import qualified Test.Cardano.Ledger.Allegra.Imp as Imp
import Test.Cardano.Ledger.Allegra.ImpTest ()
import Test.Cardano.Ledger.Core.JSON (roundTripJsonEraSpec)
import Test.Cardano.Ledger.Era
import qualified Test.Cardano.Ledger.Shelley.Imp as Imp (shelleyEraSpecificSpec)
import Test.Cardano.Ledger.Shelley.JSON (roundTripJsonShelleyEraSpec)

instance EraSpec AllegraEra where
  eraImpSpec :: Proxy AllegraEra -> Spec
eraImpSpec Proxy AllegraEra
era = do
    Proxy AllegraEra -> Spec
forall era (proxy :: * -> *).
(ShelleyEraImp era, ShelleyEraAccounts era) =>
proxy era -> Spec
Imp.shelleyEraSpecificSpec Proxy AllegraEra
era
    Proxy AllegraEra -> Spec
forall era (proxy :: * -> *).
(ShelleyEraImp era, Event (EraRule "RUPD" era) ~ RupdEvent) =>
proxy era -> Spec
Imp.spec Proxy AllegraEra
era

main :: IO ()
IO ()
main =
  forall era. EraSpec era => Spec -> IO ()
ledgerEraTestMain @AllegraEra (Spec -> IO ()) -> Spec -> IO ()
forall a b. (a -> b) -> a -> b
$ do
    Spec
BinarySpec.spec
    Spec
CddlSpec.spec
    forall era. (HasCallStack, EraTest era) => Spec
roundTripJsonEraSpec @AllegraEra
    forall era. ShelleyEraTest era => Spec
roundTripJsonShelleyEraSpec @AllegraEra
    forall era. (AllegraEraTest era, ShelleyEraTxCert era) => Spec
Golden.spec @AllegraEra