首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >假设a != b具有Elm模糊测试

假设a != b具有Elm模糊测试
EN

Stack Overflow用户
提问于 2016-12-08 15:58:45
回答 1查看 133关注 0票数 4

我刚刚写了一个fuzz测试,它基本上检查对同一函数的两个不同输入的调用是否会产生不同的结果。我想告诉Elm-test,不允许输入相等;否则,此测试用例失败的概率很低。

我不想通过从第一个输入派生第二个输入来使它们不相等,因为这严重限制了搜索空间。

我如何告诉Elm-test fuzzer它生成的两个输入不能相等?

编辑:

这是我写的一个理智测试:

代码语言:javascript
复制
fuzz3 Fuzz.string Fuzz.int Fuzz.int "Decryption is not possible with wrong key" <|
  \msg keySeed keySeed2 ->
    let
      key =
        createKey keySeed

      key2 =
        createKey keySeed2
    in
      let
        encryptedMessage =
          encrypt key msg
      in
        Expect.equal Nothing (decrypt key2 encryptedMessage)
EN

回答 1

Stack Overflow用户

发布于 2016-12-08 20:45:23

您可以创建一个fuzzer,它生成一个具有唯一值的元组,如下所示:

代码语言:javascript
复制
uniqueTuple : Fuzzer comparable -> Fuzzer (comparable, comparable)
uniqueTuple fuzzer =
    let
        uniquer (a, b) =
            if a == b then
                tuple (constant a, fuzzer)
                    |> Fuzz.andThen uniquer
            else
                constant (a, b)
    in
        tuple (fuzzer, fuzzer)
            |> Fuzz.andThen uniquer

这个想法是,它需要一个现有的fuzzer (如int),然后生成一个元组。如果这两个值相等,它将保留第一个值,并尝试为第二个值生成一个新的模糊化值。它递归地执行此操作,直到值不同为止。

您可以仅使用以下命令在fuzzer上运行测试:

代码语言:javascript
复制
fuzz (uniqueTuple int) "All pairs are unique" <|
  \(a, b) ->
      Expect.notEqual a b
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41034482

复制
相关文章

相似问题

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