如何为 FsCheck 测试生成空字符串

2024-03-20

Using FsCheck https://github.com/fsharp/FsCheck,Haskell QuickCheck 测试库的 F# 版本,用于生成测试C# https://github.com/fsharp/FsCheck/blob/master/FsCheck.CSharpExamples/Program.cs,我发现随机字符串生成器不会生成空字符串。

using FsCheck.Fluent;
Spec.ForAny<string>(s => s != null).QuickCheck(); // always pass

此外,似乎没有设计处理空字符串,但我还没有设法确定它从文档中 https://github.com/fsharp/FsCheck/blob/master/Docs/Documentation.md。例如,仅在两个字符串(其中一个为空)之间进行选择是行不通的:

var strings = Any.ValueIn<string>(null, "non-null string");
Spec.For(strings, s => true).QuickCheck(); // throws null ref exception

字符串似乎是一种特殊情况,因为它处理定制对象,例如

class Thing {}

与空值混合时:

var objects = Any.ValueIn(null, new Thing());
Spec.For(objects, s => true).QuickCheck(); // pass

我试图对此进行深入研究,看来您已经发现了 FsCheck 中的一个错误。

问题似乎出在 Arbitrary.fs 文件中,并且实际上仅与字符串相关。我必须替换它,他们在字符串上调用 ToCharArray

    static member String() = 
        { new Arbitrary<string>() with
            override x.Generator = Gen.map (fun chars -> new String(List.toArray chars)) generate
            override x.Shrinker s = s.ToCharArray() |> Array.toList |> shrink |> Seq.map (fun chars -> new String(List.toArray chars))
        }

有了这个

    static member String() = 
        { new Arbitrary<string>() with
            override x.Generator = Gen.map (fun chars -> new String(List.toArray chars)) generate
            override x.Shrinker s = 
                match s with
                    | null  -> seq {yield null;}
                    | _ -> s.ToCharArray() |> Array.toList |> shrink |> Seq.map (fun chars -> new String(List.toArray chars))
        }

您可能想向 fscheck 开发人员提出这个问题here https://github.com/fsharp/FsCheck/issues并检查我的修复是否运行良好 - 可能有更好的方法来实现它,但对于已经知道代码的人来说会更简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 FsCheck 测试生成空字符串 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • Jquery:获取页面的所有html源但排除一些#ids

    我正在尝试使用 html 或 contents 但我有奇怪的行为 我基本上需要获取页面的整个 dom 排除一些元素 例如 first second 并将其作为字符串传递 不再是 dom 是否可以 您可以克隆它 删除要从克隆中排除的元素 然后
  • Jetpack compose 的公开下拉菜单

    我想知道是否有针对 jetpack compose 的暴露下拉菜单的解决方案 我在 jetpack compose 中找不到该组件的正确解决方案 有什么帮助吗 The M2 从版本开始1 1 0 alpha06 https develope
  • 我可以在 Django 中使用 HTTP 基本身份验证吗?

    我们有一个在 Apache 上运行的网站 访问该网站有许多通过 HTTP 基本身份验证保护的静态页面 我使用 Django 内置的用户管理支持 用 Django 编写了网站的新部分 我遇到的问题是用户必须通过 HTTP Basic 身份验证
  • 如何使用 cURL 和 PHP 来欺骗引荐来源网址?

    我正在尝试使用 PHP 学习 cURL 来欺骗网站的引荐来源网址 我希望通过以下脚本来完成此任务 但它似乎不起作用 有什么想法 建议我哪里出错了 或者你知道有什么教程可以帮助我解决这个问题吗 Thanks Jessica
  • junit 测试用例生成器

    有没有一个好的工具可以根据一些原始模板自动生成 jUnit 测试用例 这样一来 没有太多 Java 或 jUnit 背景的工程师就可以编写测试用例 作为背景信息 这是用于黑盒测试 如果除了使用 jUnit 之外还有其他替代方法来运行回归测试
  • 在 Jenkins 管道中执行 gcloud 命令

    我尝试在 Jenkins 声明性管道中运行 gcloud 命令 如下例所示 pipeline agent any stages stage Run gcloud version steps sh gcloud version 我下载了 GC
  • Eclipse“增强类反编译器”插件调试时不反编译

    问题描述 查看类 即 Ctrl Shift T 时反编译工作正常 但从调试角度单步执行代码时则不然 而是打开 类文件查看器 使用的版本 Eclipse Oxygen 和增强型类反编译器 3 0 0 这也适用于氧气和更高版本 单击 窗口 gt
  • 在 ExtJS 网格中编辑整行后触发“afteredit”?

    我有一个 ExtJS 编辑器网格 里面有一些列 我想修改记录上的数据并将数据自动保存到数据库 但我只需要在完成编辑当前行的所有单元格后保存数据 我使用了 afteredit 事件 但它在一个单元格更改后立即触发了该事件 在完成所有单元格的修
  • 如何在 IndexPath 处使用 reloadRows 更新行

    我正在尝试使用按钮删除单元格 这是一个单元格的实现 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath st
  • Mac OS 10.14 Mojave + qt5.5 + gem capybara-webkit

    我的配置是 MAC Mojave v10 14 我尝试安装需要 qt5 5 的 gem Capybara webkit v 1 15 0 但 qt5 5 已从自制程序中删除 并且与 Xcode v10 不兼容 我试试这个 卸载 Xcode
  • 在 Android 中的 doinbackground() 中执行 UI 任务

    有没有办法在 AsyncTask 的 doinbackground 中执行 UI 任务 我很清楚最好在 onPostExecute 方法中执行此操作 但就我而言 由于我需要使用可重复使用的警报 因此能够访问我的 doinbackground
  • 查找 jQuery 中所有未选中的复选框

    我有一个复选框列表
  • Django,在模型中按函数过滤 Q 对象

    在我的 Profile 模型中 我有以下功能 它用于返回用户的全名 如果某些数据丢失 则返回用户的全名 def full name self first name self user first name strip if first na
  • 像java一样的Visual Studio参数化单元测试

    在 Java 测试环境中 我可以使用参数化单元测试 如以下代码所示 RunWith value Parameterized class public class JunitTest6 private int number public Ju
  • 在后台重新加载 UITableView 的数据

    在我的应用程序中 我有一个 UITableViewController 它的 tableView 分为 3 个部分 我从我的服务器下载每个部分的数据 为此 我有 3 个函数 例如 f1 f2 和 f3 每个更新一个相应的 NSArray 用
  • VS 2022:Roslyn 代码分析的高 RAM 和 CPU 问题

    我们在 Visual Studio 2022 v 17 2 2 64 位 中拥有一个庞大的解决方案 ASP NET MVC C Roslyn 代码分析始终使用高 CPU 和 RAM 有办法防止这个问题吗 配置还是其他 在 Visual St
  • 单击提交按钮时重新加载页面后如何滚动到特定 div?

    我正在尝试做一些奇特的事情 我已经成功编写了代码 以便在填写小表单并单击提交按钮时显示数据库中的结果 结果显示在表单的正下方 但我觉得如果页面能自动向下滚动到包含已填写表单结果的 div 那就太好了 我想我必须使用 jquery 或 aja
  • Angular2 - 将 POST 与 angular-in-memory-web-api 一起使用

    我正在使用 Angular 2 的 angular in memory web api 到目前为止 我只使用了 GET 调用 而且运行良好 我要调用的 API 仅使用 POST 调用 因此我开始将 GET 调用重写为 POST 调用 但随后
  • 如何从 Ruby on Rails 应用程序打印(条形码)标签?

    我在 RoR 中开发的第一个应用程序是针对我们库存中使用的一些 Kiosk 触摸屏 PC 当库存工人拿起一些材料时 他在表格中输入数量 现在我想在我们的 Zebra 打印机上打印一个标签 其中包含 客户名称 材料描述 数量和条形码 我如何从
  • 如何为 FsCheck 测试生成空字符串

    Using FsCheck https github com fsharp FsCheck Haskell QuickCheck 测试库的 F 版本 用于生成测试C https github com fsharp FsCheck blob