Skip to content

Commit 74995cf

Browse files
committed
add propert test for unique asset classes
1 parent ec9f324 commit 74995cf

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

test/Spec/BotPlutusInterface/CoinSelection.hs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Spec.BotPlutusInterface.CoinSelection (tests) where
44

55
import BotPlutusInterface.CoinSelection (selectTxIns, uniqueAssetClasses)
66
import BotPlutusInterface.Effects (PABEffect)
7+
import Control.Monad (replicateM)
78
import Data.Default (def)
89
import Data.Map qualified as Map
910
import Data.Set qualified as Set
@@ -18,15 +19,18 @@ import Ledger.Tx (TxIn (..), TxInType (..), TxOut (..), TxOutRef (..))
1819
import Ledger.Value (Value)
1920
import Ledger.Value qualified as Value
2021
import Spec.MockContract (runPABEffectPure)
22+
import Spec.RandomLedger
23+
import Test.QuickCheck (Gen, Property, forAll)
2124
import Test.Tasty (TestTree, testGroup)
2225
import Test.Tasty.HUnit (Assertion, assertFailure, testCase, (@?=))
26+
import Test.Tasty.QuickCheck (testProperty)
2327
import Prelude
2428

2529
tests :: TestTree
2630
tests =
2731
testGroup
2832
"BotPlutusInterface.CoinSelection"
29-
[ testCase "Have All unique assetClasses" validAssetClasses
33+
[ testProperty "Have All unique assetClasses" assertUniqueAssetClasses
3034
, testCase "Coin selection greedy Approx" greedyApprox
3135
]
3236

@@ -96,3 +100,15 @@ greedyApprox = do
96100
case eresult of
97101
Left e -> assertFailure (Text.unpack e)
98102
Right result -> result @?= expectedResults
103+
104+
assertUniqueAssetClasses :: Property
105+
assertUniqueAssetClasses = forAll isSubsetGen id
106+
where
107+
isSubsetGen :: Gen Bool
108+
isSubsetGen =
109+
do
110+
allAcs <- randomAssetClasses 30
111+
values <- replicateM 10 (txOutValue <$> randomTxOut 10 allAcs)
112+
113+
let uniqueAcs = uniqueAssetClasses values
114+
return $ Set.isSubsetOf uniqueAcs allAcs

test/Spec/RandomLedger.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{-# OPTIONS_GHC -Wno-orphans #-}
22

33
module Spec.RandomLedger (
4-
allAssetClasses,
4+
randomAssetClasses,
55
randomValue,
66
randomTxOut,
77
randomTxOuts,
@@ -19,13 +19,13 @@ import GHC.Natural (Natural)
1919
import Ledger.Tx (TxOut (..), TxOutRef (..))
2020
import Ledger.Value (AssetClass (AssetClass), Value)
2121
import Ledger.Value qualified as Value
22-
import Test.QuickCheck (Arbitrary (arbitrary), Gen, Property, elements, forAll, listOf, property, resize)
22+
import Test.QuickCheck (Arbitrary (arbitrary), Gen, elements)
2323
import Prelude
2424

2525
deriving newtype instance Arbitrary AssetClass
2626

27-
allAssetClasses :: Int -> Gen (Set AssetClass)
28-
allAssetClasses n = Set.fromList <$> resize n (listOf arbitrary)
27+
randomAssetClasses :: Int -> Gen (Set AssetClass)
28+
randomAssetClasses n = Set.fromList <$> replicateM n (arbitrary @AssetClass)
2929

3030
randomValue :: Int -> Set AssetClass -> Gen Value
3131
randomValue samplesize assetclasses =

0 commit comments

Comments
 (0)