From add9e7ec653c7e129d1e3ae4b403a06daa094c00 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 03:41:14 +0000 Subject: [PATCH 01/22] Create function `shrinkTx`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 0e925458028..859fdff441e 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2698,6 +2698,9 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where shrinkCardanoApiTx = case recentEra @era of RecentEraBabbage -> shrinkTxBabbage RecentEraConway -> \_ -> [] -- no shrinker implemented yet + shrinkTx :: Tx era -> [Tx era] + shrinkTx = + shrinkMapBy fromCardanoApiTx toCardanoApiTx shrinkCardanoApiTx instance Arbitrary StdGenSeed where arbitrary = StdGenSeed . fromIntegral @Int <$> arbitrary From dec3175330fec8a55fd65bf4dcacca12532d9663 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 03:47:12 +0000 Subject: [PATCH 02/22] Use `shrinkTx` in shrinker for `PartialTx`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 859fdff441e..9e546d9a757 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2691,8 +2691,8 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where [ partialTx {extraUTxO = extraUTxO'} | extraUTxO' <- shrinkInputResolution extraUTxO ] <> - [ restrictResolution (partialTx {tx = fromCardanoApiTx tx'}) - | tx' <- shrinkCardanoApiTx (toCardanoApiTx tx) + [ restrictResolution (partialTx {tx = tx'}) + | tx' <- shrinkTx tx ] where shrinkCardanoApiTx = case recentEra @era of From f18df77ed4b6f81319e1e12483a66671d3cab387 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 03:47:48 +0000 Subject: [PATCH 03/22] Make `shrinkCardanoApiTx` an internal function of `shrinkTx`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 9e546d9a757..851a956347c 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2695,12 +2695,13 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where | tx' <- shrinkTx tx ] where - shrinkCardanoApiTx = case recentEra @era of - RecentEraBabbage -> shrinkTxBabbage - RecentEraConway -> \_ -> [] -- no shrinker implemented yet shrinkTx :: Tx era -> [Tx era] shrinkTx = shrinkMapBy fromCardanoApiTx toCardanoApiTx shrinkCardanoApiTx + where + shrinkCardanoApiTx = case recentEra @era of + RecentEraBabbage -> shrinkTxBabbage + RecentEraConway -> \_ -> [] -- no shrinker implemented yet instance Arbitrary StdGenSeed where arbitrary = StdGenSeed . fromIntegral @Int <$> arbitrary From cae895f48db7b4407701ecb2acdd9d261aa8ffde Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 03:49:16 +0000 Subject: [PATCH 04/22] Make `shrinkTx` a top-level function. --- .../Internal/Cardano/Write/Tx/BalanceSpec.hs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 851a956347c..f7757eba65b 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2694,14 +2694,6 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where [ restrictResolution (partialTx {tx = tx'}) | tx' <- shrinkTx tx ] - where - shrinkTx :: Tx era -> [Tx era] - shrinkTx = - shrinkMapBy fromCardanoApiTx toCardanoApiTx shrinkCardanoApiTx - where - shrinkCardanoApiTx = case recentEra @era of - RecentEraBabbage -> shrinkTxBabbage - RecentEraConway -> \_ -> [] -- no shrinker implemented yet instance Arbitrary StdGenSeed where arbitrary = StdGenSeed . fromIntegral @Int <$> arbitrary @@ -2879,6 +2871,14 @@ shrinkStrictMaybe = \case SNothing -> [] SJust _ -> [SNothing] +shrinkTx :: forall era. IsRecentEra era => Tx era -> [Tx era] +shrinkTx = + shrinkMapBy fromCardanoApiTx toCardanoApiTx shrinkCardanoApiTx + where + shrinkCardanoApiTx = case recentEra @era of + RecentEraBabbage -> shrinkTxBabbage + RecentEraConway -> \_ -> [] -- no shrinker implemented yet + shrinkTxBabbage :: CardanoApi.Tx CardanoApi.BabbageEra -> [CardanoApi.Tx CardanoApi.BabbageEra] From 721ad53e80fadb164c62a8bc6f95bab5fd86a082 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:20:32 +0000 Subject: [PATCH 05/22] Add type signature to `genTxOut`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index f7757eba65b..0f0d23d35f4 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2678,6 +2678,7 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where genExtraUTxO tx = CardanoApi.UTxO . Map.fromList <$> mapM (\i -> (i,) <$> genTxOut) (txInputs tx) + genTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) genTxOut = -- NOTE: genTxOut does not generate quantities larger than -- `maxBound :: Word64`, however users could supply these. We From 5039834afaa24d6af0f20edc82d5c445ad8498b3 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:20:53 +0000 Subject: [PATCH 06/22] Add function `genTxOutLedger`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 0f0d23d35f4..ec132cf6ee3 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2685,6 +2685,10 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where -- should ideally test what happens, and make it clear what -- code, if any, should validate. CardanoApi.genTxOut (cardanoEra @era) + genTxOutLedger :: Gen (TxOut era) + genTxOutLedger = + CardanoApi.toShelleyTxOut (Write.shelleyBasedEra @era) + <$> genTxOut txInputs tx = fst <$> CardanoApi.txIns content where CardanoApi.Tx (CardanoApi.TxBody content) _ = tx From 1ff039b4f30fdc6629d5a22945fa67a0f7c76b30 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:23:28 +0000 Subject: [PATCH 07/22] Add type signature to `genExtraUTxO`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index ec132cf6ee3..9ef93bf16d1 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2675,6 +2675,9 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where , timelockKeyWitnessCounts = mempty } where + genExtraUTxO + :: CardanoApi.Tx (CardanoApiEra era) + -> Gen (CardanoApi.UTxO (CardanoApiEra era)) genExtraUTxO tx = CardanoApi.UTxO . Map.fromList <$> mapM (\i -> (i,) <$> genTxOut) (txInputs tx) From d40ed19b088b665724553324f96de5780ed7a8c0 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:25:54 +0000 Subject: [PATCH 08/22] Define function `txInputsLedger`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 9ef93bf16d1..038ca85f1ed 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2695,6 +2695,7 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where txInputs tx = fst <$> CardanoApi.txIns content where CardanoApi.Tx (CardanoApi.TxBody content) _ = tx + txInputsLedger tx = tx ^. bodyTxL . inputsTxBodyL shrink partialTx@PartialTx {tx, extraUTxO} = [ partialTx {extraUTxO = extraUTxO'} | extraUTxO' <- shrinkInputResolution extraUTxO From 035409c19774be1b23029110ff14e9b027928bae Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:27:45 +0000 Subject: [PATCH 09/22] Push use of `fromCardanoApiUTxO` into `genExtraUTxO`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 038ca85f1ed..47ede262506 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2670,15 +2670,16 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where extraUTxO <- genExtraUTxO tx return PartialTx { tx = fromCardanoApiTx tx - , extraUTxO = fromCardanoApiUTxO extraUTxO + , extraUTxO , redeemers = [] , timelockKeyWitnessCounts = mempty } where genExtraUTxO :: CardanoApi.Tx (CardanoApiEra era) - -> Gen (CardanoApi.UTxO (CardanoApiEra era)) + -> Gen (UTxO era) genExtraUTxO tx = + fromCardanoApiUTxO . CardanoApi.UTxO . Map.fromList <$> mapM (\i -> (i,) <$> genTxOut) (txInputs tx) genTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) From db3d70d3382be4ae7410ffd0343454179b3b3851 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:31:30 +0000 Subject: [PATCH 10/22] Make `genExtraUTxO` take a ledger `Tx`. --- .../spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 47ede262506..43dba8d85a0 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -278,7 +278,6 @@ import Internal.Cardano.Write.Tx , Value , cardanoEra , fromCardanoApiTx - , fromCardanoApiUTxO , recentEra , serializeTx , toCardanoApiTx @@ -2667,7 +2666,7 @@ instance Arbitrary (MixedSign Value) where instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where arbitrary = do tx <- CardanoApi.genTxForBalancing $ cardanoEra @era - extraUTxO <- genExtraUTxO tx + extraUTxO <- genExtraUTxO (fromCardanoApiTx tx) return PartialTx { tx = fromCardanoApiTx tx , extraUTxO @@ -2676,12 +2675,13 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where } where genExtraUTxO - :: CardanoApi.Tx (CardanoApiEra era) + :: Tx era -> Gen (UTxO era) genExtraUTxO tx = - fromCardanoApiUTxO . - CardanoApi.UTxO . Map.fromList <$> - mapM (\i -> (i,) <$> genTxOut) (txInputs tx) + UTxO . Map.fromList <$> + mapM + (\i -> (i,) <$> genTxOutLedger) + (Set.toList $ txInputsLedger tx) genTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) genTxOut = -- NOTE: genTxOut does not generate quantities larger than From ae0def07f6e3df12d359fbd836967d09760bd031 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:32:23 +0000 Subject: [PATCH 11/22] Delete unused function `txInputs`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 43dba8d85a0..df2a2df8f7a 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2693,9 +2693,6 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where genTxOutLedger = CardanoApi.toShelleyTxOut (Write.shelleyBasedEra @era) <$> genTxOut - txInputs tx = fst <$> CardanoApi.txIns content - where - CardanoApi.Tx (CardanoApi.TxBody content) _ = tx txInputsLedger tx = tx ^. bodyTxL . inputsTxBodyL shrink partialTx@PartialTx {tx, extraUTxO} = [ partialTx {extraUTxO = extraUTxO'} From 90c7979cbd3587c0ceec7c4c04713abd20c7cfa2 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:34:01 +0000 Subject: [PATCH 12/22] Extract out function `genTxForBalancing`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index df2a2df8f7a..30ce10159a3 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2665,7 +2665,7 @@ instance Arbitrary (MixedSign Value) where instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where arbitrary = do - tx <- CardanoApi.genTxForBalancing $ cardanoEra @era + tx <- genTxForBalancing extraUTxO <- genExtraUTxO (fromCardanoApiTx tx) return PartialTx { tx = fromCardanoApiTx tx @@ -2682,6 +2682,9 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where mapM (\i -> (i,) <$> genTxOutLedger) (Set.toList $ txInputsLedger tx) + genTxForBalancing :: Gen (CardanoApi.Tx (CardanoApiEra era)) + genTxForBalancing = + CardanoApi.genTxForBalancing $ cardanoEra @era genTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) genTxOut = -- NOTE: genTxOut does not generate quantities larger than From f6aca08bc661e5020049cf2135ff2036158f3e08 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:35:38 +0000 Subject: [PATCH 13/22] Push use of `fromCardanoApiTx` into `genTxForBalancing`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 30ce10159a3..3b6c7b4b306 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2666,9 +2666,9 @@ instance Arbitrary (MixedSign Value) where instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where arbitrary = do tx <- genTxForBalancing - extraUTxO <- genExtraUTxO (fromCardanoApiTx tx) + extraUTxO <- genExtraUTxO tx return PartialTx - { tx = fromCardanoApiTx tx + { tx , extraUTxO , redeemers = [] , timelockKeyWitnessCounts = mempty @@ -2682,9 +2682,9 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where mapM (\i -> (i,) <$> genTxOutLedger) (Set.toList $ txInputsLedger tx) - genTxForBalancing :: Gen (CardanoApi.Tx (CardanoApiEra era)) + genTxForBalancing :: Gen (Tx era) genTxForBalancing = - CardanoApi.genTxForBalancing $ cardanoEra @era + fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) genTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) genTxOut = -- NOTE: genTxOut does not generate quantities larger than From 4133e63eb6f64c5bd28b095e61cd73712327f63d Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:36:30 +0000 Subject: [PATCH 14/22] Make `genTxOut` an inner function of `genTxOutLedger`. --- .../Internal/Cardano/Write/Tx/BalanceSpec.hs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 3b6c7b4b306..6ea60026dc7 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2685,17 +2685,18 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where genTxForBalancing :: Gen (Tx era) genTxForBalancing = fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) - genTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) - genTxOut = - -- NOTE: genTxOut does not generate quantities larger than - -- `maxBound :: Word64`, however users could supply these. We - -- should ideally test what happens, and make it clear what - -- code, if any, should validate. - CardanoApi.genTxOut (cardanoEra @era) genTxOutLedger :: Gen (TxOut era) genTxOutLedger = CardanoApi.toShelleyTxOut (Write.shelleyBasedEra @era) - <$> genTxOut + <$> genCardanoApiTxOut + where + genCardanoApiTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) + genCardanoApiTxOut = + -- NOTE: genTxOut does not generate quantities larger than + -- `maxBound :: Word64`, however users could supply these. We + -- should ideally test what happens, and make it clear what + -- code, if any, should validate. + CardanoApi.genTxOut (cardanoEra @era) txInputsLedger tx = tx ^. bodyTxL . inputsTxBodyL shrink partialTx@PartialTx {tx, extraUTxO} = [ partialTx {extraUTxO = extraUTxO'} From a38ebb9c2e1dde518472af18509e8c83ce671176 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:37:58 +0000 Subject: [PATCH 15/22] Rename `genTxOutLedger` to `genTxOut`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 6ea60026dc7..558e226abe7 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2680,13 +2680,13 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where genExtraUTxO tx = UTxO . Map.fromList <$> mapM - (\i -> (i,) <$> genTxOutLedger) + (\i -> (i,) <$> genTxOut) (Set.toList $ txInputsLedger tx) genTxForBalancing :: Gen (Tx era) genTxForBalancing = fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) - genTxOutLedger :: Gen (TxOut era) - genTxOutLedger = + genTxOut :: Gen (TxOut era) + genTxOut = CardanoApi.toShelleyTxOut (Write.shelleyBasedEra @era) <$> genCardanoApiTxOut where From 6d529ba29531bc427dd9d7a3c456d3a595bbce0f Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:39:41 +0000 Subject: [PATCH 16/22] Rename `txInputsLedger` to `txInputs`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 558e226abe7..8e148b0e5a4 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2681,7 +2681,7 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where UTxO . Map.fromList <$> mapM (\i -> (i,) <$> genTxOut) - (Set.toList $ txInputsLedger tx) + (Set.toList $ txInputs tx) genTxForBalancing :: Gen (Tx era) genTxForBalancing = fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) @@ -2697,7 +2697,8 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where -- should ideally test what happens, and make it clear what -- code, if any, should validate. CardanoApi.genTxOut (cardanoEra @era) - txInputsLedger tx = tx ^. bodyTxL . inputsTxBodyL + txInputs :: Tx era -> Set TxIn + txInputs tx = tx ^. bodyTxL . inputsTxBodyL shrink partialTx@PartialTx {tx, extraUTxO} = [ partialTx {extraUTxO = extraUTxO'} | extraUTxO' <- shrinkInputResolution extraUTxO From 049056213630693605d0c7dd23084ebeb1f3de0b Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:40:57 +0000 Subject: [PATCH 17/22] Make `genExtraUTxO` more concise. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 8e148b0e5a4..2a3021f91c5 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2674,14 +2674,10 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where , timelockKeyWitnessCounts = mempty } where - genExtraUTxO - :: Tx era - -> Gen (UTxO era) + genExtraUTxO :: Tx era -> Gen (UTxO era) genExtraUTxO tx = UTxO . Map.fromList <$> - mapM - (\i -> (i,) <$> genTxOut) - (Set.toList $ txInputs tx) + mapM (\i -> (i,) <$> genTxOut) (Set.toList $ txInputs tx) genTxForBalancing :: Gen (Tx era) genTxForBalancing = fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) From 61c4ef4d28440db7789d7be8923b73c069e51719 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:48:54 +0000 Subject: [PATCH 18/22] Make `genTxOut` a top-level function. --- .../Internal/Cardano/Write/Tx/BalanceSpec.hs | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 2a3021f91c5..3d11cad313d 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2681,18 +2681,6 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where genTxForBalancing :: Gen (Tx era) genTxForBalancing = fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) - genTxOut :: Gen (TxOut era) - genTxOut = - CardanoApi.toShelleyTxOut (Write.shelleyBasedEra @era) - <$> genCardanoApiTxOut - where - genCardanoApiTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) - genCardanoApiTxOut = - -- NOTE: genTxOut does not generate quantities larger than - -- `maxBound :: Word64`, however users could supply these. We - -- should ideally test what happens, and make it clear what - -- code, if any, should validate. - CardanoApi.genTxOut (cardanoEra @era) txInputs :: Tx era -> Set TxIn txInputs tx = tx ^. bodyTxL . inputsTxBodyL shrink partialTx@PartialTx {tx, extraUTxO} = @@ -2820,6 +2808,19 @@ instance forall era. IsRecentEra era => Arbitrary (Wallet era) where shrinkEntry _ = [] +genTxOut :: forall era. IsRecentEra era => Gen (TxOut era) +genTxOut = + CardanoApi.toShelleyTxOut (Write.shelleyBasedEra @era) + <$> genCardanoApiTxOut + where + genCardanoApiTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) + genCardanoApiTxOut = + -- NOTE: genTxOut does not generate quantities larger than + -- `maxBound :: Word64`, however users could supply these. We + -- should ideally test what happens, and make it clear what + -- code, if any, should validate. + CardanoApi.genTxOut (cardanoEra @era) + -- | For writing shrinkers in the style of https://stackoverflow.com/a/14006575 prependOriginal :: (t -> [t]) -> t -> [t] prependOriginal shrinker x = x : shrinker x From 04d3da94d89018022cca7b972d73257e67348b5d Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:50:00 +0000 Subject: [PATCH 19/22] Inline definition of `genCardanoApiTxOut`. --- .../spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 3d11cad313d..3f642af6c11 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2810,16 +2810,12 @@ instance forall era. IsRecentEra era => Arbitrary (Wallet era) where genTxOut :: forall era. IsRecentEra era => Gen (TxOut era) genTxOut = + -- NOTE: genTxOut does not generate quantities larger than + -- `maxBound :: Word64`, however users could supply these. We + -- should ideally test what happens, and make it clear what + -- code, if any, should validate. CardanoApi.toShelleyTxOut (Write.shelleyBasedEra @era) - <$> genCardanoApiTxOut - where - genCardanoApiTxOut :: Gen (CardanoApi.TxOut ctx (CardanoApiEra era)) - genCardanoApiTxOut = - -- NOTE: genTxOut does not generate quantities larger than - -- `maxBound :: Word64`, however users could supply these. We - -- should ideally test what happens, and make it clear what - -- code, if any, should validate. - CardanoApi.genTxOut (cardanoEra @era) + <$> CardanoApi.genTxOut (cardanoEra @era) -- | For writing shrinkers in the style of https://stackoverflow.com/a/14006575 prependOriginal :: (t -> [t]) -> t -> [t] From fad616e62e35a60ac5a0b200dfdded5907634f37 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:51:11 +0000 Subject: [PATCH 20/22] Make `genTxForBalancing` a top-level function. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 3f642af6c11..e29b96e8f50 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2678,9 +2678,6 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where genExtraUTxO tx = UTxO . Map.fromList <$> mapM (\i -> (i,) <$> genTxOut) (Set.toList $ txInputs tx) - genTxForBalancing :: Gen (Tx era) - genTxForBalancing = - fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) txInputs :: Tx era -> Set TxIn txInputs tx = tx ^. bodyTxL . inputsTxBodyL shrink partialTx@PartialTx {tx, extraUTxO} = @@ -2808,6 +2805,10 @@ instance forall era. IsRecentEra era => Arbitrary (Wallet era) where shrinkEntry _ = [] +genTxForBalancing :: forall era. IsRecentEra era => Gen (Tx era) +genTxForBalancing = + fromCardanoApiTx <$> CardanoApi.genTxForBalancing (cardanoEra @era) + genTxOut :: forall era. IsRecentEra era => Gen (TxOut era) genTxOut = -- NOTE: genTxOut does not generate quantities larger than From 918bd0ec280a8c7aa065f9ed20fd7f5f63d5e9a7 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:52:46 +0000 Subject: [PATCH 21/22] Make `txInputs` an inner definition of `genExtraUTxO`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index e29b96e8f50..4adf5f39642 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2677,9 +2677,10 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where genExtraUTxO :: Tx era -> Gen (UTxO era) genExtraUTxO tx = UTxO . Map.fromList <$> - mapM (\i -> (i,) <$> genTxOut) (Set.toList $ txInputs tx) - txInputs :: Tx era -> Set TxIn - txInputs tx = tx ^. bodyTxL . inputsTxBodyL + mapM (\i -> (i,) <$> genTxOut) (Set.toList txInputs) + where + txInputs :: Set TxIn + txInputs = tx ^. bodyTxL . inputsTxBodyL shrink partialTx@PartialTx {tx, extraUTxO} = [ partialTx {extraUTxO = extraUTxO'} | extraUTxO' <- shrinkInputResolution extraUTxO From c4a8e694ace0869c673cade3d3622d18534a5c04 Mon Sep 17 00:00:00 2001 From: Jonathan Knowles Date: Mon, 22 Apr 2024 05:55:51 +0000 Subject: [PATCH 22/22] Shorten definition of `arbitrary` for `PartialTx`. --- .../test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs index 4adf5f39642..170836acdcc 100644 --- a/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs +++ b/lib/balance-tx/test/spec/Internal/Cardano/Write/Tx/BalanceSpec.hs @@ -2667,12 +2667,9 @@ instance forall era. IsRecentEra era => Arbitrary (PartialTx era) where arbitrary = do tx <- genTxForBalancing extraUTxO <- genExtraUTxO tx - return PartialTx - { tx - , extraUTxO - , redeemers = [] - , timelockKeyWitnessCounts = mempty - } + let redeemers = [] + let timelockKeyWitnessCounts = mempty + pure PartialTx {tx, extraUTxO, redeemers, timelockKeyWitnessCounts} where genExtraUTxO :: Tx era -> Gen (UTxO era) genExtraUTxO tx =