forked from TheAlgorithms/Java
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEditDistanceTest.java
104 lines (91 loc) · 4.23 KB
/
EditDistanceTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package com.thealgorithms.dynamicprogramming;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
public class EditDistanceTest {
@ParameterizedTest
@CsvSource({"'', '', 0", "'abc', '', 3", "'', 'abcd', 4", "'same', 'same', 0", "'a', 'b', 1", "'abc', 'abd', 1"})
void testMinDistance(String str1, String str2, int expected) {
assertEquals(expected, EditDistance.minDistance(str1, str2));
}
@Test
public void testEditDistanceBothEmptyStrings() {
assertEquals(0, EditDistance.editDistance("", ""));
}
@Test
public void testEditDistanceOneEmptyString() {
assertEquals(5, EditDistance.editDistance("", "hello"));
assertEquals(7, EditDistance.editDistance("worldly", ""));
}
@Test
public void testEditDistanceOneEmptyStringMemoization() {
int[][] storage = new int[1][6];
assertAll("String assertions",
()
-> assertEquals(5, EditDistance.editDistance("", "hello", storage)),
() -> assertEquals(0, storage[0][0]), () -> assertEquals(0, storage[0][1]), () -> assertEquals(0, storage[0][2]), () -> assertEquals(0, storage[0][3]), () -> assertEquals(0, storage[0][4]), () -> assertEquals(5, storage[0][5]));
}
@Test
public void testEditDistanceEqualStrings() {
assertEquals(0, EditDistance.editDistance("test", "test"));
assertEquals(0, EditDistance.editDistance("abc", "abc"));
}
@Test
public void testEditDistanceEqualStringsMemoization() {
int[][] storage = new int[4][4];
assertAll("String assertions",
()
-> assertEquals(0, EditDistance.editDistance("abc", "abc", storage)),
()
-> assertEquals(0, storage[0][0]),
()
-> assertEquals(0, storage[0][1]),
()
-> assertEquals(0, storage[0][2]),
()
-> assertEquals(0, storage[0][3]),
()
-> assertEquals(0, storage[1][0]),
()
-> assertEquals(0, storage[1][1]),
()
-> assertEquals(0, storage[1][2]),
()
-> assertEquals(0, storage[1][3]),
()
-> assertEquals(0, storage[2][0]),
() -> assertEquals(0, storage[2][1]), () -> assertEquals(0, storage[2][2]), () -> assertEquals(0, storage[2][3]), () -> assertEquals(0, storage[3][0]), () -> assertEquals(0, storage[3][1]), () -> assertEquals(0, storage[3][2]), () -> assertEquals(0, storage[3][3]));
}
@Test
public void testEditDistanceOneCharacterDifference() {
assertEquals(1, EditDistance.editDistance("cat", "bat"));
assertEquals(1, EditDistance.editDistance("cat", "cats"));
assertEquals(1, EditDistance.editDistance("cats", "cat"));
}
@Test
public void testEditDistanceOneCharacterDifferenceMemoization() {
int[][] storage = new int[3][3];
assertAll("All assertions",
()
-> assertEquals(1, EditDistance.editDistance("at", "it", storage)),
()
-> assertEquals(0, storage[0][0]),
()
-> assertEquals(1, storage[0][1]),
() -> assertEquals(2, storage[0][2]), () -> assertEquals(1, storage[1][0]), () -> assertEquals(0, storage[1][1]), () -> assertEquals(1, storage[1][2]), () -> assertEquals(2, storage[2][0]), () -> assertEquals(1, storage[2][1]), () -> assertEquals(1, storage[2][2]));
}
@Test
public void testEditDistanceGeneralCases() {
assertEquals(3, EditDistance.editDistance("kitten", "sitting"));
assertEquals(2, EditDistance.editDistance("flaw", "lawn"));
assertEquals(5, EditDistance.editDistance("intention", "execution"));
}
@Test
public void testEditDistanceGeneralCasesMemoization() {
int[][] storage = new int[7][8];
assertEquals(3, EditDistance.editDistance("kitten", "sitting", storage));
assertAll("All assertions", () -> assertEquals(0, storage[0][0]), () -> assertEquals(3, storage[6][7]));
}
}