|
11 | 11 | class TestLevenshtein(unittest.TestCase):
|
12 | 12 |
|
13 | 13 | def test_levenshtein(self):
|
14 |
| - self.assertEqual(levenshtein('sitting', 'kitten'), 3) |
15 |
| - self.assertEqual(levenshtein('sunday', 'saturday'), 3) |
16 |
| - self.assertEqual(levenshtein('', ''), 0) |
17 |
| - self.assertEqual(levenshtein('sitting', ''), 7) |
18 |
| - self.assertEqual(levenshtein('aabcc', 'bccdd'), 4) |
19 |
| - self.assertEqual(levenshtein('idカード', 'Id番号カード'), 3) |
20 |
| - self.assertEqual(levenshtein('ひだるま', 'けんだま'), 3) |
| 14 | + cases = [ |
| 15 | + ('sitting', 'kitten', 3), |
| 16 | + ('sunday', 'saturday', 3), |
| 17 | + ('', '', 0), |
| 18 | + ('sitting', '', 7), |
| 19 | + ('aabcc', 'bccdd', 4), |
| 20 | + ('idカード', 'Id番号カード', 3), |
| 21 | + ('ひだるま', 'けんだま', 3) |
| 22 | + ] |
| 23 | + for str1, str2, expected in cases: |
| 24 | + with self.subTest(str1=str1, str2=str2): |
| 25 | + self.assertEqual(levenshtein(str1, str2), expected) |
21 | 26 |
|
22 | 27 |
|
23 | 28 | def test_invalid_args(self):
|
24 |
| - self.assertRaises(TypeError, levenshtein, 'abc', 1) |
25 |
| - self.assertRaises(TypeError, levenshtein, 1, 'abc') |
26 |
| - self.assertRaises(TypeError, levenshtein, 5, 1) |
27 |
| - |
| 29 | + cases = [ |
| 30 | + ('abc', 1, TypeError), |
| 31 | + (1, 'abc', TypeError), |
| 32 | + (5, 1, TypeError) |
| 33 | + ] |
| 34 | + for str1, str2, exception in cases: |
| 35 | + with self.subTest(str1=str1, str2=str2): |
| 36 | + with self.assertRaises(exception): |
| 37 | + levenshtein(str1, str2) |
| 38 | + |
28 | 39 |
|
29 | 40 | class TestJaro(unittest.TestCase):
|
30 | 41 |
|
31 | 42 | def test_jaro(self):
|
32 |
| - self.assertEqual(jaro('abc', 'bac'), 0.8888888888888888) |
33 |
| - self.assertEqual(jaro('dicksonx', 'dixon'), 0.7666666666666666) |
34 |
| - self.assertEqual(jaro('dixon', 'dicksonx'), 0.7666666666666666) |
35 |
| - self.assertEqual(jaro('Brian', 'Jesus'), 0.0) |
36 |
| - self.assertEqual(jaro('Thorkel', 'Thorgier'), 0.7797619047619048) |
37 |
| - self.assertEqual(jaro('Dinsdale', 'D'), 0.7083333333333334) |
38 |
| - self.assertEqual(jaro('Carol','elephant'), 0.44166666666666665) |
39 |
| - self.assertEqual(jaro('', ''), 1.0) |
40 |
| - self.assertEqual(jaro('Dinsdale', ''), 0.0) |
41 |
| - self.assertEqual(jaro('','elephant'), 0.0) |
42 |
| - self.assertEqual(jaro('idカード', 'Id番号'), 0.48333333333333334) |
43 |
| - self.assertEqual(jaro('ひだるま', 'けんだま'), 0.6666666666666666) |
| 43 | + cases = [ |
| 44 | + ('abc', 'bac', 0.8888888888888888), |
| 45 | + ('dicksonx', 'dixon', 0.7666666666666666), |
| 46 | + ('dixon', 'dicksonx', 0.7666666666666666), |
| 47 | + ('Brian', 'Jesus', 0.0), |
| 48 | + ('Thorkel', 'Thorgier', 0.7797619047619048), |
| 49 | + ('Dinsdale', 'D', 0.7083333333333334), |
| 50 | + ('Carol','elephant', 0.44166666666666665), |
| 51 | + ('', '', 1.0), |
| 52 | + ('Dinsdale', '', 0.0), |
| 53 | + ('','elephant', 0.0), |
| 54 | + ('idカード', 'Id番号', 0.48333333333333334), |
| 55 | + ('ひだるま', 'けんだま', 0.6666666666666666) |
| 56 | + ] |
| 57 | + for str1, str2, expected in cases: |
| 58 | + with self.subTest(str1=str1, str2=str2): |
| 59 | + self.assertEqual(jaro(str1, str2), expected) |
44 | 60 |
|
45 | 61 |
|
46 | 62 | def test_invalid_args(self):
|
47 |
| - self.assertRaises(TypeError, jaro, 'abc', 1) |
48 |
| - self.assertRaises(TypeError, jaro, 1, 'abc') |
49 |
| - self.assertRaises(TypeError, jaro, 5, 1) |
| 63 | + cases = [ |
| 64 | + ('abc', 1, TypeError), |
| 65 | + (1, 'abc', TypeError), |
| 66 | + (5, 1, TypeError) |
| 67 | + ] |
| 68 | + for str1, str2, exception in cases: |
| 69 | + with self.subTest(str1=str1, str2=str2): |
| 70 | + with self.assertRaises(exception): |
| 71 | + jaro(str1, str2) |
50 | 72 |
|
51 | 73 |
|
52 | 74 | class TestJaroWinkler(unittest.TestCase):
|
53 | 75 |
|
54 | 76 | def test_jaro_winkler(self):
|
55 |
| - self.assertEqual(jaro_winkler('abc', 'bac'), 0.8888888888888888) |
56 |
| - self.assertEqual(jaro_winkler('dicksonx', 'dixon'), 0.8133333333333332) |
57 |
| - self.assertEqual(jaro_winkler('dixon', 'dicksonx'), 0.8133333333333332) |
58 |
| - self.assertEqual(jaro_winkler('Brian', 'Jesus'), 0.0) |
59 |
| - self.assertEqual(jaro_winkler('Thorkel', 'Thorgier'), 0.8678571428571429) |
60 |
| - self.assertEqual(jaro_winkler('Dinsdale', 'D'), 0.7375) |
61 |
| - self.assertEqual(jaro_winkler('Carol','elephant'), 0.44166666666666665) |
62 |
| - self.assertEqual(jaro_winkler('', ''), 1.0) |
63 |
| - self.assertEqual(jaro_winkler('Dinsdale', ''), 0.0) |
64 |
| - self.assertEqual(jaro_winkler('','elephant'), 0.0) |
65 |
| - self.assertEqual(jaro('idカード', 'Id番号'), 0.48333333333333334) |
66 |
| - self.assertEqual(jaro('ひだるま', 'けんだま'), 0.6666666666666666) |
| 77 | + cases = [ |
| 78 | + ('abc', 'bac', 0.8888888888888888), |
| 79 | + ('dicksonx', 'dixon', 0.8133333333333332), |
| 80 | + ('dixon', 'dicksonx', 0.8133333333333332), |
| 81 | + ('Brian', 'Jesus', 0.0), |
| 82 | + ('Thorkel', 'Thorgier', 0.8678571428571429), |
| 83 | + ('Dinsdale', 'D', 0.7375), |
| 84 | + ('Carol','elephant', 0.44166666666666665), |
| 85 | + ('', '', 1.0), |
| 86 | + ('Dinsdale', '', 0.0), |
| 87 | + ('','elephant', 0.0), |
| 88 | + ('idカード', 'Id番号', 0.48333333333333334), |
| 89 | + ('ひだるま', 'けんだま', 0.6666666666666666), |
| 90 | + |
| 91 | + ] |
| 92 | + for str1, str2, expected in cases: |
| 93 | + with self.subTest(str1=str1, str2=str2): |
| 94 | + self.assertEqual(jaro_winkler(str1, str2), expected) |
| 95 | + |
67 | 96 |
|
68 |
| - |
69 | 97 | def test_invalid_args(self):
|
70 |
| - self.assertRaises(TypeError, jaro, 'abc', 1) |
71 |
| - self.assertRaises(TypeError, jaro, 1, 'abc') |
72 |
| - self.assertRaises(TypeError, jaro, 5, 1) |
73 |
| - |
| 98 | + cases = [ |
| 99 | + ('abc', 1, TypeError), |
| 100 | + (1, 'abc', TypeError), |
| 101 | + (5, 1, TypeError) |
| 102 | + ] |
| 103 | + for str1, str2, exception in cases: |
| 104 | + with self.subTest(str1=str1, str2=str2): |
| 105 | + with self.assertRaises(exception): |
| 106 | + jaro_winkler(str1, str2) |
| 107 | + |
74 | 108 |
|
75 | 109 | class TestHamming(unittest.TestCase):
|
76 | 110 |
|
77 | 111 | def test_hamming(self):
|
78 |
| - self.assertEqual(hamming('karolin', 'kathrin'), 3) |
79 |
| - self.assertEqual(hamming('karolin', 'kerstin'), 3) |
80 |
| - self.assertEqual(hamming('kathrin', 'kerstin'), 4) |
81 |
| - self.assertEqual(hamming('1011101', '1001001'), 2) |
82 |
| - self.assertEqual(hamming('2173896', '2233796'), 3) |
83 |
| - self.assertEqual(hamming('Brian', 'Jesus'), 5) |
84 |
| - self.assertEqual(hamming('Brian', 'Brian'), 0) |
| 112 | + cases = [ |
| 113 | + ('karolin', 'kathrin', 3), |
| 114 | + ('karolin', 'kerstin', 3), |
| 115 | + ('kathrin', 'kerstin', 4), |
| 116 | + ('1011101', '1001001', 2), |
| 117 | + ('2173896', '2233796', 3), |
| 118 | + ('Brian', 'Jesus', 5), |
| 119 | + ('Brian', 'Brian', 0), |
| 120 | + ] |
| 121 | + for str1, str2, expected in cases: |
| 122 | + with self.subTest(str1=str1, str2=str2): |
| 123 | + self.assertEqual(hamming(str1, str2), expected) |
85 | 124 |
|
86 | 125 |
|
87 | 126 | def test_invalid_args(self):
|
88 |
| - self.assertRaises(TypeError, hamming, 'abc', 1) |
89 |
| - self.assertRaises(ValueError, hamming, 'abc', 'abcdf') |
| 127 | + cases = [ |
| 128 | + ('abc', 1, TypeError), |
| 129 | + ('abc', 'abcdf', ValueError) |
| 130 | + ] |
| 131 | + for str1, str2, exception in cases: |
| 132 | + with self.subTest(str1=str1, str2=str2): |
| 133 | + with self.assertRaises(exception): |
| 134 | + hamming(str1, str2) |
90 | 135 |
|
91 | 136 |
|
92 | 137 | class TestDamerauLevenshtein(unittest.TestCase):
|
93 | 138 |
|
94 | 139 | def test_damerau_levenshtein(self):
|
95 |
| - self.assertEqual(damerau_levenshtein('abcdef', 'abcfad'), 2) |
96 |
| - self.assertEqual(damerau_levenshtein('ca', 'abc'), 2) |
97 |
| - self.assertEqual(damerau_levenshtein('a cat', 'a abct'), 2) |
98 |
| - self.assertEqual(damerau_levenshtein('a cat', 'an act'), 2) |
99 |
| - self.assertEqual(damerau_levenshtein('ifhs', 'fish'), 2) |
100 |
| - self.assertEqual(damerau_levenshtein('BADC', 'ABCD'), 2) |
101 |
| - self.assertEqual(damerau_levenshtein('ZX', 'XYZ'), 2) |
102 |
| - self.assertEqual(damerau_levenshtein('BADC', ''), 4) |
103 |
| - self.assertEqual(damerau_levenshtein('', 'ABCD'), 4) |
104 |
| - self.assertEqual(damerau_levenshtein('ABCD', 'ABCD'), 0) |
105 |
| - self.assertEqual(damerau_levenshtein('', ''), 0) |
| 140 | + cases = [ |
| 141 | + ('abcdef', 'abcfad', 2), |
| 142 | + ('ca', 'abc', 2), |
| 143 | + ('a cat', 'a abct', 2), |
| 144 | + ('a cat', 'an act', 2), |
| 145 | + ('ifhs', 'fish', 2), |
| 146 | + ('BADC', 'ABCD', 2), |
| 147 | + ('ZX', 'XYZ', 2), |
| 148 | + ('BADC', '', 4), |
| 149 | + ('', 'ABCD', 4), |
| 150 | + ('ABCD', 'ABCD', 0), |
| 151 | + ('', '', 0), |
| 152 | + ] |
| 153 | + for str1, str2, expected in cases: |
| 154 | + with self.subTest(str1=str1, str2=str2): |
| 155 | + self.assertEqual(damerau_levenshtein(str1, str2), expected) |
106 | 156 |
|
107 | 157 |
|
108 | 158 | def test_invalid_args(self):
|
109 |
| - self.assertRaises(TypeError, hamming, 'abc', 1) |
| 159 | + self.assertRaises(TypeError, damerau_levenshtein, 'abc', 1) |
110 | 160 |
|
111 | 161 |
|
112 | 162 | class TestNormalizedLevenshtein(unittest.TestCase):
|
113 | 163 |
|
114 | 164 | def test_normalized_levenshtein(self):
|
115 |
| - self.assertEqual(normalized_levenshtein('アイス', 'ミント'), 1.0) |
116 |
| - self.assertEqual(normalized_levenshtein('チョコレート', 'チョコレートアイス'), 0.3333333333333333) |
117 |
| - self.assertEqual(normalized_levenshtein('dixon', 'dickson'), 0.42857142857142855) |
118 |
| - self.assertEqual(normalized_levenshtein('sunday', 'saturday'), 0.375) |
119 |
| - |
| 165 | + cases = [ |
| 166 | + ('アイス', 'ミント', 1.0), |
| 167 | + ('チョコレート', 'チョコレートアイス', 0.3333333333333333), |
| 168 | + ('dixon', 'dickson', 0.42857142857142855), |
| 169 | + ('sunday', 'saturday', 0.375), |
| 170 | + ] |
| 171 | + for str1, str2, expected in cases: |
| 172 | + with self.subTest(str1=str1, str2=str2): |
| 173 | + self.assertEqual(normalized_levenshtein(str1, str2), expected) |
| 174 | + |
120 | 175 |
|
121 | 176 | def test_invalid_args(self):
|
122 |
| - self.assertRaises(TypeError, levenshtein, 'abc', 1) |
123 |
| - self.assertRaises(TypeError, levenshtein, 1, 'abc') |
124 |
| - self.assertRaises(TypeError, levenshtein, 5, 1) |
| 177 | + cases = [ |
| 178 | + ('abc', 1, TypeError), |
| 179 | + (1, 'abc', TypeError), |
| 180 | + (5, 1, TypeError) |
| 181 | + ] |
| 182 | + for str1, str2, exception in cases: |
| 183 | + with self.subTest(str1=str1, str2=str2): |
| 184 | + with self.assertRaises(exception): |
| 185 | + normalized_levenshtein(str1, str2) |
| 186 | + |
125 | 187 |
|
126 |
| - |
127 | 188 | if __name__ == '__main__':
|
128 | 189 | unittest.main()
|
0 commit comments