{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Cardano.Ledger.Dijkstra.Arbitrary () where

import Cardano.Ledger.Allegra.Scripts (
  pattern RequireTimeExpire,
  pattern RequireTimeStart,
 )
import Cardano.Ledger.BaseTypes (StrictMaybe)
import Cardano.Ledger.Dijkstra (DijkstraEra)
import Cardano.Ledger.Dijkstra.Core
import Cardano.Ledger.Dijkstra.Genesis (DijkstraGenesis (..))
import Cardano.Ledger.Dijkstra.PParams (DijkstraPParams, UpgradeDijkstraPParams)
import Cardano.Ledger.Dijkstra.Scripts
import Cardano.Ledger.Dijkstra.Transition (TransitionConfig (..))
import Cardano.Ledger.Dijkstra.Tx (Tx (..))
import Cardano.Ledger.Dijkstra.TxBody (TxBody (..))
import Cardano.Ledger.Dijkstra.TxCert
import Cardano.Ledger.Shelley.Scripts (
  pattern RequireSignature,
 )
import Data.Functor.Identity (Identity)
import Generic.Random (genericArbitraryU)
import Test.Cardano.Ledger.Allegra.Arbitrary (maxTimelockDepth)
import Test.Cardano.Ledger.Common
import Test.Cardano.Ledger.Conway.Arbitrary ()
import Test.Cardano.Ledger.Shelley.Arbitrary (sizedNativeScriptGens)

instance Arbitrary (DijkstraPParams Identity DijkstraEra) where
  arbitrary :: Gen (DijkstraPParams Identity DijkstraEra)
arbitrary = Gen (DijkstraPParams Identity DijkstraEra)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

instance Arbitrary (DijkstraPParams StrictMaybe DijkstraEra) where
  arbitrary :: Gen (DijkstraPParams StrictMaybe DijkstraEra)
arbitrary = Gen (DijkstraPParams StrictMaybe DijkstraEra)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

instance Arbitrary (TxBody DijkstraEra) where
  arbitrary :: Gen (TxBody DijkstraEra)
arbitrary =
    Set TxIn
-> Set TxIn
-> Set TxIn
-> StrictSeq (Sized (TxOut DijkstraEra))
-> StrictMaybe (Sized (TxOut DijkstraEra))
-> StrictMaybe Coin
-> OSet (TxCert DijkstraEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> OSet (Credential 'Guard)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> VotingProcedures DijkstraEra
-> OSet (ProposalProcedure DijkstraEra)
-> StrictMaybe Coin
-> Coin
-> TxBody DijkstraEra
Set TxIn
-> Set TxIn
-> Set TxIn
-> StrictSeq (Sized (BabbageTxOut DijkstraEra))
-> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
-> StrictMaybe Coin
-> OSet (DijkstraTxCert DijkstraEra)
-> Withdrawals
-> Coin
-> ValidityInterval
-> OSet (Credential 'Guard)
-> MultiAsset
-> StrictMaybe ScriptIntegrityHash
-> StrictMaybe TxAuxDataHash
-> StrictMaybe Network
-> VotingProcedures DijkstraEra
-> OSet (ProposalProcedure DijkstraEra)
-> StrictMaybe Coin
-> Coin
-> TxBody DijkstraEra
DijkstraTxBody
      (Set TxIn
 -> Set TxIn
 -> Set TxIn
 -> StrictSeq (Sized (BabbageTxOut DijkstraEra))
 -> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
 -> StrictMaybe Coin
 -> OSet (DijkstraTxCert DijkstraEra)
 -> Withdrawals
 -> Coin
 -> ValidityInterval
 -> OSet (Credential 'Guard)
 -> MultiAsset
 -> StrictMaybe ScriptIntegrityHash
 -> StrictMaybe TxAuxDataHash
 -> StrictMaybe Network
 -> VotingProcedures DijkstraEra
 -> OSet (ProposalProcedure DijkstraEra)
 -> StrictMaybe Coin
 -> Coin
 -> TxBody DijkstraEra)
-> Gen (Set TxIn)
-> Gen
     (Set TxIn
      -> Set TxIn
      -> StrictSeq (Sized (BabbageTxOut DijkstraEra))
      -> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
      -> StrictMaybe Coin
      -> OSet (DijkstraTxCert DijkstraEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
   -> Set TxIn
   -> StrictSeq (Sized (BabbageTxOut DijkstraEra))
   -> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
   -> StrictMaybe Coin
   -> OSet (DijkstraTxCert DijkstraEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (Set TxIn)
-> Gen
     (Set TxIn
      -> StrictSeq (Sized (BabbageTxOut DijkstraEra))
      -> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
      -> StrictMaybe Coin
      -> OSet (DijkstraTxCert DijkstraEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
  (Set TxIn
   -> StrictSeq (Sized (BabbageTxOut DijkstraEra))
   -> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
   -> StrictMaybe Coin
   -> OSet (DijkstraTxCert DijkstraEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (Set TxIn)
-> Gen
     (StrictSeq (Sized (BabbageTxOut DijkstraEra))
      -> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
      -> StrictMaybe Coin
      -> OSet (DijkstraTxCert DijkstraEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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 (Sized (BabbageTxOut DijkstraEra))
   -> StrictMaybe (Sized (BabbageTxOut DijkstraEra))
   -> StrictMaybe Coin
   -> OSet (DijkstraTxCert DijkstraEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (StrictSeq (Sized (BabbageTxOut DijkstraEra)))
-> Gen
     (StrictMaybe (Sized (BabbageTxOut DijkstraEra))
      -> StrictMaybe Coin
      -> OSet (DijkstraTxCert DijkstraEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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 (Sized (BabbageTxOut DijkstraEra)))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe (Sized (BabbageTxOut DijkstraEra))
   -> StrictMaybe Coin
   -> OSet (DijkstraTxCert DijkstraEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (StrictMaybe (Sized (BabbageTxOut DijkstraEra)))
-> Gen
     (StrictMaybe Coin
      -> OSet (DijkstraTxCert DijkstraEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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 (Sized (BabbageTxOut DijkstraEra)))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (StrictMaybe Coin
   -> OSet (DijkstraTxCert DijkstraEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (StrictMaybe Coin)
-> Gen
     (OSet (DijkstraTxCert DijkstraEra)
      -> Withdrawals
      -> Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
  (OSet (DijkstraTxCert DijkstraEra)
   -> Withdrawals
   -> Coin
   -> ValidityInterval
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (OSet (DijkstraTxCert DijkstraEra))
-> Gen
     (Withdrawals
      -> Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (OSet (DijkstraTxCert DijkstraEra))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (Withdrawals
   -> Coin
   -> ValidityInterval
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen Withdrawals
-> Gen
     (Coin
      -> ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen Coin
-> Gen
     (ValidityInterval
      -> OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
   -> OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen ValidityInterval
-> Gen
     (OSet (Credential 'Guard)
      -> MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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 ValidityInterval -> Gen ValidityInterval
forall a. (Int -> Int) -> Gen a -> Gen a
scale (Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
15) Gen ValidityInterval
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (OSet (Credential 'Guard)
   -> MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (OSet (Credential 'Guard))
-> Gen
     (MultiAsset
      -> StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (OSet (Credential 'Guard))
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (MultiAsset
   -> StrictMaybe ScriptIntegrityHash
   -> StrictMaybe TxAuxDataHash
   -> StrictMaybe Network
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen MultiAsset
-> Gen
     (StrictMaybe ScriptIntegrityHash
      -> StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (StrictMaybe ScriptIntegrityHash)
-> Gen
     (StrictMaybe TxAuxDataHash
      -> StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (StrictMaybe TxAuxDataHash)
-> Gen
     (StrictMaybe Network
      -> VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
   -> VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (StrictMaybe Network)
-> Gen
     (VotingProcedures DijkstraEra
      -> OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin
      -> Coin
      -> TxBody DijkstraEra)
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
      Gen
  (VotingProcedures DijkstraEra
   -> OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin
   -> Coin
   -> TxBody DijkstraEra)
-> Gen (VotingProcedures DijkstraEra)
-> Gen
     (OSet (ProposalProcedure DijkstraEra)
      -> StrictMaybe Coin -> Coin -> TxBody DijkstraEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (VotingProcedures DijkstraEra)
forall a. Arbitrary a => Gen a
arbitrary
      Gen
  (OSet (ProposalProcedure DijkstraEra)
   -> StrictMaybe Coin -> Coin -> TxBody DijkstraEra)
-> Gen (OSet (ProposalProcedure DijkstraEra))
-> Gen (StrictMaybe Coin -> Coin -> TxBody DijkstraEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (OSet (ProposalProcedure DijkstraEra))
forall a. Arbitrary a => Gen a
arbitrary
      Gen (StrictMaybe Coin -> Coin -> TxBody DijkstraEra)
-> Gen (StrictMaybe Coin) -> Gen (Coin -> TxBody DijkstraEra)
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 (Coin -> TxBody DijkstraEra)
-> Gen Coin -> Gen (TxBody DijkstraEra)
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

instance Arbitrary (UpgradeDijkstraPParams Identity DijkstraEra) where
  arbitrary :: Gen (UpgradeDijkstraPParams Identity DijkstraEra)
arbitrary = Gen (UpgradeDijkstraPParams Identity DijkstraEra)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

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

instance Arbitrary (TransitionConfig DijkstraEra) where
  arbitrary :: Gen (TransitionConfig DijkstraEra)
arbitrary = DijkstraGenesis
-> TransitionConfig ConwayEra -> TransitionConfig DijkstraEra
DijkstraTransitionConfig (DijkstraGenesis
 -> TransitionConfig ConwayEra -> TransitionConfig DijkstraEra)
-> Gen DijkstraGenesis
-> Gen (TransitionConfig ConwayEra -> TransitionConfig DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen DijkstraGenesis
forall a. Arbitrary a => Gen a
arbitrary Gen (TransitionConfig ConwayEra -> TransitionConfig DijkstraEra)
-> Gen (TransitionConfig ConwayEra)
-> Gen (TransitionConfig DijkstraEra)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (TransitionConfig ConwayEra)
forall a. Arbitrary a => Gen a
arbitrary

instance
  (forall a b. (Arbitrary a, Arbitrary b) => Arbitrary (f a b)) =>
  Arbitrary (DijkstraPlutusPurpose f DijkstraEra)
  where
  arbitrary :: Gen (DijkstraPlutusPurpose f DijkstraEra)
arbitrary = Gen (DijkstraPlutusPurpose f DijkstraEra)
forall a. (GArbitrary UnsizedOpts a, GUniformWeight a) => Gen a
genericArbitraryU

instance Arbitrary (DijkstraNativeScript DijkstraEra) where
  arbitrary :: Gen (DijkstraNativeScript DijkstraEra)
arbitrary = Int -> Gen (NativeScript DijkstraEra)
forall era. DijkstraEraScript era => Int -> Gen (NativeScript era)
sizedDijkstraNativeScript Int
maxTimelockDepth

sizedDijkstraNativeScript ::
  DijkstraEraScript era =>
  Int ->
  Gen (NativeScript era)
sizedDijkstraNativeScript :: forall era. DijkstraEraScript era => Int -> Gen (NativeScript era)
sizedDijkstraNativeScript Int
0 = KeyHash 'Witness -> NativeScript era
forall era.
ShelleyEraScript era =>
KeyHash 'Witness -> NativeScript era
RequireSignature (KeyHash 'Witness -> NativeScript era)
-> Gen (KeyHash 'Witness) -> Gen (NativeScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (KeyHash 'Witness)
forall a. Arbitrary a => Gen a
arbitrary
sizedDijkstraNativeScript Int
n =
  [Gen (NativeScript era)] -> Gen (NativeScript era)
forall a. HasCallStack => [Gen a] -> Gen a
oneof ([Gen (NativeScript era)] -> Gen (NativeScript era))
-> [Gen (NativeScript era)] -> Gen (NativeScript era)
forall a b. (a -> b) -> a -> b
$
    Int -> [Gen (NativeScript era)]
forall era. ShelleyEraScript era => Int -> [Gen (NativeScript era)]
sizedNativeScriptGens Int
n
      [Gen (NativeScript era)]
-> [Gen (NativeScript era)] -> [Gen (NativeScript era)]
forall a. Semigroup a => a -> a -> a
<> [ SlotNo -> NativeScript era
forall era. AllegraEraScript era => SlotNo -> NativeScript era
RequireTimeStart (SlotNo -> NativeScript era)
-> Gen SlotNo -> Gen (NativeScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen SlotNo
forall a. Arbitrary a => Gen a
arbitrary
         , SlotNo -> NativeScript era
forall era. AllegraEraScript era => SlotNo -> NativeScript era
RequireTimeExpire (SlotNo -> NativeScript era)
-> Gen SlotNo -> Gen (NativeScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen SlotNo
forall a. Arbitrary a => Gen a
arbitrary
         , Credential 'Guard -> NativeScript era
forall era.
DijkstraEraScript era =>
Credential 'Guard -> NativeScript era
RequireGuard (Credential 'Guard -> NativeScript era)
-> Gen (Credential 'Guard) -> Gen (NativeScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Credential 'Guard)
forall a. Arbitrary a => Gen a
arbitrary
         ]

deriving newtype instance Arbitrary (Tx DijkstraEra)

instance Era era => Arbitrary (DijkstraTxCert era) where
  arbitrary :: Gen (DijkstraTxCert era)
arbitrary =
    [Gen (DijkstraTxCert era)] -> Gen (DijkstraTxCert era)
forall a. HasCallStack => [Gen a] -> Gen a
oneof
      [ DijkstraDelegCert -> DijkstraTxCert era
forall era. DijkstraDelegCert -> DijkstraTxCert era
DijkstraTxCertDeleg (DijkstraDelegCert -> DijkstraTxCert era)
-> Gen DijkstraDelegCert -> Gen (DijkstraTxCert era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen DijkstraDelegCert
forall a. Arbitrary a => Gen a
arbitrary
      , PoolCert -> DijkstraTxCert era
forall era. PoolCert -> DijkstraTxCert era
DijkstraTxCertPool (PoolCert -> DijkstraTxCert era)
-> Gen PoolCert -> Gen (DijkstraTxCert era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen PoolCert
forall a. Arbitrary a => Gen a
arbitrary
      , ConwayGovCert -> DijkstraTxCert era
forall era. ConwayGovCert -> DijkstraTxCert era
DijkstraTxCertGov (ConwayGovCert -> DijkstraTxCert era)
-> Gen ConwayGovCert -> Gen (DijkstraTxCert era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen ConwayGovCert
forall a. Arbitrary a => Gen a
arbitrary
      ]

instance Arbitrary DijkstraDelegCert where
  arbitrary :: Gen DijkstraDelegCert
arbitrary = StakeCredential -> Delegatee -> Coin -> DijkstraDelegCert
DijkstraRegDelegCert (StakeCredential -> Delegatee -> Coin -> DijkstraDelegCert)
-> Gen StakeCredential
-> Gen (Delegatee -> Coin -> DijkstraDelegCert)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen StakeCredential
forall a. Arbitrary a => Gen a
arbitrary Gen (Delegatee -> Coin -> DijkstraDelegCert)
-> Gen Delegatee -> Gen (Coin -> DijkstraDelegCert)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Delegatee
forall a. Arbitrary a => Gen a
arbitrary Gen (Coin -> DijkstraDelegCert)
-> Gen Coin -> Gen DijkstraDelegCert
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