使用 quickCheck 为 levenshtein 距离实现生成测试用例
Generate test cases for levenshtein distance implementation with quickCheck
作为我学习 quickCheck
的一部分,我想为 levenshtein 编辑距离实现构建一个测试生成器。我认为明显的方法是从两个相等的字符串和一个随机的不可缩减的 insert/delete/traspose 动作系列开始,将其应用于其中一个字符串并断言编辑距离是随机系列的长度。
我对此很困惑,有人可以帮忙吗?
"non-reducible" 正确听起来很难。我会尝试找到更多不那么复杂的不变量。以下是一些想法:
- 任意字符串与其自身的编辑距离为0
- 没有两个字符串具有负编辑距离。
- 对于任意字符串
x
,如果您恰好对其应用一个更改,生成 y
,x
和 y
之间的编辑距离应为 1。
- 给定两个字符串
x
和 y
,计算它们之间的距离 d
。然后,改变 y
,产生 y'
,并计算它与 x
的距离:它应该与 d
最多相差 1.
- 对字符串
x
应用 n
编辑后,编辑的字符串与 x
之间的距离最多应为 n
。请注意,情况 (1) 是这种情况的一种特殊情况,其中 n=0,因此如果您愿意,可以省略该情况以求简洁。或者,保留它,因为情况 (1) 可能会生成更简单的反例。
- 函数应该是对称的:从
x
到y
的编辑距离应该与从y
到x
的编辑距离相同。
如果您有另一个已知良好的算法实现来测试,您可以与它进行比较,并断言您总是得到与它相同的答案。
以上都是没有经过研究就打动我的东西。您可以做更多:例如,对 lower and upper bounds as defined by wikipedia.
进行编码
作为我学习 quickCheck
的一部分,我想为 levenshtein 编辑距离实现构建一个测试生成器。我认为明显的方法是从两个相等的字符串和一个随机的不可缩减的 insert/delete/traspose 动作系列开始,将其应用于其中一个字符串并断言编辑距离是随机系列的长度。
我对此很困惑,有人可以帮忙吗?
"non-reducible" 正确听起来很难。我会尝试找到更多不那么复杂的不变量。以下是一些想法:
- 任意字符串与其自身的编辑距离为0
- 没有两个字符串具有负编辑距离。
- 对于任意字符串
x
,如果您恰好对其应用一个更改,生成y
,x
和y
之间的编辑距离应为 1。 - 给定两个字符串
x
和y
,计算它们之间的距离d
。然后,改变y
,产生y'
,并计算它与x
的距离:它应该与d
最多相差 1. - 对字符串
x
应用n
编辑后,编辑的字符串与x
之间的距离最多应为n
。请注意,情况 (1) 是这种情况的一种特殊情况,其中 n=0,因此如果您愿意,可以省略该情况以求简洁。或者,保留它,因为情况 (1) 可能会生成更简单的反例。 - 函数应该是对称的:从
x
到y
的编辑距离应该与从y
到x
的编辑距离相同。
如果您有另一个已知良好的算法实现来测试,您可以与它进行比较,并断言您总是得到与它相同的答案。
以上都是没有经过研究就打动我的东西。您可以做更多:例如,对 lower and upper bounds as defined by wikipedia.
进行编码