gpt4 book ai didi

f# - 生成字符串时Expecto FsCheck获取堆栈溢出异常

转载 作者:行者123 更新时间:2023-12-04 23:15:03 26 4
gpt4 key购买 nike

我正在尝试学习如何正确使用 FsCheck,并目前将其与 Expecto 集成。如果我使用默认的 FsCheck 配置,我可以运行属性测试,但是当我尝试使用我自己的生成器时,它会导致堆栈溢出异常。

这是我的发电机

type NameGen() =
static member Name() =
Arb.generate<string * string>
|> Gen.where (fun (firstName, lastName) ->
firstName.Length > 0 && lastName.Length > 0
)
|> Gen.map (fun (first, last) -> sprintf "%s %s" first last)
|> Arb.fromGen
|> Arb.convert string id

我正在尝试像这样使用它:
let config = { FsCheckConfig.defaultConfig with arbitrary = [typeof<NameGen>] }

let propertyTests input =
let output = toInitials input
output.EndsWith(".")

testPropertyWithConfig config "Must end with period" propertyTests

在它进入 Gen.where 之前抛出异常功能

我究竟做错了什么?谢谢

最佳答案

您正在尝试使用 FsCheck 的字符串生成器来重新定义其字符串生成器的工作方式,但是当您这样做时,它会递归调用自身,直到用完堆栈空间。这是一个已知问题:https://github.com/fscheck/FsCheck/issues/109

这种替代方法有效吗?

type NameGen =
static member Name () =
Arb.Default.NonEmptyString().Generator
|> Gen.map (fun (NonEmptyString s) -> s)
|> Gen.two
|> Gen.map (fun (first, last) -> sprintf "%s %s" first last)
|> Arb.fromGen

关于f# - 生成字符串时Expecto FsCheck获取堆栈溢出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44799465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com