使用quickCheck生成levenshtein距离实现的测试用例

时间:2016-05-03 01:50:59

标签: haskell quickcheck

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

我很坚持这可以有人帮忙吗?

1 个答案:

答案 0 :(得分:9)

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

  1. 任何字符串与其自身之间的编辑距离为0.
  2. 没有两个字符串具有负编辑距离。
  3. 对于任意字符串x,如果您只对其应用一项更改,生成yxy之间的编辑距离应为1。
  4. 给定两个字符串xy,计算它们之间的距离d。然后,更改y,产生y',并计算与x的距离:它应与d的差异最多为1。
  5. n次修改应用于字符串x后,已修改字符串与x之间的距离最多应为n。请注意,case(1)是这种情况的特例,其中n = 0,因此如果您愿意,可以省略那个简洁。或者,保持它,因为案例(1)可能会产生更简单的反例。
  6. 该功能应该是对称的:从xy的编辑距离应与yx的编辑距离相同。
  7. 如果你有另一个已知良好的算法实现来进行测试,你可以与之进行比较,并断言你总能得到与它相同的答案。

    以上所有内容都是在没有任何研究的情况下吸引我的事情。您可以执行更多操作:例如,对lower and upper bounds as defined by wikipedia进行编码。