Haskell 中的 IO Int 和类似单元测试

2023-11-22

From 九十九道 Haskell 问题:

问题23: 从列表中提取给定数量的随机选择的元素。

这是部分解决方案。为简单起见,此代码仅从列表中选择一个元素。

import System.Random (randomRIO)

randItem :: [a] -> IO a
randItem xs = do
    i <- randomRIO (0,length xs - 1)
    return $ xs !! i

so randItem [1..10]会返回一个IO Int对应(但不等于)从 1 到 10 的某个 Int。

到目前为止,一切都很好。但是我可以为 randItem 函数编写什么样的测试呢?我可以确认输入和输出之间的什么关系(如果有)?

我可以使用与上述函数相同的逻辑来生成m Bool,但我不知道如何测试m Bool。谢谢。


您可以做几件事。如果您使用 QuickCheck,则可以编写以下属性:

  • 返回列表的长度应等于输入长度。
  • 返回列表中的所有元素都应该是候选列表中的元素。

除此之外,Haskell 的 Random 库的优点在于(与大多数其他 Haskell 代码一样)它是确定性的。如果,而不是基于您的实施randomRIO,你可以基于它randomR or randomRs。这将使您能够通过一些已知的RandomGen一些确定性单元测试用例的值(不是 QuickCheck)。这些可以作为回归测试。


我现在已经发布了关于上述方法的文章,完成源代码.

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

Haskell 中的 IO Int 和类似单元测试 的相关文章

随机推荐

  • C中位域的内存管理

    为了理解位域内存存储 我创建了下面的测试程序 include
  • WPF Metro 窗口全屏

    我目前正在开发 WPF 应用程序 但我不知道如何使我的应用程序全屏显示 我正在使用 MahApps Metro 因此我的主窗口类型是 Controls MetroWindow 我试过这个
  • JPA Criteria API:查询子类的属性

    我有一个这样的类结构 Entity Inheritance strategy InheritanceType JOINED public abstract class Article private String aBaseProperty
  • Automagic 单元测试是否支持 Java 中的对象方法契约?

    在开发 Java 应用程序时 我经常重写对象方法 通常是 equals 和 hashCode 我想要某种方法来系统地检查我是否遵守每个类的对象方法合同 例如 我想要断言对于相等的对象 哈希码也相等的测试 我正在使用 JUnit 测试框架 所
  • 在 Android 应用程序中使用哪个 WebSocket 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想添加一个Service到我的 Android 应用程序 该应用程序在后台运行 持有WebSocket连接 可能需要几个小时甚至几天 并定期向服务
  • php 中按值调用和按引用调用之间的区别以及 $$ 的含义是什么?

    1 我想知道按值调用和按引用调用有什么区别php PHP 是按值调用还是按引用调用 2 我还想知道 登录 php 是什么意思 例如 a name a Paul echo name output is Paul 正如上面的例子 PHP 中的
  • 插入日期时动态智能日期掩码

    javascript 或 jQuery 是否有一种方法可以在键入关键输入以及复制并粘贴到文本框的日期时动态检测和更改 我正在尝试创建一个具有两位数字 例如月份 的功能文本框 由于月份可以是 1 12 之间的数字 我想强制第一个数字为 1 或
  • 在 C 中使用 fread 从 stdin 缓冲读取

    我正在尝试有效地阅读stdin通过使用setvbuf在 IOFBF 模式下 我是缓冲新手 我在寻找working例子 输入以两个整数开始 n k 下一个n输入行包含 1 个整数 目的是打印有多少个整数可以被整除k define BUFSIZ
  • 无需注册事件源即可写入 Windows 应用程序事件日志

    有没有办法写入此事件日志 或者至少是其他一些 Windows 默认日志 我不必注册事件源 是的 有一种方法可以写入您正在寻找的事件日志 您不需要创建新的源 只需使用现有的源 该源通常与事件日志的名称相同 并且在某些情况下 例如事件日志应用程
  • 如何从纬度和经度点获取城市名称?

    有没有办法使用 javascript 的谷歌地图 api 从纬度和经度点获取城市名称 如果可以的话我可以看一个例子吗 这就是所谓的反向地理编码 来自谷歌的文档 http code google com apis maps documenta
  • 返回按钮在 iOS 7 中不可见

    我对 iOS 7 有一些奇怪的问题 我有一个UINavigationBar在我的应用程序中 它非常适合 iOS 6 IOS 6 然而 当我尝试在 iOS 7 上运行它时 我的后退按钮消失了 它就在那里 仍然可以工作并且可以点击 但不可见 I
  • LoadLibrary project.dll 失败。指定的模块无法找到

    当我尝试注册我的 C ATL 项目的 32 位版本时 regsvr32 project dll 我收到此错误 LoadLibrary project dll failed The specified module could not be
  • 将通用 Class 参数限制为实现 Map 的类

    我正在尝试写一个Map建设者 构造函数之一将允许客户端指定类型Map他们希望建立 public class MapBuilder
  • 删除/替换列值中的特殊字符?

    我有一个表列 其中包含我想从中删除所有连字符的值 这些值可能包含多个连字符并且长度各不相同 示例 对于我想要替换的所有值123 ABCD efghi with 123ABCDefghi 删除所有连字符并更新表中所有列值的最简单方法是什么 您
  • Windows Python2.7 mysqldb安装错误

    我正在尝试为 Python 安装 mysqldb 我正在运行 pip install mysql python 我不断收到此错误 运行 build ext构建 mysql 扩展创建 build temp win32 2 7创建 build
  • 在 MVC 框架中的 Javascript 文件中使用内联 C#

    我正在尝试使用 MVC 框架让内联 C 在我的 JavaScript 文件中工作 我编写了这个小测试代码 document ready function alert 当此代码在视图内部使用时 它可以完美地工作 当我离开我的 aspx 视图并
  • AngularJS:将服务注入 HTTP 拦截器(循环依赖)

    我正在尝试为我的 AngularJS 应用程序编写一个 HTTP 拦截器来处理身份验证 这段代码可以工作 但我担心手动注入服务 因为我认为 Angular 应该自动处理这个问题 app config httpProvider functio
  • 如何在matlab中制作圆并在其中生成随机点

    hello i want to ask a question how to make a circle in matlab and mark its center and generate a certain number of rando
  • 何时使用无符号值而不是有符号值?

    什么时候适合使用无符号变量而不是有符号变量 那么在一个for loop 我听到了很多关于这个问题的意见 我想看看是否有任何类似的共识 for unsigned int i 0 i lt someThing length i SomeThin
  • Haskell 中的 IO Int 和类似单元测试

    From 九十九道 Haskell 问题 问题23 从列表中提取给定数量的随机选择的元素 这是部分解决方案 为简单起见 此代码仅从列表中选择一个元素 import System Random randomRIO randItem a gt