【问题标题】:Generate test cases for levenshtein distance implementation with quickCheck使用 quickCheck 为 levenshtein 距离实现生成测试用例
【发布时间】:2016-05-03 01:50:58
【问题描述】:

作为我了解 quickCheck 的一部分,我想为 levenshtein 编辑距离实现构建一个测试生成器。我认为显而易见的方法是从两个相等的字符串和一系列随机的不可约的插入/删除/转置动作开始,将其应用于其中一个字符串并断言 levenshtein 距离是随机序列的长度。

我对此很困惑,有人可以帮忙吗?

【问题讨论】:

    标签: haskell quickcheck


    【解决方案1】:

    获得“不可约”的权利听起来很难。我会尝试找到更多不那么复杂的不变量。以下是一些想法:

    1. 任意字符串与自身的编辑距离为0。
    2. 没有两个字符串具有负的编辑距离。
    3. 对于任意字符串x,如果您只对其应用一个更改,生成y,则xy 之间的编辑距离应为1。
    4. 给定两个字符串xy,计算它们之间的距离d。然后,更改y,得到y',并计算它与x 的距离:它应该与d 相差最多1。
    5. 在对字符串x 应用n 编辑后,编辑后的字符串与x 之间的距离最多应为n。请注意,情况 (1) 是这种情况的一种特殊情况,其中 n=0,因此如果您愿意,可以省略该情况以求简洁。或者,保留它,因为案例 (1) 可能会产生更简单的反例。
    6. 函数应该是对称的:xy的编辑距离应该和yx的编辑距离一样。

    如果您有另一个已知良好的算法实现来测试,您可以与它进行比较,并断言您总是得到与它相同的答案。

    以上都是没有任何研究就吸引我的东西。你可以做更多:例如,编码lower and upper bounds as defined by wikipedia

    【讨论】:

    • 谢谢。如果不是太麻烦,你能提供一些代码吗?
    • 我不会那样做的。如果您根本不知道如何编写 quickcheck 测试,请阅读 schoolofhaskell.com/user/pbv/… 之类的内容,如果您仍然不理解,请询问有关 quickcheck 的一般问题。
    猜你喜欢
    • 2010-11-11
    • 2016-08-09
    • 2014-04-14
    • 1970-01-01
    • 2021-07-03
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多