次の方法で任意の 256 ビット値を生成する Hedgehog ジェネレーターを作成しました。
genWord256 :: Gen Word256
genWord256 = do
bytes <- Gen.integral (Range.linear 0 31)
let lo = 2 ^ (8 * bytes)
hi = 2 ^ (8 * (bytes + 1))
pred <$> Gen.integral (Range.constant lo hi)
size パラメーターで数値のバイト数を決定することは、私のアプリケーションにとって理にかなっていると思います。ただし、このジェネレーターがどのように縮小するかを評価し、ceiling . logBase 2
これに適用すると、私の質問は次のとおりです。
Hedgehog が最初の結果の近くを強調することにしたのはなぜですか? 「サイズパラメータの影響を受けない範囲」の意味を誤解していませんか? ( Range.constant
) ここでの縮小はビット数が少ないに違いないと考えていたでしょう。
λ> Gen.print genWord256
=== Outcome ===
68126922926972638
=== Shrinks ===
112 -- 7 bits
4035711763 -- 32 bits
106639875637011 -- 47 bits
281474976710655 -- 48 bits
34204198951841647 -- 55 bits
51165560939407143 -- 56 bits
59646241933189891 -- ...
67994412286444783 -- ...
... 50 shrinks omitted ...
68126922926972637 -- 56 bits