首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收缩者不尊重条件

收缩者不尊重条件
EN

Stack Overflow用户
提问于 2020-06-04 14:31:17
回答 1查看 71关注 0票数 1

我正在尝试用fscheck实现生成器和收缩器,这将产生两个字符串,而不是空字符串,并且彼此不一样。为此,我使用以下代码:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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次至:DifferentNonWhiteSpace (NonWhiteSpaceString "a",NonWhiteSpaceString "a")结果: Exception Expecto.AssertException: Result。

在缩水的数据中,我不应该有相同的值:

DifferentNonWhiteSpace (NonWhiteSpaceString "a",NonWhiteSpaceString "a")

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

谢谢

编辑实际上,我也有问题的发电机。

代码语言:javascript
复制
Failed after 11 tests. Parameters:
        DifferentNonWhiteSpace (NonWhiteSpaceString "v",NonWhiteSpaceString "v")
Result:
        Exception
  Expecto.AssertException: return Bouh.

很奇怪..。

EN

回答 1

Stack Overflow用户

发布于 2020-06-08 10:54:33

Thx给Kurt Schelfthout的评论,我忘了用

代码语言:javascript
复制
testPropertyWithConfig config ....

而不是

代码语言:javascript
复制
testProperty ....

为了使用我的自定义仲裁员:

代码语言:javascript
复制
let config = 
        {   
            FsCheckConfig.defaultConfig with 
                arbitrary= 
                    [
                        typeof<DifferentNonWhiteSpaceGen>
                    ]
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62197211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档