小编bra*_*der的帖子

如何在Haskell Test.QuickCheck中有效地生成随机测试

我想使用Haskell Test.QuickCheck生成一些示例测试

目标是使用以下条件生成(Int,[Int])的数据,其中元组是(x,xs):

  1. x> 0
  2. x不在xs中
  3. 所有xs> 0

经过一段时间后,我可以抓住我的脑袋并绊倒手册https://github.com/stackbuilders/quickcheck-manual,我可以生成符合这些要求的随机列表:

import Test.QuickCheck
mygen = arbitrary::Gen (Int, [Int]))
sample (mygen `suchThat` ( \(x, xs)->( (x `notElem` xs) && (x > 0) && (all (>0) xs)&& (xs/=[]))))
Run Code Online (Sandbox Code Playgroud)

在GHCI中运行最后一行输出如下:

(40,[19,35,27,29,45,1,17,28])
(20,[3,9,11,12,15,8])
(43,[76,102,106,71,24,2,29,101,59,48])
(99,[5,87,136,131,22,22,133])
(77,[11,14,55,47,78,15,14])
...
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 如何才能更有效地完成这项工作,因为 - 我猜测 - mygen创建一个大样本集的函数然后根据suchThat标准过滤掉

  2. 如何指示列表xs应该具有一定的大小.例如,如果我添加&& length xs > 50程序运行很长一段时间.

  3. 保证xs的每个元素都是唯一的.即避免像(99,[22,22])这样的记录

testing random haskell quickcheck

3
推荐指数
1
解决办法
308
查看次数

如何解释Haskell字符'\ 250'

我试图了解逃逸如何在Haskell中工作.

head "\250\218" 回报 '\250'

所以Haskell认为\ 250是一个角色.到底发生了什么?

ascii haskell escaping

1
推荐指数
2
解决办法
250
查看次数

标签 统计

haskell ×2

ascii ×1

escaping ×1

quickcheck ×1

random ×1

testing ×1