{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Cardano.Ledger.Alonzo.Arbitrary (
  mkPlutusScript',
  alwaysSucceeds,
  alwaysSucceedsLang,
  alwaysFails,
  alwaysFailsLang,
  genEraLanguage,
  genAlonzoScript,
  genNativeScript,
  genNonEmptyRedeemers,
  genNonEmptyTxDats,
  genPlutusScript,
  genScripts,
  genValidCostModel,
  genValidAndUnknownCostModels,
  genAlonzoPlutusPurposePointer,
) where

import Cardano.Ledger.Allegra.Scripts (Timelock)
import Cardano.Ledger.Alonzo (AlonzoEra)
import Cardano.Ledger.Alonzo.Core
import Cardano.Ledger.Alonzo.Genesis (AlonzoGenesis (..))
import Cardano.Ledger.Alonzo.PParams (AlonzoPParams (AlonzoPParams), OrdExUnits (OrdExUnits))
import Cardano.Ledger.Alonzo.Plutus.Context (
  EraPlutusContext (ContextError),
  EraPlutusTxInfo,
  SupportedLanguage (..),
  mkSupportedPlutusScript,
  supportedLanguages,
 )
import Cardano.Ledger.Alonzo.Plutus.Evaluate (CollectError)
import Cardano.Ledger.Alonzo.Plutus.TxInfo (AlonzoContextError)
import Cardano.Ledger.Alonzo.Rules (
  AlonzoUtxoPredFailure (..),
  AlonzoUtxosPredFailure (..),
  AlonzoUtxowPredFailure (..),
  FailureDescription (..),
  TagMismatchDescription (..),
 )
import Cardano.Ledger.Alonzo.Scripts (
  AlonzoPlutusPurpose (..),
  AlonzoScript (..),
 )
import Cardano.Ledger.Alonzo.Tx (
  AlonzoTx (AlonzoTx),
  IsValid (IsValid),
  ScriptIntegrity (ScriptIntegrity),
  getLanguageView,
 )
import Cardano.Ledger.Alonzo.TxAuxData (
  AlonzoTxAuxData (..),
  mkAlonzoTxAuxData,
 )
import Cardano.Ledger.Alonzo.TxBody (TxBody (AlonzoTxBody))
import Cardano.Ledger.Alonzo.TxOut (AlonzoTxOut (AlonzoTxOut))
import Cardano.Ledger.Alonzo.TxWits (
  AlonzoTxWits (AlonzoTxWits),
  Redeemers (Redeemers),
  TxDats (TxDats),
 )
import Cardano.Ledger.BaseTypes (StrictMaybe (..))
import Cardano.Ledger.Plutus.Data (hashData)
import Cardano.Ledger.Plutus.ExUnits (ExUnits (..))
import Cardano.Ledger.Plutus.Language (
  Language (..),
  Plutus (..),
  PlutusLanguage,
  asSLanguage,
  plutusLanguage,
 )
import Cardano.Ledger.Shelley.Rules (PredicateFailure, ShelleyUtxowPredFailure)
import Data.Functor.Identity (Identity)
import Data.List.NonEmpty (NonEmpty ((:|)))
import qualified Data.List.NonEmpty as NE (toList)
import qualified Data.Map.Strict as Map
import qualified Data.MapExtras as Map (fromElems)
import qualified Data.Set as Set
import Data.Text (pack)
import Data.Word
import Generic.Random (genericArbitraryU)
import Numeric.Natural (Natural)
import Test.Cardano.Data (genNonEmptyMap)
import Test.Cardano.Ledger.Common
import Test.Cardano.Ledger.Core.Arbitrary (
  genValidAndUnknownCostModels,
  genValidCostModel,
  genValidCostModels,
 )
import Test.Cardano.Ledger.Mary.Arbitrary ()
import Test.Cardano.Ledger.Plutus (alwaysFailsPlutus, alwaysSucceedsPlutus)

instance
  ( Arbitrary (AlonzoScript era)
  , AlonzoEraScript era
  ) =>
  Arbitrary (AlonzoTxAuxData era)
  where
  arbitrary :: Gen (AlonzoTxAuxData era)
arbitrary = forall (f :: * -> *) era.
(Foldable f, AlonzoEraScript era) =>
Map Word64 Metadatum -> f (AlonzoScript era) -> AlonzoTxAuxData era
mkAlonzoTxAuxData @[] (Map Word64 Metadatum -> [AlonzoScript era] -> AlonzoTxAuxData era)
-> Gen (Map Word64 Metadatum)
-> Gen ([AlonzoScript era] -> AlonzoTxAuxData era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Map Word64 Metadatum)
forall a. Arbitrary a => Gen a
arbitrary Gen ([AlonzoScript era] -> AlonzoTxAuxData era)
-> Gen [AlonzoScript era] -> Gen (AlonzoTxAuxData era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen [AlonzoScript era]
forall a. Arbitrary a => Gen a
arbitrary

instance
  (AlonzoEraScript era, Arbitrary (PlutusPurpose AsIx era)) =>
  Arbitrary (Redeemers era)
  where
  arbitrary :: Gen (Redeemers era)
arbitrary = Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
forall era.
AlonzoEraScript era =>
Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
Redeemers (Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era)
-> Gen (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
-> Gen (Redeemers era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
forall a. Arbitrary a => Gen a
arbitrary

genNonEmptyRedeemers ::
  (AlonzoEraScript era, Arbitrary (PlutusPurpose AsIx era)) => Gen (Redeemers era)
genNonEmptyRedeemers :: forall era.
(AlonzoEraScript era, Arbitrary (PlutusPurpose AsIx era)) =>
Gen (Redeemers era)
genNonEmptyRedeemers = Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
forall era.
AlonzoEraScript era =>
Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era
Redeemers (Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Redeemers era)
-> Gen (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
-> Gen (Redeemers era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (PlutusPurpose AsIx era)
-> Gen (Data era, ExUnits)
-> Gen (Map (PlutusPurpose AsIx era) (Data era, ExUnits))
forall k v. Ord k => Gen k -> Gen v -> Gen (Map k v)
genNonEmptyMap Gen (PlutusPurpose AsIx era)
forall a. Arbitrary a => Gen a
arbitrary Gen (Data era, ExUnits)
forall a. Arbitrary a => Gen a
arbitrary

instance
  ( Era era
  , Arbitrary (Script era)
  , AlonzoEraScript era
  , Arbitrary (PlutusPurpose AsIx era)
  ) =>
  Arbitrary (AlonzoTxWits era)
  where
  arbitrary :: Gen (AlonzoTxWits era)
arbitrary =
    Set (WitVKey 'Witness)
-> Set BootstrapWitness
-> Map ScriptHash (Script era)
-> TxDats era
-> Redeemers era
-> AlonzoTxWits era
forall era.
AlonzoEraScript era =>
Set (WitVKey 'Witness)
-> Set BootstrapWitness
-> Map ScriptHash (Script era)
-> TxDats era
-> Redeemers era
-> AlonzoTxWits era
AlonzoTxWits
      (Set (WitVKey 'Witness)
 -> Set BootstrapWitness
 -> Map ScriptHash (Script era)
 -> TxDats era
 -> Redeemers era
 -> AlonzoTxWits era)
-> Gen (Set (WitVKey 'Witness))
-> Gen
     (Set BootstrapWitness
      -> Map ScriptHash (Script era)
      -> TxDats era
      -> Redeemers era
      -> AlonzoTxWits era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Set (WitVKey 'Witness))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Set BootstrapWitness
   -> Map ScriptHash (Script era)
   -> TxDats era
   -> Redeemers era
   -> AlonzoTxWits era)
-> Gen (Set BootstrapWitness)
-> Gen
     (Map ScriptHash (Script era)
      -> TxDats era -> Redeemers era -> AlonzoTxWits era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set BootstrapWitness)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Map ScriptHash (Script era)
   -> TxDats era -> Redeemers era -> AlonzoTxWits era)
-> Gen (Map ScriptHash (Script era))
-> Gen (TxDats era -> Redeemers era -> AlonzoTxWits era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Map ScriptHash (Script era))
forall era.
(EraScript era, Arbitrary (Script era)) =>
Gen (Map ScriptHash (Script era))
genScripts
      Gen (TxDats era -> Redeemers era -> AlonzoTxWits era)
-> Gen (TxDats era) -> Gen (Redeemers era -> AlonzoTxWits era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (TxDats era)
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Redeemers era -> AlonzoTxWits era)
-> Gen (Redeemers era) -> Gen (AlonzoTxWits era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Redeemers era)
forall a. Arbitrary a => Gen a
arbitrary

genScripts ::
  forall era.
  ( EraScript era
  , Arbitrary (Script era)
  ) =>
  Gen (Map.Map ScriptHash (Script era))
genScripts :: forall era.
(EraScript era, Arbitrary (Script era)) =>
Gen (Map ScriptHash (Script era))
genScripts = (Script era -> ScriptHash)
-> [Script era] -> Map ScriptHash (Script era)
forall (f :: * -> *) k v.
(Foldable f, Ord k) =>
(v -> k) -> f v -> Map k v
Map.fromElems (forall era. EraScript era => Script era -> ScriptHash
hashScript @era) ([Script era] -> Map ScriptHash (Script era))
-> Gen [Script era] -> Gen (Map ScriptHash (Script era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Gen [Script era]
forall a. Arbitrary a => Gen a
arbitrary :: Gen [Script era])

instance Era era => Arbitrary (TxDats era) where
  arbitrary :: Gen (TxDats era)
arbitrary = Map DataHash (Data era) -> TxDats era
forall era. Era era => Map DataHash (Data era) -> TxDats era
TxDats (Map DataHash (Data era) -> TxDats era)
-> ([Data era] -> Map DataHash (Data era))
-> [Data era]
-> TxDats era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) k v.
(Foldable f, Ord k) =>
(v -> k) -> f v -> Map k v
Map.fromElems @[] Data era -> DataHash
forall era. Data era -> DataHash
hashData ([Data era] -> TxDats era) -> Gen [Data era] -> Gen (TxDats era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen [Data era]
forall a. Arbitrary a => Gen a
arbitrary

genNonEmptyTxDats :: Era era => Gen (TxDats era)
genNonEmptyTxDats :: forall era. Era era => Gen (TxDats era)
genNonEmptyTxDats = Map DataHash (Data era) -> TxDats era
forall era. Era era => Map DataHash (Data era) -> TxDats era
TxDats (Map DataHash (Data era) -> TxDats era)
-> ([Data era] -> Map DataHash (Data era))
-> [Data era]
-> TxDats era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) k v.
(Foldable f, Ord k) =>
(v -> k) -> f v -> Map k v
Map.fromElems @[] Data era -> DataHash
forall era. Data era -> DataHash
hashData ([Data era] -> TxDats era) -> Gen [Data era] -> Gen (TxDats era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Data era) -> Gen [Data era]
forall a. Gen a -> Gen [a]
listOf1 Gen (Data era)
forall a. Arbitrary a => Gen a
arbitrary

instance
  ( EraTxOut era
  , Arbitrary (Value era)
  ) =>
  Arbitrary (AlonzoTxOut era)
  where
  arbitrary :: Gen (AlonzoTxOut era)
arbitrary =
    Addr -> Value era -> StrictMaybe DataHash -> AlonzoTxOut era
forall era.
(Era era, Val (Value era), HasCallStack) =>
Addr -> Value era -> StrictMaybe DataHash -> AlonzoTxOut era
AlonzoTxOut
      (Addr -> Value era -> StrictMaybe DataHash -> AlonzoTxOut era)
-> Gen Addr
-> Gen (Value era -> StrictMaybe DataHash -> AlonzoTxOut era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Addr
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Value era -> StrictMaybe DataHash -> AlonzoTxOut era)
-> Gen (Value era) -> Gen (StrictMaybe DataHash -> AlonzoTxOut era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Int -> Int) -> Gen (Value era) -> Gen (Value era)
forall a. (Int -> Int) -> Gen a -> Gen a
scale (Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
15) Gen (Value era)
forall a. Arbitrary a => Gen a
arbitrary
      Gen (StrictMaybe DataHash -> AlonzoTxOut era)
-> Gen (StrictMaybe DataHash) -> Gen (AlonzoTxOut era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe DataHash)
forall a. Arbitrary a => Gen a
arbitrary

instance Arbitrary (TxBody AlonzoEra) where
  arbitrary :: Gen (TxBody AlonzoEra)
arbitrary =
    Set TxIn
-> Set TxIn
-> StrictSeq (TxOut AlonzoEra)
-> StrictSeq (TxCert AlonzoEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update AlonzoEra)
-> Set (KeyHash 'Witness)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> TxBody AlonzoEra
Set TxIn
-> Set TxIn
-> StrictSeq (AlonzoTxOut AlonzoEra)
-> StrictSeq (ShelleyTxCert AlonzoEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> StrictMaybe (Update AlonzoEra)
-> Set (KeyHash 'Witness)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> TxBody AlonzoEra
AlonzoTxBody
      (Set TxIn
 -> Set TxIn
 -> StrictSeq (AlonzoTxOut AlonzoEra)
 -> StrictSeq (ShelleyTxCert AlonzoEra)
 -> Withdrawals
 -> Coin
 -> ValidityInterval
 -> StrictMaybe (Update AlonzoEra)
 -> Set (KeyHash 'Witness)
 -> MultiAsset
 -> StrictMaybe ScriptIntegrityHash
 -> StrictMaybe TxAuxDataHash
 -> StrictMaybe Network
 -> TxBody AlonzoEra)
-> Gen (Set TxIn)
-> Gen
     (Set TxIn
      -> StrictSeq (AlonzoTxOut AlonzoEra)
      -> StrictSeq (ShelleyTxCert AlonzoEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> StrictMaybe (Update AlonzoEra)
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Set TxIn)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Set TxIn
   -> StrictSeq (AlonzoTxOut AlonzoEra)
   -> StrictSeq (ShelleyTxCert AlonzoEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> StrictMaybe (Update AlonzoEra)
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen (Set TxIn)
-> Gen
     (StrictSeq (AlonzoTxOut AlonzoEra)
      -> StrictSeq (ShelleyTxCert AlonzoEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> StrictMaybe (Update AlonzoEra)
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set TxIn)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictSeq (AlonzoTxOut AlonzoEra)
   -> StrictSeq (ShelleyTxCert AlonzoEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> StrictMaybe (Update AlonzoEra)
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen (StrictSeq (AlonzoTxOut AlonzoEra))
-> Gen
     (StrictSeq (ShelleyTxCert AlonzoEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> StrictMaybe (Update AlonzoEra)
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictSeq (AlonzoTxOut AlonzoEra))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictSeq (ShelleyTxCert AlonzoEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> StrictMaybe (Update AlonzoEra)
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen (StrictSeq (ShelleyTxCert AlonzoEra))
-> Gen
     (Withdrawals
      -> Coin
      -> ValidityInterval
      -> StrictMaybe (Update AlonzoEra)
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictSeq (ShelleyTxCert AlonzoEra))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Withdrawals
   -> Coin
   -> ValidityInterval
   -> StrictMaybe (Update AlonzoEra)
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen Withdrawals
-> Gen
     (Coin
      -> ValidityInterval
      -> StrictMaybe (Update AlonzoEra)
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Withdrawals
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Coin
   -> ValidityInterval
   -> StrictMaybe (Update AlonzoEra)
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen Coin
-> Gen
     (ValidityInterval
      -> StrictMaybe (Update AlonzoEra)
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (ValidityInterval
   -> StrictMaybe (Update AlonzoEra)
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen ValidityInterval
-> Gen
     (StrictMaybe (Update AlonzoEra)
      -> Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen ValidityInterval
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe (Update AlonzoEra)
   -> Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen (StrictMaybe (Update AlonzoEra))
-> Gen
     (Set (KeyHash 'Witness)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Int -> Int)
-> Gen (StrictMaybe (Update AlonzoEra))
-> Gen (StrictMaybe (Update AlonzoEra))
forall a. (Int -> Int) -> Gen a -> Gen a
scale (Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
15) Gen (StrictMaybe (Update AlonzoEra))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Set (KeyHash 'Witness)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen (Set (KeyHash 'Witness))
-> Gen
     (MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set (KeyHash 'Witness))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen MultiAsset
-> Gen
     (StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Int -> Int) -> Gen MultiAsset -> Gen MultiAsset
forall a. (Int -> Int) -> Gen a -> Gen a
scale (Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
15) Gen MultiAsset
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> TxBody AlonzoEra)
-> Gen (StrictMaybe ScriptIntegrityHash)
-> Gen
     (StrictMaybe TxAuxDataHash
      -> StrictMaybe Network -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe ScriptIntegrityHash)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe TxAuxDataHash
   -> StrictMaybe Network -> TxBody AlonzoEra)
-> Gen (StrictMaybe TxAuxDataHash)
-> Gen (StrictMaybe Network -> TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe TxAuxDataHash)
forall a. Arbitrary a => Gen a
arbitrary
      Gen (StrictMaybe Network -> TxBody AlonzoEra)
-> Gen (StrictMaybe Network) -> Gen (TxBody AlonzoEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Network)
forall a. Arbitrary a => Gen a
arbitrary

deriving newtype instance Arbitrary IsValid

instance
  ( Arbitrary (TxBody era)
  , Arbitrary (TxWits era)
  , Arbitrary (TxAuxData era)
  ) =>
  Arbitrary (AlonzoTx era)
  where
  arbitrary :: Gen (AlonzoTx era)
arbitrary =
    TxBody era
-> TxWits era
-> IsValid
-> StrictMaybe (TxAuxData era)
-> AlonzoTx era
forall era.
TxBody era
-> TxWits era
-> IsValid
-> StrictMaybe (TxAuxData era)
-> AlonzoTx era
AlonzoTx
      (TxBody era
 -> TxWits era
 -> IsValid
 -> StrictMaybe (TxAuxData era)
 -> AlonzoTx era)
-> Gen (TxBody era)
-> Gen
     (TxWits era
      -> IsValid -> StrictMaybe (TxAuxData era) -> AlonzoTx era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (TxBody era)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (TxWits era
   -> IsValid -> StrictMaybe (TxAuxData era) -> AlonzoTx era)
-> Gen (TxWits era)
-> Gen (IsValid -> StrictMaybe (TxAuxData era) -> AlonzoTx era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (TxWits era)
forall a. Arbitrary a => Gen a
arbitrary
      Gen (IsValid -> StrictMaybe (TxAuxData era) -> AlonzoTx era)
-> Gen IsValid -> Gen (StrictMaybe (TxAuxData era) -> AlonzoTx era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen IsValid
forall a. Arbitrary a => Gen a
arbitrary
      Gen (StrictMaybe (TxAuxData era) -> AlonzoTx era)
-> Gen (StrictMaybe (TxAuxData era)) -> Gen (AlonzoTx era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe (TxAuxData era))
forall a. Arbitrary a => Gen a
arbitrary

genEraLanguage :: forall era. AlonzoEraScript era => Gen Language
genEraLanguage :: forall era. AlonzoEraScript era => Gen Language
genEraLanguage = (Language, Language) -> Gen Language
forall a. Random a => (a, a) -> Gen a
choose (Language
forall a. Bounded a => a
minBound, forall era. AlonzoEraScript era => Language
eraMaxLanguage @era)

instance EraPlutusContext era => Arbitrary (SupportedLanguage era) where
  arbitrary :: Gen (SupportedLanguage era)
arbitrary = [SupportedLanguage era] -> Gen (SupportedLanguage era)
forall a. HasCallStack => [a] -> Gen a
elements ([SupportedLanguage era] -> Gen (SupportedLanguage era))
-> [SupportedLanguage era] -> Gen (SupportedLanguage era)
forall a b. (a -> b) -> a -> b
$ NonEmpty (SupportedLanguage era) -> [SupportedLanguage era]
forall a. NonEmpty a -> [a]
NE.toList (forall era.
(HasCallStack, EraPlutusContext era) =>
NonEmpty (SupportedLanguage era)
supportedLanguages @era)

instance
  ( EraPlutusContext era
  , Script era ~ AlonzoScript era
  , NativeScript era ~ Timelock era
  ) =>
  Arbitrary (AlonzoScript era)
  where
  arbitrary :: Gen (AlonzoScript era)
arbitrary = Gen (SupportedLanguage era)
forall a. Arbitrary a => Gen a
arbitrary Gen (SupportedLanguage era)
-> (SupportedLanguage era -> Gen (AlonzoScript era))
-> Gen (AlonzoScript era)
forall a b. Gen a -> (a -> Gen b) -> Gen b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SupportedLanguage era -> Gen (AlonzoScript era)
forall era.
(EraPlutusContext era, Script era ~ AlonzoScript era,
 NativeScript era ~ Timelock era) =>
SupportedLanguage era -> Gen (AlonzoScript era)
genAlonzoScript

genAlonzoScript ::
  ( EraPlutusContext era
  , Script era ~ AlonzoScript era
  , NativeScript era ~ Timelock era
  ) =>
  SupportedLanguage era ->
  Gen (AlonzoScript era)
genAlonzoScript :: forall era.
(EraPlutusContext era, Script era ~ AlonzoScript era,
 NativeScript era ~ Timelock era) =>
SupportedLanguage era -> Gen (AlonzoScript era)
genAlonzoScript SupportedLanguage era
lang =
  [(Int, Gen (AlonzoScript era))] -> Gen (AlonzoScript era)
forall a. HasCallStack => [(Int, Gen a)] -> Gen a
frequency
    [ (Int
2, PlutusScript era -> Script era
PlutusScript era -> AlonzoScript era
forall era. AlonzoEraScript era => PlutusScript era -> Script era
fromPlutusScript (PlutusScript era -> AlonzoScript era)
-> Gen (PlutusScript era) -> Gen (AlonzoScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> SupportedLanguage era -> Gen (PlutusScript era)
forall era. SupportedLanguage era -> Gen (PlutusScript era)
genPlutusScript SupportedLanguage era
lang)
    , (Int
8, NativeScript era -> Script era
NativeScript era -> AlonzoScript era
forall era. EraScript era => NativeScript era -> Script era
fromNativeScript (NativeScript era -> AlonzoScript era)
-> Gen (NativeScript era) -> Gen (AlonzoScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (NativeScript era)
forall era. Arbitrary (NativeScript era) => Gen (NativeScript era)
genNativeScript)
    ]

genNativeScript ::
  Arbitrary (NativeScript era) =>
  Gen (NativeScript era)
genNativeScript :: forall era. Arbitrary (NativeScript era) => Gen (NativeScript era)
genNativeScript = Gen (NativeScript era)
forall a. Arbitrary a => Gen a
arbitrary

genPlutusScript ::
  SupportedLanguage era ->
  Gen (PlutusScript era)
genPlutusScript :: forall era. SupportedLanguage era -> Gen (PlutusScript era)
genPlutusScript SupportedLanguage era
lang =
  [(Int, Gen (PlutusScript era))] -> Gen (PlutusScript era)
forall a. HasCallStack => [(Int, Gen a)] -> Gen a
frequency
    [ (Int
5, SupportedLanguage era -> Natural -> PlutusScript era
forall era. SupportedLanguage era -> Natural -> PlutusScript era
alwaysSucceedsLang SupportedLanguage era
lang (Natural -> PlutusScript era)
-> Gen Natural -> Gen (PlutusScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Natural] -> Gen Natural
forall a. HasCallStack => [a] -> Gen a
elements [Natural
Item [Natural]
1, Natural
Item [Natural]
2, Natural
Item [Natural]
3])
    , (Int
5, SupportedLanguage era -> Natural -> PlutusScript era
forall era. SupportedLanguage era -> Natural -> PlutusScript era
alwaysFailsLang SupportedLanguage era
lang (Natural -> PlutusScript era)
-> Gen Natural -> Gen (PlutusScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Natural] -> Gen Natural
forall a. HasCallStack => [a] -> Gen a
elements [Natural
Item [Natural]
1, Natural
Item [Natural]
2, Natural
Item [Natural]
3])
    ]

instance Arbitrary (AlonzoPParams Identity era) where
  arbitrary :: Gen (AlonzoPParams Identity era)
arbitrary =
    HKD Identity Coin
-> HKD Identity Coin
-> HKD Identity Word32
-> HKD Identity Word32
-> HKD Identity Word16
-> HKD Identity Coin
-> HKD Identity Coin
-> HKD Identity EpochInterval
-> HKD Identity Word16
-> HKD Identity NonNegativeInterval
-> HKD Identity UnitInterval
-> HKD Identity UnitInterval
-> HKD Identity UnitInterval
-> HKD Identity Nonce
-> HKD Identity ProtVer
-> HKD Identity Coin
-> HKD Identity CoinPerWord
-> HKD Identity CostModels
-> HKD Identity Prices
-> HKD Identity OrdExUnits
-> HKD Identity OrdExUnits
-> HKD Identity Natural
-> HKD Identity Natural
-> HKD Identity Natural
-> AlonzoPParams Identity era
Coin
-> Coin
-> Word32
-> Word32
-> Word16
-> Coin
-> Coin
-> EpochInterval
-> Word16
-> NonNegativeInterval
-> UnitInterval
-> UnitInterval
-> UnitInterval
-> Nonce
-> ProtVer
-> Coin
-> CoinPerWord
-> CostModels
-> Prices
-> OrdExUnits
-> OrdExUnits
-> Natural
-> Natural
-> Natural
-> AlonzoPParams Identity era
forall (f :: * -> *) era.
HKD f Coin
-> HKD f Coin
-> HKD f Word32
-> HKD f Word32
-> HKD f Word16
-> HKD f Coin
-> HKD f Coin
-> HKD f EpochInterval
-> HKD f Word16
-> HKD f NonNegativeInterval
-> HKD f UnitInterval
-> HKD f UnitInterval
-> HKD f UnitInterval
-> HKD f Nonce
-> HKD f ProtVer
-> HKD f Coin
-> HKD f CoinPerWord
-> HKD f CostModels
-> HKD f Prices
-> HKD f OrdExUnits
-> HKD f OrdExUnits
-> HKD f Natural
-> HKD f Natural
-> HKD f Natural
-> AlonzoPParams f era
AlonzoPParams
      (Coin
 -> Coin
 -> Word32
 -> Word32
 -> Word16
 -> Coin
 -> Coin
 -> EpochInterval
 -> Word16
 -> NonNegativeInterval
 -> UnitInterval
 -> UnitInterval
 -> UnitInterval
 -> Nonce
 -> ProtVer
 -> Coin
 -> CoinPerWord
 -> CostModels
 -> Prices
 -> OrdExUnits
 -> OrdExUnits
 -> Natural
 -> Natural
 -> Natural
 -> AlonzoPParams Identity era)
-> Gen Coin
-> Gen
     (Coin
      -> Word32
      -> Word32
      -> Word16
      -> Coin
      -> Coin
      -> EpochInterval
      -> Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Coin
   -> Word32
   -> Word32
   -> Word16
   -> Coin
   -> Coin
   -> EpochInterval
   -> Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Coin
-> Gen
     (Word32
      -> Word32
      -> Word16
      -> Coin
      -> Coin
      -> EpochInterval
      -> Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Word32
   -> Word32
   -> Word16
   -> Coin
   -> Coin
   -> EpochInterval
   -> Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Word32
-> Gen
     (Word32
      -> Word16
      -> Coin
      -> Coin
      -> EpochInterval
      -> Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Word32
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Word32
   -> Word16
   -> Coin
   -> Coin
   -> EpochInterval
   -> Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Word32
-> Gen
     (Word16
      -> Coin
      -> Coin
      -> EpochInterval
      -> Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Word32
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Word16
   -> Coin
   -> Coin
   -> EpochInterval
   -> Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Word16
-> Gen
     (Coin
      -> Coin
      -> EpochInterval
      -> Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Word16
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Coin
   -> Coin
   -> EpochInterval
   -> Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Coin
-> Gen
     (Coin
      -> EpochInterval
      -> Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Coin
   -> EpochInterval
   -> Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Coin
-> Gen
     (EpochInterval
      -> Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (EpochInterval
   -> Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen EpochInterval
-> Gen
     (Word16
      -> NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen EpochInterval
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Word16
   -> NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Word16
-> Gen
     (NonNegativeInterval
      -> UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Word16
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (NonNegativeInterval
   -> UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen NonNegativeInterval
-> Gen
     (UnitInterval
      -> UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen NonNegativeInterval
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (UnitInterval
   -> UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen UnitInterval
-> Gen
     (UnitInterval
      -> UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen UnitInterval
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (UnitInterval
   -> UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen UnitInterval
-> Gen
     (UnitInterval
      -> Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen UnitInterval
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (UnitInterval
   -> Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen UnitInterval
-> Gen
     (Nonce
      -> ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen UnitInterval
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Nonce
   -> ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Nonce
-> Gen
     (ProtVer
      -> Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Nonce
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (ProtVer
   -> Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen ProtVer
-> Gen
     (Coin
      -> CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen ProtVer
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Coin
   -> CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Coin
-> Gen
     (CoinPerWord
      -> CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Coin
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (CoinPerWord
   -> CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen CoinPerWord
-> Gen
     (CostModels
      -> Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen CoinPerWord
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (CostModels
   -> Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen CostModels
-> Gen
     (Prices
      -> OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Set Language -> Gen CostModels
genValidCostModels [Item (Set Language)
Language
PlutusV1, Item (Set Language)
Language
PlutusV2]
      Gen
  (Prices
   -> OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen Prices
-> Gen
     (OrdExUnits
      -> OrdExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Prices
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (OrdExUnits
   -> OrdExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoPParams Identity era)
-> Gen OrdExUnits
-> Gen
     (OrdExUnits
      -> Natural -> Natural -> Natural -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen OrdExUnits
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (OrdExUnits
   -> Natural -> Natural -> Natural -> AlonzoPParams Identity era)
-> Gen OrdExUnits
-> Gen
     (Natural -> Natural -> Natural -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen OrdExUnits
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Natural -> Natural -> Natural -> AlonzoPParams Identity era)
-> Gen Natural
-> Gen (Natural -> Natural -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Natural
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Natural -> Natural -> AlonzoPParams Identity era)
-> Gen Natural -> Gen (Natural -> AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Natural
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Natural -> AlonzoPParams Identity era)
-> Gen Natural -> Gen (AlonzoPParams Identity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Natural
forall a. Arbitrary a => Gen a
arbitrary

deriving instance Arbitrary OrdExUnits

instance Arbitrary (AlonzoPParams StrictMaybe era) where
  arbitrary :: Gen (AlonzoPParams StrictMaybe era)
arbitrary =
    StrictMaybe Coin
-> StrictMaybe Coin
-> StrictMaybe Word32
-> StrictMaybe Word32
-> StrictMaybe Word16
-> StrictMaybe Coin
-> StrictMaybe Coin
-> StrictMaybe EpochInterval
-> StrictMaybe Word16
-> StrictMaybe NonNegativeInterval
-> StrictMaybe UnitInterval
-> StrictMaybe UnitInterval
-> StrictMaybe UnitInterval
-> StrictMaybe Nonce
-> StrictMaybe ProtVer
-> StrictMaybe Coin
-> StrictMaybe CoinPerWord
-> StrictMaybe CostModels
-> StrictMaybe Prices
-> StrictMaybe OrdExUnits
-> StrictMaybe OrdExUnits
-> StrictMaybe Natural
-> StrictMaybe Natural
-> StrictMaybe Natural
-> AlonzoPParams StrictMaybe era
HKD StrictMaybe Coin
-> HKD StrictMaybe Coin
-> HKD StrictMaybe Word32
-> HKD StrictMaybe Word32
-> HKD StrictMaybe Word16
-> HKD StrictMaybe Coin
-> HKD StrictMaybe Coin
-> HKD StrictMaybe EpochInterval
-> HKD StrictMaybe Word16
-> HKD StrictMaybe NonNegativeInterval
-> HKD StrictMaybe UnitInterval
-> HKD StrictMaybe UnitInterval
-> HKD StrictMaybe UnitInterval
-> HKD StrictMaybe Nonce
-> HKD StrictMaybe ProtVer
-> HKD StrictMaybe Coin
-> HKD StrictMaybe CoinPerWord
-> HKD StrictMaybe CostModels
-> HKD StrictMaybe Prices
-> HKD StrictMaybe OrdExUnits
-> HKD StrictMaybe OrdExUnits
-> HKD StrictMaybe Natural
-> HKD StrictMaybe Natural
-> HKD StrictMaybe Natural
-> AlonzoPParams StrictMaybe era
forall (f :: * -> *) era.
HKD f Coin
-> HKD f Coin
-> HKD f Word32
-> HKD f Word32
-> HKD f Word16
-> HKD f Coin
-> HKD f Coin
-> HKD f EpochInterval
-> HKD f Word16
-> HKD f NonNegativeInterval
-> HKD f UnitInterval
-> HKD f UnitInterval
-> HKD f UnitInterval
-> HKD f Nonce
-> HKD f ProtVer
-> HKD f Coin
-> HKD f CoinPerWord
-> HKD f CostModels
-> HKD f Prices
-> HKD f OrdExUnits
-> HKD f OrdExUnits
-> HKD f Natural
-> HKD f Natural
-> HKD f Natural
-> AlonzoPParams f era
AlonzoPParams
      (StrictMaybe Coin
 -> StrictMaybe Coin
 -> StrictMaybe Word32
 -> StrictMaybe Word32
 -> StrictMaybe Word16
 -> StrictMaybe Coin
 -> StrictMaybe Coin
 -> StrictMaybe EpochInterval
 -> StrictMaybe Word16
 -> StrictMaybe NonNegativeInterval
 -> StrictMaybe UnitInterval
 -> StrictMaybe UnitInterval
 -> StrictMaybe UnitInterval
 -> StrictMaybe Nonce
 -> StrictMaybe ProtVer
 -> StrictMaybe Coin
 -> StrictMaybe CoinPerWord
 -> StrictMaybe CostModels
 -> StrictMaybe Prices
 -> StrictMaybe OrdExUnits
 -> StrictMaybe OrdExUnits
 -> StrictMaybe Natural
 -> StrictMaybe Natural
 -> StrictMaybe Natural
 -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Coin)
-> Gen
     (StrictMaybe Coin
      -> StrictMaybe Word32
      -> StrictMaybe Word32
      -> StrictMaybe Word16
      -> StrictMaybe Coin
      -> StrictMaybe Coin
      -> StrictMaybe EpochInterval
      -> StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Coin
   -> StrictMaybe Word32
   -> StrictMaybe Word32
   -> StrictMaybe Word16
   -> StrictMaybe Coin
   -> StrictMaybe Coin
   -> StrictMaybe EpochInterval
   -> StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Coin)
-> Gen
     (StrictMaybe Word32
      -> StrictMaybe Word32
      -> StrictMaybe Word16
      -> StrictMaybe Coin
      -> StrictMaybe Coin
      -> StrictMaybe EpochInterval
      -> StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Word32
   -> StrictMaybe Word32
   -> StrictMaybe Word16
   -> StrictMaybe Coin
   -> StrictMaybe Coin
   -> StrictMaybe EpochInterval
   -> StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Word32)
-> Gen
     (StrictMaybe Word32
      -> StrictMaybe Word16
      -> StrictMaybe Coin
      -> StrictMaybe Coin
      -> StrictMaybe EpochInterval
      -> StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Word32)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Word32
   -> StrictMaybe Word16
   -> StrictMaybe Coin
   -> StrictMaybe Coin
   -> StrictMaybe EpochInterval
   -> StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Word32)
-> Gen
     (StrictMaybe Word16
      -> StrictMaybe Coin
      -> StrictMaybe Coin
      -> StrictMaybe EpochInterval
      -> StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Word32)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Word16
   -> StrictMaybe Coin
   -> StrictMaybe Coin
   -> StrictMaybe EpochInterval
   -> StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Word16)
-> Gen
     (StrictMaybe Coin
      -> StrictMaybe Coin
      -> StrictMaybe EpochInterval
      -> StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Word16)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Coin
   -> StrictMaybe Coin
   -> StrictMaybe EpochInterval
   -> StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Coin)
-> Gen
     (StrictMaybe Coin
      -> StrictMaybe EpochInterval
      -> StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Coin
   -> StrictMaybe EpochInterval
   -> StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Coin)
-> Gen
     (StrictMaybe EpochInterval
      -> StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe EpochInterval
   -> StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe EpochInterval)
-> Gen
     (StrictMaybe Word16
      -> StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe EpochInterval)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Word16
   -> StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Word16)
-> Gen
     (StrictMaybe NonNegativeInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Word16)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe NonNegativeInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe NonNegativeInterval)
-> Gen
     (StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe NonNegativeInterval)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe UnitInterval)
-> Gen
     (StrictMaybe UnitInterval
      -> StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe UnitInterval)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe UnitInterval
   -> StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe UnitInterval)
-> Gen
     (StrictMaybe UnitInterval
      -> StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe UnitInterval)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe UnitInterval
   -> StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe UnitInterval)
-> Gen
     (StrictMaybe Nonce
      -> StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe UnitInterval)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Nonce
   -> StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Nonce)
-> Gen
     (StrictMaybe ProtVer
      -> StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Nonce)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe ProtVer
   -> StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe ProtVer)
-> Gen
     (StrictMaybe Coin
      -> StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe ProtVer)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Coin
   -> StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Coin)
-> Gen
     (StrictMaybe CoinPerWord
      -> StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Coin)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe CoinPerWord
   -> StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe CoinPerWord)
-> Gen
     (StrictMaybe CostModels
      -> StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe CoinPerWord)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe CostModels
   -> StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe CostModels)
-> Gen
     (StrictMaybe Prices
      -> StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Gen (StrictMaybe CostModels)] -> Gen (StrictMaybe CostModels)
forall a. HasCallStack => [Gen a] -> Gen a
oneof [StrictMaybe CostModels -> Gen (StrictMaybe CostModels)
forall a. a -> Gen a
forall (f :: * -> *) a. Applicative f => a -> f a
pure StrictMaybe CostModels
forall a. StrictMaybe a
SNothing, CostModels -> StrictMaybe CostModels
forall a. a -> StrictMaybe a
SJust (CostModels -> StrictMaybe CostModels)
-> Gen CostModels -> Gen (StrictMaybe CostModels)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Set Language -> Gen CostModels
genValidCostModels [Item (Set Language)
Language
PlutusV1, Item (Set Language)
Language
PlutusV2]]
      Gen
  (StrictMaybe Prices
   -> StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Prices)
-> Gen
     (StrictMaybe OrdExUnits
      -> StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Prices)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe OrdExUnits
   -> StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe OrdExUnits)
-> Gen
     (StrictMaybe OrdExUnits
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe OrdExUnits)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe OrdExUnits
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe OrdExUnits)
-> Gen
     (StrictMaybe Natural
      -> StrictMaybe Natural
      -> StrictMaybe Natural
      -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe OrdExUnits)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Natural
   -> StrictMaybe Natural
   -> StrictMaybe Natural
   -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Natural)
-> Gen
     (StrictMaybe Natural
      -> StrictMaybe Natural -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Natural)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Natural
   -> StrictMaybe Natural -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Natural)
-> Gen (StrictMaybe Natural -> AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Natural)
forall a. Arbitrary a => Gen a
arbitrary
      Gen (StrictMaybe Natural -> AlonzoPParams StrictMaybe era)
-> Gen (StrictMaybe Natural) -> Gen (AlonzoPParams StrictMaybe era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (StrictMaybe Natural)
forall a. Arbitrary a => Gen a
arbitrary

instance Arbitrary FailureDescription where
  arbitrary :: Gen FailureDescription
arbitrary = Text -> ByteString -> FailureDescription
PlutusFailure (Text -> ByteString -> FailureDescription)
-> Gen Text -> Gen (ByteString -> FailureDescription)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> Text
pack (String -> Text) -> Gen String -> Gen Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen String
forall a. Arbitrary a => Gen a
arbitrary) Gen (ByteString -> FailureDescription)
-> Gen ByteString -> Gen FailureDescription
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen ByteString
forall a. Arbitrary a => Gen a
arbitrary

instance Arbitrary TagMismatchDescription where
  arbitrary :: Gen TagMismatchDescription
arbitrary =
    [Gen TagMismatchDescription] -> Gen TagMismatchDescription
forall a. HasCallStack => [Gen a] -> Gen a
oneof [TagMismatchDescription -> Gen TagMismatchDescription
forall a. a -> Gen a
forall (f :: * -> *) a. Applicative f => a -> f a
pure TagMismatchDescription
PassedUnexpectedly, NonEmpty FailureDescription -> TagMismatchDescription
FailedUnexpectedly (NonEmpty FailureDescription -> TagMismatchDescription)
-> Gen (NonEmpty FailureDescription) -> Gen TagMismatchDescription
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (FailureDescription
-> [FailureDescription] -> NonEmpty FailureDescription
forall a. a -> [a] -> NonEmpty a
(:|) (FailureDescription
 -> [FailureDescription] -> NonEmpty FailureDescription)
-> Gen FailureDescription
-> Gen ([FailureDescription] -> NonEmpty FailureDescription)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen FailureDescription
forall a. Arbitrary a => Gen a
arbitrary Gen ([FailureDescription] -> NonEmpty FailureDescription)
-> Gen [FailureDescription] -> Gen (NonEmpty FailureDescription)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen [FailureDescription]
forall a. Arbitrary a => Gen a
arbitrary)]

instance
  ( Era era
  , Arbitrary (EraRuleFailure "PPUP" era)
  , Arbitrary (PlutusPurpose AsItem era)
  , Arbitrary (ContextError era)
  ) =>
  Arbitrary (AlonzoUtxosPredFailure era)
  where
  arbitrary :: Gen (AlonzoUtxosPredFailure era)
arbitrary = Gen (AlonzoUtxosPredFailure era)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

instance
  ( Era era
  , Arbitrary (PlutusPurpose AsItem era)
  , Arbitrary (ContextError era)
  ) =>
  Arbitrary (CollectError era)
  where
  arbitrary :: Gen (CollectError era)
arbitrary = Gen (CollectError era)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

instance Era era => Arbitrary (AlonzoContextError era) where
  arbitrary :: Gen (AlonzoContextError era)
arbitrary = Gen (AlonzoContextError era)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

instance
  ( EraTxOut era
  , Arbitrary (Value era)
  , Arbitrary (TxOut era)
  , Arbitrary (PredicateFailure (EraRule "UTXOS" era))
  ) =>
  Arbitrary (AlonzoUtxoPredFailure era)
  where
  arbitrary :: Gen (AlonzoUtxoPredFailure era)
arbitrary = Gen (AlonzoUtxoPredFailure era)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

instance
  ( Era era
  , Arbitrary (PredicateFailure (EraRule "UTXO" era))
  , Arbitrary (ShelleyUtxowPredFailure era)
  , Arbitrary (TxCert era)
  , Arbitrary (PlutusPurpose AsItem era)
  , Arbitrary (PlutusPurpose AsIx era)
  ) =>
  Arbitrary (AlonzoUtxowPredFailure era)
  where
  -- Switch to this implementation once #4110 is taken care of
  -- arbitrary = genericArbitraryU
  arbitrary :: Gen (AlonzoUtxowPredFailure era)
arbitrary =
    [Gen (AlonzoUtxowPredFailure era)]
-> Gen (AlonzoUtxowPredFailure era)
forall a. HasCallStack => [Gen a] -> Gen a
oneof
      [ ShelleyUtxowPredFailure era -> AlonzoUtxowPredFailure era
forall era.
ShelleyUtxowPredFailure era -> AlonzoUtxowPredFailure era
ShelleyInAlonzoUtxowPredFailure (ShelleyUtxowPredFailure era -> AlonzoUtxowPredFailure era)
-> Gen (ShelleyUtxowPredFailure era)
-> Gen (AlonzoUtxowPredFailure era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ShelleyUtxowPredFailure era)
forall a. Arbitrary a => Gen a
arbitrary
      , -- MissingRedeemers <$> arbitrary -- see #4110
        Set DataHash -> Set DataHash -> AlonzoUtxowPredFailure era
forall era.
Set DataHash -> Set DataHash -> AlonzoUtxowPredFailure era
MissingRequiredDatums (Set DataHash -> Set DataHash -> AlonzoUtxowPredFailure era)
-> Gen (Set DataHash)
-> Gen (Set DataHash -> AlonzoUtxowPredFailure era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Set DataHash)
forall a. Arbitrary a => Gen a
arbitrary Gen (Set DataHash -> AlonzoUtxowPredFailure era)
-> Gen (Set DataHash) -> Gen (AlonzoUtxowPredFailure era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set DataHash)
forall a. Arbitrary a => Gen a
arbitrary
      , Set DataHash -> Set DataHash -> AlonzoUtxowPredFailure era
forall era.
Set DataHash -> Set DataHash -> AlonzoUtxowPredFailure era
NotAllowedSupplementalDatums (Set DataHash -> Set DataHash -> AlonzoUtxowPredFailure era)
-> Gen (Set DataHash)
-> Gen (Set DataHash -> AlonzoUtxowPredFailure era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Set DataHash)
forall a. Arbitrary a => Gen a
arbitrary Gen (Set DataHash -> AlonzoUtxowPredFailure era)
-> Gen (Set DataHash) -> Gen (AlonzoUtxowPredFailure era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Set DataHash)
forall a. Arbitrary a => Gen a
arbitrary
      , Mismatch 'RelEQ (StrictMaybe ScriptIntegrityHash)
-> AlonzoUtxowPredFailure era
forall era.
Mismatch 'RelEQ (StrictMaybe ScriptIntegrityHash)
-> AlonzoUtxowPredFailure era
PPViewHashesDontMatch (Mismatch 'RelEQ (StrictMaybe ScriptIntegrityHash)
 -> AlonzoUtxowPredFailure era)
-> Gen (Mismatch 'RelEQ (StrictMaybe ScriptIntegrityHash))
-> Gen (AlonzoUtxowPredFailure era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Mismatch 'RelEQ (StrictMaybe ScriptIntegrityHash))
forall a. Arbitrary a => Gen a
arbitrary
      , Set (KeyHash 'Witness) -> AlonzoUtxowPredFailure era
forall era. Set (KeyHash 'Witness) -> AlonzoUtxowPredFailure era
MissingRequiredSigners (Set (KeyHash 'Witness) -> AlonzoUtxowPredFailure era)
-> Gen (Set (KeyHash 'Witness)) -> Gen (AlonzoUtxowPredFailure era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Set (KeyHash 'Witness))
forall a. Arbitrary a => Gen a
arbitrary
      , Set TxIn -> AlonzoUtxowPredFailure era
forall era. Set TxIn -> AlonzoUtxowPredFailure era
UnspendableUTxONoDatumHash (Set TxIn -> AlonzoUtxowPredFailure era)
-> Gen (Set TxIn) -> Gen (AlonzoUtxowPredFailure era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Set TxIn)
forall a. Arbitrary a => Gen a
arbitrary
      -- , ExtraRedeemers <$> arbitrary -- see #4110
      ]

deriving instance Arbitrary ix => Arbitrary (AsIx ix it)

deriving instance Arbitrary it => Arbitrary (AsItem ix it)

instance (Arbitrary ix, Arbitrary it) => Arbitrary (AsIxItem ix it) where
  arbitrary :: Gen (AsIxItem ix it)
arbitrary = ix -> it -> AsIxItem ix it
forall ix it. ix -> it -> AsIxItem ix it
AsIxItem (ix -> it -> AsIxItem ix it)
-> Gen ix -> Gen (it -> AsIxItem ix it)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen ix
forall a. Arbitrary a => Gen a
arbitrary Gen (it -> AsIxItem ix it) -> Gen it -> Gen (AsIxItem ix it)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen it
forall a. Arbitrary a => Gen a
arbitrary

genAlonzoPlutusPurposePointer :: Word32 -> Gen (AlonzoPlutusPurpose AsIx era)
genAlonzoPlutusPurposePointer :: forall era. Word32 -> Gen (AlonzoPlutusPurpose AsIx era)
genAlonzoPlutusPurposePointer Word32
i =
  [AlonzoPlutusPurpose AsIx era]
-> Gen (AlonzoPlutusPurpose AsIx era)
forall a. HasCallStack => [a] -> Gen a
elements
    [ AsIx Word32 TxIn -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
AsIx Word32
i)
    , AsIx Word32 PolicyID -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (Word32 -> AsIx Word32 PolicyID
forall ix it. ix -> AsIx ix it
AsIx Word32
i)
    , AsIx Word32 (TxCert era) -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (Word32 -> AsIx Word32 (TxCert era)
forall ix it. ix -> AsIx ix it
AsIx Word32
i)
    , AsIx Word32 RewardAccount -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (Word32 -> AsIx Word32 RewardAccount
forall ix it. ix -> AsIx ix it
AsIx Word32
i)
    ]

instance
  ( Era era
  , Arbitrary (TxCert era)
  ) =>
  Arbitrary (AlonzoPlutusPurpose AsItem era)
  where
  arbitrary :: Gen (AlonzoPlutusPurpose AsItem era)
arbitrary =
    [Gen (AlonzoPlutusPurpose AsItem era)]
-> Gen (AlonzoPlutusPurpose AsItem era)
forall a. HasCallStack => [Gen a] -> Gen a
oneof
      [ AsItem Word32 TxIn -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (AsItem Word32 TxIn -> AlonzoPlutusPurpose AsItem era)
-> Gen (AsItem Word32 TxIn) -> Gen (AlonzoPlutusPurpose AsItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsItem Word32 TxIn)
forall a. Arbitrary a => Gen a
arbitrary
      , AsItem Word32 PolicyID -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (AsItem Word32 PolicyID -> AlonzoPlutusPurpose AsItem era)
-> Gen (AsItem Word32 PolicyID)
-> Gen (AlonzoPlutusPurpose AsItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsItem Word32 PolicyID)
forall a. Arbitrary a => Gen a
arbitrary
      , AsItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (AsItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsItem era)
-> Gen (AsItem Word32 (TxCert era))
-> Gen (AlonzoPlutusPurpose AsItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsItem Word32 (TxCert era))
forall a. Arbitrary a => Gen a
arbitrary
      , AsItem Word32 RewardAccount -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (AsItem Word32 RewardAccount -> AlonzoPlutusPurpose AsItem era)
-> Gen (AsItem Word32 RewardAccount)
-> Gen (AlonzoPlutusPurpose AsItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsItem Word32 RewardAccount)
forall a. Arbitrary a => Gen a
arbitrary
      ]

instance
  ( Era era
  , Arbitrary (TxCert era)
  ) =>
  Arbitrary (AlonzoPlutusPurpose AsIxItem era)
  where
  arbitrary :: Gen (AlonzoPlutusPurpose AsIxItem era)
arbitrary =
    [Gen (AlonzoPlutusPurpose AsIxItem era)]
-> Gen (AlonzoPlutusPurpose AsIxItem era)
forall a. HasCallStack => [Gen a] -> Gen a
oneof
      [ AsIxItem Word32 TxIn -> AlonzoPlutusPurpose AsIxItem era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (AsIxItem Word32 TxIn -> AlonzoPlutusPurpose AsIxItem era)
-> Gen (AsIxItem Word32 TxIn)
-> Gen (AlonzoPlutusPurpose AsIxItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsIxItem Word32 TxIn)
forall a. Arbitrary a => Gen a
arbitrary
      , AsIxItem Word32 PolicyID -> AlonzoPlutusPurpose AsIxItem era
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (AsIxItem Word32 PolicyID -> AlonzoPlutusPurpose AsIxItem era)
-> Gen (AsIxItem Word32 PolicyID)
-> Gen (AlonzoPlutusPurpose AsIxItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsIxItem Word32 PolicyID)
forall a. Arbitrary a => Gen a
arbitrary
      , AsIxItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsIxItem era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (AsIxItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsIxItem era)
-> Gen (AsIxItem Word32 (TxCert era))
-> Gen (AlonzoPlutusPurpose AsIxItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsIxItem Word32 (TxCert era))
forall a. Arbitrary a => Gen a
arbitrary
      , AsIxItem Word32 RewardAccount -> AlonzoPlutusPurpose AsIxItem era
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (AsIxItem Word32 RewardAccount -> AlonzoPlutusPurpose AsIxItem era)
-> Gen (AsIxItem Word32 RewardAccount)
-> Gen (AlonzoPlutusPurpose AsIxItem era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (AsIxItem Word32 RewardAccount)
forall a. Arbitrary a => Gen a
arbitrary
      ]

instance Era era => Arbitrary (AlonzoPlutusPurpose AsIx era) where
  arbitrary :: Gen (AlonzoPlutusPurpose AsIx era)
arbitrary = Gen Word32
forall a. Arbitrary a => Gen a
arbitrary Gen Word32
-> (Word32 -> Gen (AlonzoPlutusPurpose AsIx era))
-> Gen (AlonzoPlutusPurpose AsIx era)
forall a b. Gen a -> (a -> Gen b) -> Gen b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Word32 -> Gen (AlonzoPlutusPurpose AsIx era)
forall era. Word32 -> Gen (AlonzoPlutusPurpose AsIx era)
genAlonzoPlutusPurposePointer

instance
  ( AlonzoEraScript era
  , AlonzoEraPParams era
  , Arbitrary (PParams era)
  , Arbitrary (PlutusPurpose AsIx era)
  ) =>
  Arbitrary (ScriptIntegrity era)
  where
  arbitrary :: Gen (ScriptIntegrity era)
arbitrary =
    Redeemers era
-> TxDats era -> Set LangDepView -> ScriptIntegrity era
forall era.
Redeemers era
-> TxDats era -> Set LangDepView -> ScriptIntegrity era
ScriptIntegrity
      (Redeemers era
 -> TxDats era -> Set LangDepView -> ScriptIntegrity era)
-> Gen (Redeemers era)
-> Gen (TxDats era -> Set LangDepView -> ScriptIntegrity era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Redeemers era)
forall a. Arbitrary a => Gen a
arbitrary
      Gen (TxDats era -> Set LangDepView -> ScriptIntegrity era)
-> Gen (TxDats era) -> Gen (Set LangDepView -> ScriptIntegrity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (TxDats era)
forall a. Arbitrary a => Gen a
arbitrary
      -- FIXME: why singleton? We should generate empty as well as many value sets
      Gen (Set LangDepView -> ScriptIntegrity era)
-> Gen (Set LangDepView) -> Gen (ScriptIntegrity era)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (LangDepView -> Set LangDepView
forall a. a -> Set a
Set.singleton (LangDepView -> Set LangDepView)
-> Gen LangDepView -> Gen (Set LangDepView)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall era.
AlonzoEraPParams era =>
PParams era -> Language -> LangDepView
getLanguageView @era (PParams era -> Language -> LangDepView)
-> Gen (PParams era) -> Gen (Language -> LangDepView)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (PParams era)
forall a. Arbitrary a => Gen a
arbitrary Gen (Language -> LangDepView) -> Gen Language -> Gen LangDepView
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Language
forall a. Arbitrary a => Gen a
arbitrary))

deriving instance Arbitrary CoinPerWord

instance Arbitrary AlonzoGenesis where
  arbitrary :: Gen AlonzoGenesis
arbitrary =
    CoinPerWord
-> CostModels
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> AlonzoGenesis
AlonzoGenesis
      (CoinPerWord
 -> CostModels
 -> Prices
 -> ExUnits
 -> ExUnits
 -> Natural
 -> Natural
 -> Natural
 -> AlonzoGenesis)
-> Gen CoinPerWord
-> Gen
     (CostModels
      -> Prices
      -> ExUnits
      -> ExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoGenesis)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen CoinPerWord
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (CostModels
   -> Prices
   -> ExUnits
   -> ExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoGenesis)
-> Gen CostModels
-> Gen
     (Prices
      -> ExUnits
      -> ExUnits
      -> Natural
      -> Natural
      -> Natural
      -> AlonzoGenesis)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Set Language -> Gen CostModels
genValidCostModels [Item (Set Language)
Language
PlutusV1, Item (Set Language)
Language
PlutusV2]
      Gen
  (Prices
   -> ExUnits
   -> ExUnits
   -> Natural
   -> Natural
   -> Natural
   -> AlonzoGenesis)
-> Gen Prices
-> Gen
     (ExUnits
      -> ExUnits -> Natural -> Natural -> Natural -> AlonzoGenesis)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Prices
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (ExUnits
   -> ExUnits -> Natural -> Natural -> Natural -> AlonzoGenesis)
-> Gen ExUnits
-> Gen (ExUnits -> Natural -> Natural -> Natural -> AlonzoGenesis)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen ExUnits
forall a. Arbitrary a => Gen a
arbitrary
      Gen (ExUnits -> Natural -> Natural -> Natural -> AlonzoGenesis)
-> Gen ExUnits
-> Gen (Natural -> Natural -> Natural -> AlonzoGenesis)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen ExUnits
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Natural -> Natural -> Natural -> AlonzoGenesis)
-> Gen Natural -> Gen (Natural -> Natural -> AlonzoGenesis)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Natural
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Natural -> Natural -> AlonzoGenesis)
-> Gen Natural -> Gen (Natural -> AlonzoGenesis)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Natural
forall a. Arbitrary a => Gen a
arbitrary
      Gen (Natural -> AlonzoGenesis) -> Gen Natural -> Gen AlonzoGenesis
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Natural
forall a. Arbitrary a => Gen a
arbitrary

alwaysSucceeds ::
  forall l era.
  (HasCallStack, EraPlutusTxInfo l era) =>
  Natural ->
  Script era
alwaysSucceeds :: forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Natural -> Script era
alwaysSucceeds = PlutusScript era -> Script era
forall era. AlonzoEraScript era => PlutusScript era -> Script era
fromPlutusScript (PlutusScript era -> Script era)
-> (Natural -> PlutusScript era) -> Natural -> Script era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Plutus l -> PlutusScript era
forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Plutus l -> PlutusScript era
mkSupportedPlutusScript (Plutus l -> PlutusScript era)
-> (Natural -> Plutus l) -> Natural -> PlutusScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (l :: Language). Natural -> Plutus l
alwaysSucceedsPlutus @l

alwaysFails ::
  forall l era.
  (HasCallStack, EraPlutusTxInfo l era) =>
  Natural ->
  Script era
alwaysFails :: forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Natural -> Script era
alwaysFails = PlutusScript era -> Script era
forall era. AlonzoEraScript era => PlutusScript era -> Script era
fromPlutusScript (PlutusScript era -> Script era)
-> (Natural -> PlutusScript era) -> Natural -> Script era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Plutus l -> PlutusScript era
forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Plutus l -> PlutusScript era
mkSupportedPlutusScript (Plutus l -> PlutusScript era)
-> (Natural -> Plutus l) -> Natural -> PlutusScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (l :: Language). Natural -> Plutus l
alwaysFailsPlutus @l

alwaysSucceedsLang ::
  SupportedLanguage era ->
  Natural ->
  PlutusScript era
alwaysSucceedsLang :: forall era. SupportedLanguage era -> Natural -> PlutusScript era
alwaysSucceedsLang SupportedLanguage era
supportedLanguage Natural
n =
  case SupportedLanguage era
supportedLanguage of
    SupportedLanguage SLanguage l
slang -> Plutus l -> PlutusScript era
forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Plutus l -> PlutusScript era
mkSupportedPlutusScript (Plutus l -> PlutusScript era) -> Plutus l -> PlutusScript era
forall a b. (a -> b) -> a -> b
$ SLanguage l -> Plutus l -> Plutus l
forall (l :: Language) (proxy :: Language -> *).
SLanguage l -> proxy l -> proxy l
asSLanguage SLanguage l
slang (Natural -> Plutus l
forall (l :: Language). Natural -> Plutus l
alwaysSucceedsPlutus Natural
n)

alwaysFailsLang ::
  SupportedLanguage era ->
  Natural ->
  PlutusScript era
alwaysFailsLang :: forall era. SupportedLanguage era -> Natural -> PlutusScript era
alwaysFailsLang SupportedLanguage era
supportedLanguage Natural
n =
  case SupportedLanguage era
supportedLanguage of
    SupportedLanguage SLanguage l
slang -> Plutus l -> PlutusScript era
forall (l :: Language) era.
(HasCallStack, EraPlutusTxInfo l era) =>
Plutus l -> PlutusScript era
mkSupportedPlutusScript (Plutus l -> PlutusScript era) -> Plutus l -> PlutusScript era
forall a b. (a -> b) -> a -> b
$ SLanguage l -> Plutus l -> Plutus l
forall (l :: Language) (proxy :: Language -> *).
SLanguage l -> proxy l -> proxy l
asSLanguage SLanguage l
slang (Natural -> Plutus l
forall (l :: Language). Natural -> Plutus l
alwaysFailsPlutus Natural
n)

-- | Partial version of `mkPlutusScript`
mkPlutusScript' ::
  forall era l.
  (HasCallStack, AlonzoEraScript era, PlutusLanguage l) =>
  Plutus l ->
  Script era
mkPlutusScript' :: forall era (l :: Language).
(HasCallStack, AlonzoEraScript era, PlutusLanguage l) =>
Plutus l -> Script era
mkPlutusScript' Plutus l
plutus =
  case Plutus l -> Maybe (PlutusScript era)
forall era (l :: Language).
(AlonzoEraScript era, PlutusLanguage l) =>
Plutus l -> Maybe (PlutusScript era)
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript era)
mkPlutusScript Plutus l
plutus of
    Maybe (PlutusScript era)
Nothing ->
      String -> Script era
forall a. HasCallStack => String -> a
error (String -> Script era) -> String -> Script era
forall a b. (a -> b) -> a -> b
$
        String
"Plutus version " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Language -> String
forall a. Show a => a -> String
show (Plutus l -> Language
forall (l :: Language) (proxy :: Language -> *).
PlutusLanguage l =>
proxy l -> Language
plutusLanguage Plutus l
plutus) String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" is not supported in " String -> String -> String
forall a. [a] -> [a] -> [a]
++ forall era. Era era => String
eraName @era
    Just PlutusScript era
plutusScript -> PlutusScript era -> Script era
forall era. AlonzoEraScript era => PlutusScript era -> Script era
fromPlutusScript PlutusScript era
plutusScript
{-# DEPRECATED mkPlutusScript' "In favor of `fromPlutusScript` . `mkSupportedPlutusScript`" #-}