问题标签 [fscheck]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
660 浏览

testing - 防止 FsCheck 生成 NaN 和无穷大

我有一个深度嵌套的数据结构,到处都是浮点数。我正在使用 FsCheck 来检查序列化然后反序列化后数据是否不变。

当浮点数为 NaN 或 +/- 无穷大时,此属性会失败,但是,我对这种情况不感兴趣,因为我不希望这些值出现在实际数据中。

有没有办法防止 FsCheck 生成 NaN 和无穷大?

我曾尝试丢弃包含所述值的生成数据,但这会使测试变得异常缓慢,事实上如此缓慢,以至于在我写这篇文章时测试仍在运行,我怀疑它是否会真正完成......

0 投票
1 回答
348 浏览

f# - 如何在 FsCheck 中生成概率率

我想测试一个属性,我使用 2 个概率率 p1 和 p2 必须满足 0 < p1 < p2 < 1

我已经尝试了上面的例子,但测试结果似乎是

0 次测试后参数耗尽。验证它:单位=()

此外,我希望列表 xs 不包含重复项。任何有助于为此属性编写测试的帮助将不胜感激。谢谢。

0 投票
1 回答
963 浏览

f# - fscheck 生成大小在 min 和 max 之间的字符串

我尝试编写一个 FsCheck 生成器,该生成器生成长度在给定间隔内的字符串。

我的尝试如下:

...我得到了错误:

我究竟做错了什么?

谢谢!

更新 1:

我设法像这样编写生成器:

有没有更好的办法?

更新 2:我想将此作为一个单独的问题添加,但这与我原来的问题几乎相同。

所以我将上面的代码重构为以下结构,以便重用序列生成器:

现在我收到运行时错误:

...这让我回到了我原来的问题:为什么找不到 System.Char 的任意实例?我认为默认情况下注册了基本类型的任意值。我究竟做错了什么?

谢谢!

0 投票
2 回答
942 浏览

f# - FsCheck 测试更改用于测试的值的范围

我的代码在使用 FsCheck 时自动测试从 -99 到 99 的值。

我的测试函数采用整数值。

我想使用从 1 到 4999 的值进行测试。

0 投票
1 回答
170 浏览

f# - FsCheck DataGen 为空

我现在正在尝试通过 FsCheck 的示例来处理具有歧视联合的类型,以便为我们的大型项目建立最佳实践。现在我从我的生成器中得到空值,我不知道为什么。在以下代码中,DataGen.containerGenerator 为空。

0 投票
1 回答
75 浏览

f# - 有没有办法在指定界限的同时从 Gen到 Gen ?

0 投票
1 回答
403 浏览

f# - 从可能性池中选择 FsCheck 生成器

有没有办法通过从每个字符串列表中选择一个项目然后连接结果来在 FsCheck 中生成一个字符串?

我完全被卡住了,似乎无法弄清楚。我查看了文档github 存储库中的类似内容。我已经从FSharpForFunAndProfit完成了我对 FsCheck 的大部分阅读。

这就像我想的那样:

这应该会产生类似“Z0ê”或“zÒE”的东西。

0 投票
1 回答
178 浏览

testing - 如何为 System.Type 创建任意值?

我正在尝试使用 FsCheck 初始化我的模型实体。模型存在于 C# 中,通常通过实体框架通过它们的私有设置器进行初始化。例如(人为):

我想创建一个 FsCheck 生成器,它自动使用每个属性的注册生成器来生成模型。像这样的东西:

这有两个问题:

  1. let!不能在计算表达式之外使用gen
  2. Arb.generateType不存在,我找不到等效的方法

是否可以创建一个自动在我的模型上设置私有字段的生成器?

0 投票
3 回答
711 浏览

f# - 如何从 FsCheck.Gen.choose 中提取 int

我是 F# 的新手,看不到如何从以下位置提取 int 值:

编译器说类型是Gen<int>,但无法从中获取 int !我需要将其转换为十进制,两种类型都不兼容。

0 投票
2 回答
823 浏览

f# - 如何在 FsCheck 中轻松过滤出歧视性联合案例?

考虑一个有区别的联合:

我想DU用 FsCheck 创建一个值列表,但我不希望任何值都是这种Qux情况。

此谓词已存在:

第一次尝试

我第一次尝试在DU没有Qux大小写的情况下创建值列表是这样的:

运行它似乎会产生堆栈溢出,所以我假设幕后发生的事情是Arb.from<DU>调用DoesNotWork.DU.

第二次尝试

然后我尝试了这个:

和上面一样的问题。

详细的解决方案

这是迄今为止我能想到的最好的解决方案:

这可行,但有以下缺点:

  • 看起来工作量很大
  • 它没有使用已经可用的isQux功能,所以它似乎巧妙地违反了 DRY
  • 它并没有真正filter,而只是产生所需的情况(因此仅通过省略进行过滤)。
  • 它不是特别可维护的,因为如果我在 中添加第五个案例DU,我必须记住还要Gen为那个案例添加一个。

有没有更优雅的方法来告诉 FsCheck 过滤掉Qux值?