Skip to content

Commit 146386e

Browse files
Add unit test for com.thealgorithms.dynamicprogramming.EditDistance
1 parent d102fa7 commit 146386e

File tree

1 file changed

+139
-2
lines changed

1 file changed

+139
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,152 @@
11
package com.thealgorithms.dynamicprogramming;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
4-
3+
import org.junit.jupiter.api.Test;
54
import org.junit.jupiter.params.ParameterizedTest;
65
import org.junit.jupiter.params.provider.CsvSource;
76

7+
import static org.junit.jupiter.api.Assertions.*;
8+
import static org.junit.jupiter.api.Assertions.assertAll;
9+
810
public class EditDistanceTest {
911

1012
@ParameterizedTest
1113
@CsvSource({"'', '', 0", "'abc', '', 3", "'', 'abcd', 4", "'same', 'same', 0", "'a', 'b', 1", "'abc', 'abd', 1"})
1214
void testMinDistance(String str1, String str2, int expected) {
1315
assertEquals(expected, EditDistance.minDistance(str1, str2));
1416
}
17+
18+
@Test
19+
void testEditDistanceStringNull() {
20+
assertThrows(NullPointerException.class, () -> {
21+
EditDistance.editDistance(null, "abc");
22+
});
23+
assertThrows(NullPointerException.class, () -> {
24+
EditDistance.editDistance("abc", null);
25+
});
26+
assertThrows(NullPointerException.class, () -> {
27+
EditDistance.editDistance(null, null);
28+
});
29+
}
30+
31+
@Test
32+
void testEditDistanceStringEmpty() {
33+
int expected = 0;
34+
assertEquals(0, EditDistance.editDistance("", ""));
35+
String s1 = "abc";
36+
expected = s1.length();
37+
assertEquals(expected, EditDistance.editDistance(s1, ""));
38+
String s2 = "aa";
39+
expected = s2.length();
40+
assertEquals(expected, EditDistance.editDistance("", s2));
41+
}
42+
43+
@Test
44+
void testEditDistance_NullValue() {
45+
assertThrows(NullPointerException.class, () -> {
46+
EditDistance.editDistance(null, "hello");
47+
});
48+
assertThrows(NullPointerException.class, () -> {
49+
EditDistance.editDistance("hello", null);
50+
});
51+
assertThrows(NullPointerException.class, () -> {
52+
EditDistance.editDistance(null, null);
53+
});
54+
}
55+
56+
@Test
57+
public void testEditDistance_BothEmptyStrings() {
58+
assertEquals(0, EditDistance.editDistance("", ""));
59+
}
60+
61+
@Test
62+
public void testEditDistance_OneEmptyString() {
63+
assertEquals(5, EditDistance.editDistance("", "hello"));
64+
assertEquals(7, EditDistance.editDistance("worldly", ""));
65+
}
66+
67+
@Test
68+
public void testEditDistance_OneEmptyString_Memoization() {
69+
int[][] storage = new int[1][6];
70+
;
71+
assertAll("String assertions",
72+
() -> assertEquals(5, EditDistance.editDistance("", "hello", storage)),
73+
() -> assertEquals(0, storage[0][0]),
74+
() -> assertEquals(0, storage[0][1]),
75+
() -> assertEquals(0, storage[0][2]),
76+
() -> assertEquals(0, storage[0][3]),
77+
() -> assertEquals(0, storage[0][4]),
78+
() -> assertEquals(5, storage[0][5])
79+
);
80+
}
81+
82+
@Test
83+
public void testEditDistance_EqualStrings() {
84+
assertEquals(0, EditDistance.editDistance("test", "test"));
85+
assertEquals(0, EditDistance.editDistance("abc", "abc"));
86+
}
87+
88+
@Test
89+
public void testEditDistance_EqualStrings_Memoization() {
90+
int[][] storage = new int[4][4];
91+
assertAll("String assertions",
92+
() -> assertEquals(0, EditDistance.editDistance("abc", "abc", storage)),
93+
() -> assertEquals(0, storage[0][0]),
94+
() -> assertEquals(0, storage[0][1]),
95+
() -> assertEquals(0, storage[0][2]),
96+
() -> assertEquals(0, storage[0][3]),
97+
() -> assertEquals(0, storage[1][0]),
98+
() -> assertEquals(0, storage[1][1]),
99+
() -> assertEquals(0, storage[1][2]),
100+
() -> assertEquals(0, storage[1][3]),
101+
() -> assertEquals(0, storage[2][0]),
102+
() -> assertEquals(0, storage[2][1]),
103+
() -> assertEquals(0, storage[2][2]),
104+
() -> assertEquals(0, storage[2][3]),
105+
() -> assertEquals(0, storage[3][0]),
106+
() -> assertEquals(0, storage[3][1]),
107+
() -> assertEquals(0, storage[3][2]),
108+
() -> assertEquals(0, storage[3][3])
109+
);
110+
}
111+
112+
@Test
113+
public void testEditDistance_OneCharacterDifference() {
114+
assertEquals(1, EditDistance.editDistance("cat", "bat"));
115+
assertEquals(1, EditDistance.editDistance("cat", "cats"));
116+
assertEquals(1, EditDistance.editDistance("cats", "cat"));
117+
}
118+
119+
@Test
120+
public void testEditDistance_OneCharacterDifference_Memoization() {
121+
int[][] storage = new int[3][3];
122+
assertAll("All assertions",
123+
() -> assertEquals(1, EditDistance.editDistance("at", "it", storage)),
124+
() -> assertEquals(0, storage[0][0]),
125+
() -> assertEquals(1, storage[0][1]),
126+
() -> assertEquals(2, storage[0][2]),
127+
() -> assertEquals(1, storage[1][0]),
128+
() -> assertEquals(0, storage[1][1]),
129+
() -> assertEquals(1, storage[1][2]),
130+
() -> assertEquals(2, storage[2][0]),
131+
() -> assertEquals(1, storage[2][1]),
132+
() -> assertEquals(1, storage[2][2])
133+
);
134+
}
135+
136+
@Test
137+
public void testEditDistance_GeneralCases() {
138+
assertEquals(3, EditDistance.editDistance("kitten", "sitting"));
139+
assertEquals(2, EditDistance.editDistance("flaw", "lawn"));
140+
assertEquals(5, EditDistance.editDistance("intention", "execution"));
141+
}
142+
143+
@Test
144+
public void testEditDistance_GeneralCases_Memoization() {
145+
int[][] storage = new int[7][8];
146+
assertEquals(3, EditDistance.editDistance("kitten", "sitting", storage));
147+
assertAll("All assertions",
148+
() -> assertEquals(0, storage[0][0]),
149+
() -> assertEquals(3, storage[6][7])
150+
);
151+
}
15152
}

0 commit comments

Comments
 (0)