From 5a6c9917d0aaa04e6c5e2f8ba7675fb003770f8e Mon Sep 17 00:00:00 2001 From: zeme Date: Thu, 23 Apr 2026 12:10:51 +0200 Subject: [PATCH] Use independent seeds in makeSizedByteStrings `makeSizedByteStrings` used the same `H.Seed` for every element, so each generated ByteString was a prefix of the same deterministic byte sequence. Use `unfoldr (Just . Seed.split)` to produce a stream of independent SplitMix seeds instead, giving uncorrelated content across sizes. --- plutus-core/cost-model/budgeting-bench/Generators.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plutus-core/cost-model/budgeting-bench/Generators.hs b/plutus-core/cost-model/budgeting-bench/Generators.hs index b666c74e801..067223087f4 100644 --- a/plutus-core/cost-model/budgeting-bench/Generators.hs +++ b/plutus-core/cost-model/budgeting-bench/Generators.hs @@ -12,13 +12,14 @@ import Control.Monad import Data.Bits import Data.ByteString (ByteString) import Data.Int (Int64) -import Data.List as List (foldl') +import Data.List as List (foldl', unfoldr) import Data.Text (Text) import Data.Word (Word64) import Hedgehog qualified as H import Hedgehog.Internal.Gen qualified as G import Hedgehog.Internal.Range qualified as R +import Hedgehog.Internal.Seed qualified as Seed import Hedgehog.Internal.Tree qualified as T import System.IO.Unsafe (unsafePerformIO) import System.Random (StdGen, randomR) @@ -77,9 +78,10 @@ makeSizedIntegers g (n : ns) = makeSizedByteString :: H.Seed -> Int -> ByteString makeSizedByteString seed n = genSample seed (G.bytes (R.singleton (8 * n))) --- FIXME: this is terrible makeSizedByteStrings :: H.Seed -> [Int] -> [ByteString] -makeSizedByteStrings seed l = map (makeSizedByteString seed) l +makeSizedByteStrings seed sizes = zipWith makeSizedByteString seeds sizes + where + seeds = unfoldr (Just . Seed.split) seed -- TODO: don't use Hedgehog's 'sample' below: it silently resizes the generator -- to size 30, so listOfByteStringsOfLength and listOfByteStrings are biased