F# FSCheck收缩器是';我没打电话
我似乎无法让FSCheck收缩器工作。说我有这个F# FSCheck收缩器是';我没打电话,f#,shrink,fscheck,F#,Shrink,Fscheck,我似乎无法让FSCheck收缩器工作。说我有这个 let arb_chars = Arb.fromGenShrink( Arb.generate<char[]>, fun cs -> seq { printfn "shrinking..." for i in 0..(cs.Length) do print
let arb_chars =
Arb.fromGenShrink(
Arb.generate<char[]>,
fun cs -> seq {
printfn "shrinking..."
for i in 0..(cs.Length) do
printfn " shrink %d" i
yield [| cs.[0] |]
})
let prop_len() = gen {
//let! a = Arb.generate<char[]> // this doesn't work either...
let! a = arb_chars.Generator
let len = a.Length
printfn "a.Length = %A" len
return (len <> 5)
}
:
Check.One(config, prop_len)
让arb\u chars=
阿伯·弗洛姆根斯林克(
生成,
趣味cs->seq{
printfn“收缩…”
对于0中的i…(cs.长度)do
打印fn“收缩%d”i
收益率[| cs[0]|]
})
让prop_len()=gen{
//让!a=Arb.generate//这也不起作用。。。
设!a=arb\u chars.Generator
设len=a.长度
printfn“a.Length=%a”len
返回(第5列)
}
:
检查1(配置、属性)
当我运行它时,我总是得到0个收缩。下面是一个典型的运行:
a.Length = 0
a.Length = 4
a.Length = 1
a.Length = 0
a.Length = 4
a.Length = 7
a.Length = 6
a.Length = 7
a.Length = 19
a.Length = 18
a.Length = 5
Falsifiable, after 11 tests (0 shrinks) (StdGen (19971972,296557937)):
Original:
<null>
a.Length=0
a、 长度=4
a、 长度=1
a、 长度=0
a、 长度=4
a、 长度=7
a、 长度=6
a、 长度=7
a、 长度=19
a、 长度=18
a、 长度=5
11次试验(0次收缩)后可伪造(StdGen(19971972296557937)):
原件:
使用Prop.ForAll
定义属性并使用自定义生成器/收缩器。类似这样的内容(很抱歉从内存中键入,但应该是关闭的)
让prop_len=prop.ForAll(arb_chars)
(乐趣a->
设len=a.长度
printfn“a.Length=%a”len
返回(第5列)
)
如何使用道具
?它看起来像布尔值的生成器,但命名表明它是您要测试的属性?在任何情况下,我猜想使用gen{}
计算表达式创建新的生成器会使FsCheck无法使用arb_chars
'shrinker,因为它根本不知道正在使用arb\u chars
,prop\u len
生成器可以有任何实现,并且不定义其属性的收缩器own@Honza我只是使用Check.One(配置,属性)
。我已经更新了示例。这就是问题所在!顺便说一句:它是小写的Prop.forAll