@@ -63,6 +63,7 @@ module Test.Gen.Cardano.Api.Typed
63
63
, genShelleyWitness
64
64
, genShelleyWitnessSigningKey
65
65
, genSignedQuantity
66
+ , genSignedNonZeroQuantity
66
67
, genSigningKey
67
68
, genSlotNo
68
69
, genStakeAddress
@@ -81,6 +82,7 @@ module Test.Gen.Cardano.Api.Typed
81
82
, genTxMetadataInEra
82
83
, genTxMintValue
83
84
, genLovelace
85
+ , genPositiveLovelace
84
86
, genValue
85
87
, genValueDefault
86
88
, genVerificationKey
@@ -100,6 +102,7 @@ module Test.Gen.Cardano.Api.Typed
100
102
, genTxValidityUpperBound
101
103
, genTxWithdrawals
102
104
, genUnsignedQuantity
105
+ , genPositiveQuantity
103
106
, genValueForMinting
104
107
, genValueForTxOut
105
108
, genWitnesses
@@ -179,6 +182,9 @@ genKESPeriod = KESPeriod <$> Gen.word Range.constantBounded
179
182
genLovelace :: Gen Lovelace
180
183
genLovelace = Lovelace <$> Gen. integral (Range. linear 0 5000 )
181
184
185
+ genPositiveLovelace :: Gen Lovelace
186
+ genPositiveLovelace = Lovelace <$> Gen. integral (Range. linear 1 5000 )
187
+
182
188
183
189
----------------------------------------------------------------------------
184
190
-- SimpleScript generators
@@ -333,9 +339,19 @@ genQuantity range = fromInteger <$> Gen.integral range
333
339
genSignedQuantity :: Gen Quantity
334
340
genSignedQuantity = genQuantity (Range. constantFrom 0 (- 2 ) 2 )
335
341
342
+ -- | Generate a positive or negative, but not zero quantity.
343
+ genSignedNonZeroQuantity :: Gen Quantity
344
+ genSignedNonZeroQuantity =
345
+ Gen. choice [ genQuantity (Range. constant (- 2 ) (- 1 ))
346
+ , genQuantity (Range. constant 1 2 )
347
+ ]
348
+
336
349
genUnsignedQuantity :: Gen Quantity
337
350
genUnsignedQuantity = genQuantity (Range. constant 0 2 )
338
351
352
+ genPositiveQuantity :: Gen Quantity
353
+ genPositiveQuantity = genQuantity (Range. constant 1 2 )
354
+
339
355
genValue :: Gen AssetId -> Gen Quantity -> Gen Value
340
356
genValue genAId genQuant =
341
357
valueFromList <$>
@@ -344,20 +360,26 @@ genValue genAId genQuant =
344
360
345
361
-- | Generate a 'Value' with any asset ID and a positive or negative quantity.
346
362
genValueDefault :: Gen Value
347
- genValueDefault = genValue genAssetId genSignedQuantity
363
+ genValueDefault = genValue genAssetId genSignedNonZeroQuantity
348
364
349
365
-- | Generate a 'Value' suitable for minting, i.e. non-ADA asset ID and a
350
366
-- positive or negative quantity.
351
367
genValueForMinting :: Gen Value
352
- genValueForMinting = genValue genAssetIdNoAda genSignedQuantity
368
+ genValueForMinting = genValue genAssetIdNoAda genSignedNonZeroQuantity
353
369
where
354
370
genAssetIdNoAda :: Gen AssetId
355
371
genAssetIdNoAda = AssetId <$> genPolicyId <*> genAssetName
356
372
357
373
-- | Generate a 'Value' suitable for usage in a transaction output, i.e. any
358
374
-- asset ID and a positive quantity.
359
375
genValueForTxOut :: Gen Value
360
- genValueForTxOut = genValue genAssetId genUnsignedQuantity
376
+ genValueForTxOut = do
377
+ -- Generate a potentially empty list with multi assets
378
+ val <- genValue genAssetId genPositiveQuantity
379
+ -- Generate at least one positive ADA, without it Value in TxOut makes no sense
380
+ -- and will fail deserialization starting with ConwayEra
381
+ ada <- (,) AdaAssetId <$> genPositiveQuantity
382
+ pure $ valueFromList (ada : valueToList val)
361
383
362
384
363
385
-- Note that we expect to sometimes generate duplicate policy id keys since we
@@ -464,7 +486,7 @@ genTxIndex = TxIx . fromIntegral <$> Gen.word16 Range.constantBounded
464
486
genTxOutValue :: CardanoEra era -> Gen (TxOutValue era )
465
487
genTxOutValue era =
466
488
case multiAssetSupportedInEra era of
467
- Left adaOnlyInEra -> TxOutAdaOnly adaOnlyInEra <$> genLovelace
489
+ Left adaOnlyInEra -> TxOutAdaOnly adaOnlyInEra <$> genPositiveLovelace
468
490
Right multiAssetInEra -> TxOutValue multiAssetInEra <$> genValueForTxOut
469
491
470
492
genTxOutTxContext :: CardanoEra era -> Gen (TxOut CtxTx era )
@@ -660,7 +682,7 @@ genTxTotalCollateral era =
660
682
case totalAndReturnCollateralSupportedInEra era of
661
683
Nothing -> return TxTotalCollateralNone
662
684
Just supp ->
663
- TxTotalCollateral supp <$> genLovelace
685
+ TxTotalCollateral supp <$> genPositiveLovelace
664
686
665
687
genTxFee :: CardanoEra era -> Gen (TxFee era )
666
688
genTxFee era =
0 commit comments