Skip to content

Commit 20fc454

Browse files
committed
Fix rebase issues
1 parent d42b963 commit 20fc454

File tree

2 files changed

+1240
-1183
lines changed

2 files changed

+1240
-1183
lines changed

plutus-core/cost-model/budgeting-bench/Benchmarks/Values.hs

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import Common
1010
import Control.Monad (replicateM)
1111
import Criterion.Main (Benchmark)
1212
import Data.ByteString (ByteString)
13-
import PlutusCore (DefaultFun (LookupCoin, UnValueData, ValueContains, ValueData))
13+
import PlutusCore (DefaultFun (InsertCoin, LookupCoin, UnValueData, ValueContains, ValueData))
1414
import PlutusCore.Evaluation.Machine.ExMemoryUsage (LogValueOuterOrMaxInner (..),
15-
ValueTotalSize (..))
15+
ValueOuterOrMaxInner (..), ValueTotalSize (..))
1616
import PlutusCore.Value (K, Value)
1717
import PlutusCore.Value qualified as Value
1818
import System.Random.Stateful (StatefulGen, StdGen, runStateGen_, uniformByteStringM, uniformRM)
@@ -205,6 +205,58 @@ unValueDataBenchmark :: StdGen -> Benchmark
205205
unValueDataBenchmark gen =
206206
createOneTermBuiltinBench UnValueData [] (Value.valueData <$> generateTestValues gen)
207207

208+
-- insertCoin :: ByteString -> ByteString -> Integer -> Value -> Value
209+
----------------------------------------------------------------------------------------------------
210+
-- InsertCoin --------------------------------------------------------------------------------------
211+
212+
insertCoinBenchmark :: StdGen -> Benchmark
213+
insertCoinBenchmark gen =
214+
createFourTermBuiltinBenchElementwiseWithWrappers
215+
(id, id, id, ValueOuterOrMaxInner) -- Wrap Value argument to report outer/max inner size
216+
InsertCoin -- the builtin fun
217+
[] -- no type arguments needed (monomorphic builtin)
218+
(insertCoinArgs gen) -- the argument combos to generate benchmarks for
219+
220+
insertCoinArgs :: StdGen -> [(ByteString, ByteString, Integer, Value)]
221+
insertCoinArgs gen = runStateGen_ gen $ \(g :: g) -> do
222+
-- Add search keys to common test values
223+
let testValues = generateTestValues gen
224+
commonWithKeys <- mapM (withSearchKeys g . pure) testValues
225+
226+
-- Additional tests specific to insertCoin
227+
let valueSizes = [(100, 10), (500, 20), (1_000, 50), (2_000, 100)]
228+
additionalTests <-
229+
sequence $
230+
concat
231+
[ -- Value size tests (number of policies × tokens per policy)
232+
[ generateInsertTest g numPolicies tokensPerPolicy
233+
| (numPolicies, tokensPerPolicy) <- valueSizes
234+
]
235+
, -- Budget-constrained tests (at 30KB limit)
236+
[generateBudgetTest g 30_000]
237+
, -- Additional random tests for parameter spread
238+
replicate 50 (generateRandomInsertTest g)
239+
]
240+
241+
pure $ commonWithKeys ++ additionalTests
242+
243+
-- | Generate insert test with specified parameters
244+
generateInsertTest
245+
:: (StatefulGen g m)
246+
=> g
247+
-> Int -- Number of policies
248+
-> Int -- Tokens per policy
249+
-> m (ByteString, ByteString, Value)
250+
generateInsertTest g numPolicies tokensPerPolicy =
251+
withSearchKeys g (generateConstrainedValue numPolicies tokensPerPolicy g)
252+
253+
-- | Generate random insert test with varied parameters for better spread
254+
generateRandomInsertTest :: (StatefulGen g m) => g -> m (ByteString, ByteString, Value)
255+
generateRandomInsertTest g = do
256+
numPolicies <- uniformRM (1, 2_000) g
257+
tokensPerPolicy <- uniformRM (1, 1_000) g
258+
withSearchKeys g (generateConstrainedValue numPolicies tokensPerPolicy g)
259+
208260
----------------------------------------------------------------------------------------------------
209261
-- Value Generators --------------------------------------------------------------------------------
210262

0 commit comments

Comments
 (0)