大小值是否用于采用自定义生成器的 Gen 样本?
Is size value used for a Gen's sample taking a custom generator?
我正在使用 FsCheck
的 Gen
生成自定义数据。
假设您有一个返回 Gen<'T>
:
的函数
let chooseRectangle widthMax heightMax offset =
gen {
let! left = Gen.choose(0, widthMax-offset)
let! top = Gen.choose(0, heightMax-offset)
let! width = Gen.choose(offset, widthMax-left)
let! height = Gen.choose(offset, heightMax-top)
return { Left=left
Top=top
Width=width
Height=height
}
}
然后用于生成数据:
Gen.sample 0 10 (chooseRectangle 400 200 10)
是在这种情况下使用的 size
参数(第一个)吗?它会影响值重新分区吗?
不,据我所知,您的情况并非如此。
第一个参数是大小。 sample
将它线程化到您调用它的生成器中,但是生成器用它做什么取决于特定的实现。对于序列生成器,它可以控制序列的长度。
然而,您的生成器完全建立在 Gen.choose
之上,它明确地忽略了它:
let choose (l, h) = Gen (fun _ r -> range (l,h) r |> fst)
其中大小是 _
参数。参见 here。
我正在使用 FsCheck
的 Gen
生成自定义数据。
假设您有一个返回 Gen<'T>
:
let chooseRectangle widthMax heightMax offset =
gen {
let! left = Gen.choose(0, widthMax-offset)
let! top = Gen.choose(0, heightMax-offset)
let! width = Gen.choose(offset, widthMax-left)
let! height = Gen.choose(offset, heightMax-top)
return { Left=left
Top=top
Width=width
Height=height
}
}
然后用于生成数据:
Gen.sample 0 10 (chooseRectangle 400 200 10)
是在这种情况下使用的 size
参数(第一个)吗?它会影响值重新分区吗?
不,据我所知,您的情况并非如此。
第一个参数是大小。 sample
将它线程化到您调用它的生成器中,但是生成器用它做什么取决于特定的实现。对于序列生成器,它可以控制序列的长度。
然而,您的生成器完全建立在 Gen.choose
之上,它明确地忽略了它:
let choose (l, h) = Gen (fun _ r -> range (l,h) r |> fst)
其中大小是 _
参数。参见 here。