如何使用 QuickCheck select 范围内的值?

How to select a value in a range with QuickCheck?

我使用以下代码在以下站点上创建挑战:codewars

describe "Random cases" $ do
    it "It should handle random test cases" $ 
        property $ prop_check where 
            prop_check  (Positive x) = solution x == ref_sol x
            --- ref_sol function

我想将 prop_check 中的 x 的值设置为大于 4 的正整数,并且最多为五位数(不超过五位数,即:max值 = 99999)。

我将如何处理它?

您可以使用 QuickCheck 的 choose 函数来 select 包含范围内的值。最简单的方法可能是用 do 符号编写 prop_check

prop_check :: Gen Bool
prop_check = do
  x <- choose (5, 99999) :: Gen Integer
  return $ solution x == ref_sol x

这里,x599999之间的Integer值。

根据 solutionref_sol 的类型,您可能不需要第一行的 Gen Integer 类型注释。但是,由于我不知道这些函数的类型,所以我不得不添加注释。