sno*_*ntw 5 quickcheck purescript
我有一个shuffle功能Array:
shuffle:: forall e. Array -> Eff (random :: RANDOM | e) Array
Run Code Online (Sandbox Code Playgroud)
它将 monad 中的数组打乱Control.Monad.Eff.Random并返回包装后的数组。我想测试数组是否被打乱,想比较结果是否不同,所以我编写了 QuickCheck 代码,如下所示:
quickCheck \arr -> isShuffled (shuffle arr)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何编写isShuffled以匹配类型定义。自从:
没有像fromJustin那样的解包函数Maybe,因此它必须接受Random Array并返回Random Boolean,而我将检查代码放在 Monadic 表达式中。
因此,结果isShuffled不会很简单Boolean,而是像m Boolean
forTestable中没有合适的,所以我可能需要为其创建一个实例,而 QuickCheck 中的注释提到:purescript-quickcheckm Boolean
A testable property is a function of zero or more Arbitrary arguments, returning a Boolean or Result.(代码)
然而,我再次无法从Randommonad 中提取/解开一个值,我不知道如何访问其中的布尔值以及如何实现像testableRandomArray具有Boolean或Result来自 a Random Boolean,除非我使用一些不安全的功能。
我认为我应该“嵌入”quickCheck随机单子中的行,这样我就可以访问它洗牌的纯数组。然而,由于它是quickCheck生成测试夹具,我觉得这很奇怪,没有办法做到这一点。