收缩器不符合条件

问题描述 投票:1回答:1

我正在尝试使用fscheck实现一个生成器和一个收缩器,这将产生两个不为空且彼此不同的字符串。为了做到这一点,我使用以下代码:

let nonWhiteSpaceString s =
    not (String.IsNullOrWhiteSpace s) && not (String.exists ((=) '\000') s)

type DifferentNonWhiteSpace = | DifferentNonWhiteSpace of NonWhiteSpaceString*NonWhiteSpaceString

type DifferentNonWhiteSpaceGen = 
    static member DifferentNonWhiteSpace() =

        let generator =
            generate<String>
            |> Gen.two
            |> Gen.filter (fun (a,b) -> nonWhiteSpaceString a && nonWhiteSpaceString b && a<>b )
            |> Gen.map (fun (a,b) -> DifferentNonWhiteSpace((NonWhiteSpaceString a),NonWhiteSpaceString(b)))
        let shrinker (DifferentNonWhiteSpace(a,b)) = 

            let seqA = a.Get.ToCharArray() 
                        |> shrink 
                        |> Seq.map String 
            b.Get.ToCharArray() 
            |> shrink 
            |> Seq.map  String  
            |> Seq.map2 (fun x y -> if x <> y then Some(DifferentNonWhiteSpace(NonWhiteSpaceString x,NonWhiteSpaceString y)) else  None) seqA
            |> Seq.choose id

        fromGenShrink (generator,shrinker)

我像在测试中一样使用它,如下所示:

testProperty "calculate Xml against different Prefix should produce youpi" <| fun (DifferentNonWhiteSpace(prefix1,prefix2)) -> 
  let xml1 = createXml <| changePrefix prefix1
  let xml2 = createXml <| changePrefix prefix2
  let actual = calculate xml1 xml2
  Expect.equal actual Youpi "return youpi"

发电机似乎还可以,但是收缩器不是我期望的那样:

1次测试后失败。参数: DifferentNonWhiteSpace(NonWhiteSpaceString“ K”,NonWhiteSpaceString“▲”) 缩小3次即可: 不同NonWhiteSpace(NonWhiteSpaceString“ a”,NonWhiteSpaceString“ a”) 结果: 例外 Expecto.AssertException:返回Bouh。

缩小后的数据中我不应具有相同的值:

不同NonWhiteSpace(NonWhiteSpaceString“ a”,NonWhiteSpaceString “ a”)

有人可以指出我做错了什么吗?

谢谢

[编辑]实际上,发生器也有问题。

Failed after 11 tests. Parameters:
        DifferentNonWhiteSpace (NonWhiteSpaceString "v",NonWhiteSpaceString "v")
Result:
        Exception
  Expecto.AssertException: return Bouh.

很奇怪...

f# fscheck
1个回答
0
投票

致敬Kurt Schelfthout评论,我忘了使用

testPropertyWithConfig config ....

而不是

testProperty ....

为了使用我的自定义任意内容:

let config = 
        {   
            FsCheckConfig.defaultConfig with 
                arbitrary= 
                    [
                        typeof<DifferentNonWhiteSpaceGen>
                    ]
        }
© www.soinside.com 2019 - 2024. All rights reserved.