@@ -4,6 +4,7 @@ module Spec.BotPlutusInterface.CoinSelection (tests) where
44
55import BotPlutusInterface.CoinSelection (selectTxIns , uniqueAssetClasses )
66import BotPlutusInterface.Effects (PABEffect )
7+ import Control.Monad (replicateM )
78import Data.Default (def )
89import Data.Map qualified as Map
910import Data.Set qualified as Set
@@ -18,15 +19,18 @@ import Ledger.Tx (TxIn (..), TxInType (..), TxOut (..), TxOutRef (..))
1819import Ledger.Value (Value )
1920import Ledger.Value qualified as Value
2021import Spec.MockContract (runPABEffectPure )
22+ import Spec.RandomLedger
23+ import Test.QuickCheck (Gen , Property , forAll )
2124import Test.Tasty (TestTree , testGroup )
2225import Test.Tasty.HUnit (Assertion , assertFailure , testCase , (@?=) )
26+ import Test.Tasty.QuickCheck (testProperty )
2327import Prelude
2428
2529tests :: TestTree
2630tests =
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
0 commit comments