0

我正在尝试编写一个基于属性的测试来验证相等性的一致性。

为此,我需要能够通过提供 2 个类型的值来运行它Gen a

fun_cong_equality
:: forall m a
. (Monad m, Arg a, Vary a, Eq a, Show a)
=> Gen a
-> Gen a
-> PropertyT m ()
fun_cong_equality genA genB = do
a <- forAll genA
b <- forAll genB
f <- forAllFn $ fn @a genA
f a === f b

prop_fun_cong_equality :: Property
prop_fun_cong_equality =
property $
    fun_cong_equality $ -- TODO need to pass 2 `Gen a` values as arguments

我的问题是:如何创建 type 的值Gen a

注意:基于属性的测试还没有完成,它仍然需要过滤生成的相等的值。

4

1 回答 1

0

我需要的是一个类型的值,它具有 typeclasses VaryArg和.EqShow

Int恰好符合这个标准。

一个解决方案是使用:

fun_cong_equality (Gen.int (Range.linear 1 100)) (Gen.int (Range.linear 1 100))
于 2019-08-17T15:45:49.940 回答