{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Cardano.Ledger.Mary.Era (
  module Test.Cardano.Ledger.Allegra.Era,
  MaryEraTest,
) where

import Cardano.Ledger.Mary
import Cardano.Ledger.Mary.Core
import Cardano.Ledger.Plutus (emptyCostModels)
import Paths_cardano_ledger_mary (getDataFileName)
import Test.Cardano.Ledger.Allegra.Era
import Test.Cardano.Ledger.Mary.Arbitrary ()
import Test.Cardano.Ledger.Mary.Binary.Annotator ()
import Test.Cardano.Ledger.Mary.Examples (exampleMaryTx)
import Test.Cardano.Ledger.Mary.TreeDiff ()
import Test.Cardano.Ledger.Shelley.Examples (
  exampleShelleyPParams,
  exampleShelleyPParamsUpdate,
 )

class
  ( AllegraEraTest era
  , MaryEraTxBody era
  ) =>
  MaryEraTest era

instance EraTest MaryEra where
  type
    EraRulesWithFailures MaryEra =
      '[ "BBODY"
       , "DELEG"
       , "DELEGS"
       , "DELPL"
       , "LEDGER"
       , "LEDGERS"
       , "POOL"
       , "PPUP"
       , "UTXO"
       , "UTXOW"
       ]

  zeroCostModels :: CostModels
zeroCostModels = CostModels
emptyCostModels

  mkTestAccountState :: HasCallStack =>
Maybe Ptr
-> CompactForm Coin
-> Maybe (KeyHash StakePool)
-> Maybe DRep
-> AccountState MaryEra
mkTestAccountState = Maybe Ptr
-> CompactForm Coin
-> Maybe (KeyHash StakePool)
-> Maybe DRep
-> AccountState MaryEra
forall era.
(HasCallStack, ShelleyEraAccounts era) =>
Maybe Ptr
-> CompactForm Coin
-> Maybe (KeyHash StakePool)
-> Maybe DRep
-> AccountState era
mkShelleyTestAccountState

  accountsFromAccountsMap :: Map (Credential Staking) (AccountState MaryEra) -> Accounts MaryEra
accountsFromAccountsMap = Map (Credential Staking) (AccountState MaryEra) -> Accounts MaryEra
forall era.
(Accounts era ~ ShelleyAccounts era,
 AccountState era ~ ShelleyAccountState era,
 ShelleyEraAccounts era) =>
Map (Credential Staking) (AccountState era) -> Accounts era
shelleyAccountsFromAccountsMap

  mkEraFullPath :: FilePath -> IO FilePath
mkEraFullPath = FilePath -> IO FilePath
getDataFileName

  exampleTx :: Tx TopTx MaryEra
exampleTx = Tx TopTx MaryEra
exampleMaryTx

  examplePParams :: PParams MaryEra
examplePParams = PParams MaryEra
forall era.
(EraPParams era, AtMostEra "Mary" era, AtMostEra "Alonzo" era) =>
PParams era
exampleShelleyPParams

  examplePParamsUpdate :: PParamsUpdate MaryEra
examplePParamsUpdate = PParamsUpdate MaryEra
forall era.
(EraPParams era, AtMostEra "Mary" era, AtMostEra "Alonzo" era,
 AtMostEra "Babbage" era) =>
PParamsUpdate era
exampleShelleyPParamsUpdate

instance ShelleyEraTest MaryEra

instance AllegraEraTest MaryEra

instance MaryEraTest MaryEra