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

module Test.Cardano.Ledger.Alonzo.Era (
  module Test.Cardano.Ledger.Mary.Era,
  AlonzoEraTest,
) where

import Cardano.Ledger.Alonzo
import Cardano.Ledger.Alonzo.Core
import Cardano.Ledger.Alonzo.Plutus.Context
import Cardano.Ledger.Alonzo.UTxO
import Cardano.Ledger.Plutus (Language (..))
import Data.TreeDiff
import Paths_cardano_ledger_alonzo (getDataFileName)
import Test.Cardano.Ledger.Alonzo.Arbitrary ()
import Test.Cardano.Ledger.Alonzo.Binary.Annotator ()
import Test.Cardano.Ledger.Alonzo.Examples (
  exampleAlonzoPParams,
  exampleAlonzoPParamsUpdate,
  exampleAlonzoTx,
 )
import Test.Cardano.Ledger.Alonzo.TreeDiff ()
import Test.Cardano.Ledger.Common (Arbitrary)
import Test.Cardano.Ledger.Mary.Era
import Test.Cardano.Ledger.Plutus (zeroTestingCostModels)

class
  ( MaryEraTest era
  , EraPlutusContext era
  , AlonzoEraTx era
  , AlonzoEraTxAuxData era
  , AlonzoEraUTxO era
  , ToExpr (PlutusScript era)
  , ToExpr (PlutusPurpose AsIx era)
  , ToExpr (PlutusPurpose AsIxItem era)
  , Script era ~ AlonzoScript era
  , EraPlutusTxInfo PlutusV1 era
  , Arbitrary (PlutusPurpose AsIx era)
  ) =>
  AlonzoEraTest era

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

  zeroCostModels :: CostModels
zeroCostModels = HasCallStack => [Language] -> CostModels
[Language] -> CostModels
zeroTestingCostModels [Language
PlutusV1]

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

  accountsFromAccountsMap :: Map (Credential Staking) (AccountState AlonzoEra)
-> Accounts AlonzoEra
accountsFromAccountsMap = Map (Credential Staking) (AccountState AlonzoEra)
-> Accounts AlonzoEra
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 AlonzoEra
exampleTx = Tx TopTx AlonzoEra
exampleAlonzoTx

  examplePParams :: PParams AlonzoEra
examplePParams = PParams AlonzoEra
forall era.
(AlonzoEraPParams era, AtMostEra "Alonzo" era,
 ExactEra AlonzoEra era) =>
PParams era
exampleAlonzoPParams

  examplePParamsUpdate :: PParamsUpdate AlonzoEra
examplePParamsUpdate = PParamsUpdate AlonzoEra
forall era.
(AlonzoEraPParams era, AtMostEra "Alonzo" era,
 AtMostEra "Babbage" era, ExactEra AlonzoEra era) =>
PParamsUpdate era
exampleAlonzoPParamsUpdate

instance ShelleyEraTest AlonzoEra

instance AllegraEraTest AlonzoEra

instance MaryEraTest AlonzoEra

instance AlonzoEraTest AlonzoEra