Conditions | 4 |
Total Lines | 570 |
Code Lines | 527 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | # -*- coding: utf-8 -*- |
||
37 | def test_dolby(self): |
||
38 | """Test abydos.phonetic.dolby.""" |
||
39 | # Base case |
||
40 | self.assertEqual(dolby(''), '') |
||
41 | |||
42 | # Tests from Dolby (1970) pp. 264--274 |
||
43 | # https://ejournals.bc.edu/ojs/index.php/ital/article/download/5259/4734 |
||
44 | # Checked against Cunningham, et al. (1969) pp. 127--136, as needed. |
||
45 | # https://files.eric.ed.gov/fulltext/ED029679.pdf |
||
46 | test_cases = (('*BL', 'Abel', 'Abele', 'Abell', 'Able'), |
||
47 | ('*BRMS', 'Abrahams', 'Abrams'), |
||
48 | ('*BRMSN', 'Abrahamson', 'Abramson'), |
||
49 | ('*D', 'Eddy', 'Eddie'), |
||
50 | ('*DMNS', 'Edmonds', 'Edmunds'), |
||
51 | ('*DMNSN', 'Edmondson', 'Edmundson'), |
||
52 | ('*DMS', 'Adams', 'Addems'), |
||
53 | ('*GN', 'Eagen', 'Egan', 'Eggen'), |
||
54 | ('*GR', '!Jaeger', 'Yaeger', 'Yeager'), |
||
55 | ('*KN', 'Aiken', 'Aikin', 'Aitken'), |
||
56 | ('*KNS', 'Adkins', 'Akins'), |
||
57 | ('*KR', 'Acker', 'Aker'), |
||
58 | ('*KR', 'Eckard', 'Eckardt', 'Eckart', 'Eckert', |
||
59 | 'Eckhardt'), |
||
60 | ('*KS', 'Oakes', 'Oaks', 'Ochs'), |
||
61 | ('*LBRD', 'Albright', 'Allbright'), |
||
62 | ('*LD', 'Elliot', 'Elliott'), |
||
63 | ('*LN', 'Allan', 'Allen', 'Allyn'), |
||
64 | ('*LSN', 'Ohlsen', 'Olesen', 'Olsen', 'Olson', 'Olsson'), |
||
65 | ('*LVR', 'Oliveira', 'Olivera', 'Olivero'), |
||
66 | ('*MS', 'Ames', 'Eames'), |
||
67 | ('*NGL', 'Engel', 'Engle', 'Ingle'), |
||
68 | ('*NL', 'O\'Neal', 'O\'Neil', 'O\'Neill'), |
||
69 | ('*NRS', 'Andrews', 'Andrus'), |
||
70 | ('*NRSN', 'Andersen', 'Anderson', 'Andreasen'), |
||
71 | ('*NS', 'Ennis', 'Enos'), |
||
72 | # Corrected: 'Enrichsen' below was an error |
||
73 | # (It's correct in Cunningham, et al. 1969.) |
||
74 | ('*RKSN', 'Erichsen', 'Erickson', 'Ericson', 'Ericsson', |
||
75 | 'Eriksen'), |
||
76 | ('*RL', 'Earley', 'Early'), |
||
77 | ('*RN', 'Erwin', 'Irwin'), |
||
78 | ('*RNS', 'Aarons', 'Ahrends', 'Ahrens', 'Arens', |
||
79 | 'Arentz', 'Arons'), |
||
80 | ('*RS', 'Ayers', 'Ayres'), |
||
81 | ('*RVN', 'Ervin', 'Ervine', 'Irvin', 'Irvine'), |
||
82 | ('*RVNG', 'Erving', 'Irving'), |
||
83 | ('*SBRN', 'Osborn', 'Osborne', 'Osbourne', 'Osburn'), |
||
84 | ('B*D', 'Beatie', 'Beattie', 'Beatty', 'Beaty', |
||
85 | 'Beedie'), |
||
86 | ('B*DS', 'Betts', 'Betz'), |
||
87 | ('B*KMN', 'Bachman', 'Bachmann', 'Backman'), |
||
88 | ('B*L', 'Bailey', 'Baillie', 'Bailly', 'Baily', |
||
89 | 'Bayley'), |
||
90 | ('B*L', 'Beal', 'Beale', 'Beall', 'Biehl'), |
||
91 | ('B*L', 'Belew', 'Ballou', 'Bellew'), |
||
92 | ('B*L', 'Buhl', 'Buell'), |
||
93 | ('B*L', 'Belle', 'Bell'), |
||
94 | # Corrected: No reason for D to disappear |
||
95 | ('B*LDN', 'Bolton', 'Boulton'), |
||
96 | ('B*M', 'Baum', 'Bohm', 'Bohme'), |
||
97 | ('B*MN', 'Bauman', 'Bowman'), |
||
98 | ('B*N', 'Bain', 'Bane', 'Bayne'), |
||
99 | ('B*ND', 'Bennet', 'Bennett'), |
||
100 | ('B*R', 'Baer', 'Bahr', 'Baier', 'Bair', 'Bare', 'Bear', |
||
101 | 'Beare', 'Behr', 'Beier', 'Bier', '!Bryer'), |
||
102 | ('B*R', 'Barry', 'Beare', 'Beery', 'Berry'), |
||
103 | ('B*R', 'Bauer', 'Baur', 'Bower'), |
||
104 | ('B*R', 'Bird', 'Burd', 'Byrd'), |
||
105 | ('B*RBR', 'Barbour', 'Barber'), |
||
106 | ('B*RG', 'Berg', 'Bergh', 'Burge'), |
||
107 | ('B*RGR', 'Berger', 'Burger'), |
||
108 | ('B*RK', 'Boerke', 'Birk', 'Bourke', 'Burk', 'Burke'), |
||
109 | ('B*RN', 'Burn', 'Byrne'), |
||
110 | ('B*RNR', 'Bernard', 'Bernhard', 'Bernhardt', |
||
111 | 'Bernhart'), |
||
112 | ('B*RNS', 'Berns', 'Birns', 'Burns', 'Byrns', 'Byrnes'), |
||
113 | ('B*RNSN', 'Bernstein', 'Bornstein'), |
||
114 | # Corrected: 'RCH' -> 'RH' in rule 2 |
||
115 | ('B*RS', 'Bertsch', '!Birch', '!Burch'), |
||
116 | ('BL*KBRN', 'Blackburn', '!Blagburn'), |
||
117 | ('BL*M', 'Blom', 'Bloom', 'Bluhm', 'Blum', 'Blume'), |
||
118 | ('BR*D', 'Brode', 'Brodie', 'Brody'), |
||
119 | ('BR*N', 'Braun', 'Brown', 'Browne'), |
||
120 | ('BR*N', 'Brand', 'Brandt', 'Brant'), |
||
121 | # Corrected: 'Diezt' -> 'D*SD', so reversed zt -> tz |
||
122 | # (Correct in Cunningham, et al. 1969.) |
||
123 | ('D*DS', 'Dietz', 'Ditz'), |
||
124 | ('D*F', 'Duffie', 'Duffy'), |
||
125 | ('D*GN', 'Dougan', 'Dugan', 'Duggan'), |
||
126 | ('D*K', 'Dickey', 'Dicke'), |
||
127 | ('D*KNSN', 'Dickenson', '!Dickerson', 'Dickinson', |
||
128 | '!Dickison'), |
||
129 | ('D*KSN', 'Dickson', 'Dixon', 'Dixson'), |
||
130 | ('D*L', 'Dailey', 'Daily', 'Daley', 'Daly'), |
||
131 | ('D*L', 'Dahl', 'Dahle', 'Dall', 'Doll'), |
||
132 | ('D*L', 'Deahl', 'Deal', 'Diehl'), |
||
133 | ('D*MN', 'Diamond', 'Dimond', 'Dymond'), |
||
134 | ('D*N', 'Dean', 'Deane', 'Deen'), |
||
135 | ('D*N', 'Denney', 'Denny'), |
||
136 | ('D*N', 'Donahoo', 'Donahue', 'Donoho', 'Donohoe', |
||
137 | 'Donohoo,'), |
||
138 | ('D*N', 'Donohue', 'Dunnahoo'), |
||
139 | ('D*N', 'Downey', 'Downie'), |
||
140 | ('D*N', 'Dunn', 'Dunne'), |
||
141 | ('D*NL', 'Donley', 'Donnelley', 'Donnelly'), |
||
142 | ('D*R', 'Daugherty', 'Doherty', 'Dougherty'), |
||
143 | ('D*R', 'Dyar', 'Dyer'), |
||
144 | ('D*RM', 'Derham', 'Durham'), |
||
145 | ('D*VDSN', 'Davidsen', 'Davidson', '!Davison'), |
||
146 | ('D*VS', 'Davies', 'Davis'), |
||
147 | ('DR*SL', 'Driscoll', 'Driskell'), |
||
148 | ('F*', 'Fay', 'Fahay', 'Fahey'), |
||
149 | ('F*FR', 'Fifer', 'Pfeffer', 'Pfeiffer'), |
||
150 | ('F*GN', 'Fagan', 'Feigan', 'Fegan'), |
||
151 | ('F*L', 'Feil', 'Pfeil'), |
||
152 | # Corrected: T -> D after LD -> D |
||
153 | ('F*L', 'Feld', 'Feldt', '!Felt'), |
||
154 | ('F*LKNR', 'Faulkner', 'Falconer'), |
||
155 | ('F*LPS', 'Philips', 'Phillips'), |
||
156 | ('F*NGN', 'Finnegan', 'Finnigan'), |
||
157 | ('F*NL', 'Finlay', 'Finley'), |
||
158 | ('F*RL', 'Farrell', 'Ferrell'), |
||
159 | ('F*RR', 'Ferrara', 'Ferreira', 'Ferriera'), |
||
160 | # Corrected: No reason for S to be eliminated |
||
161 | ('F*RSR', 'Foerster', 'Forester', 'Forrester', |
||
162 | 'Forster'), |
||
163 | ('F*RS', 'Forrest', 'Forest'), |
||
164 | ('F*RS', 'Faris', 'Farriss', 'Ferris', 'Ferriss'), |
||
165 | ('F*RS', 'First', 'Fuerst', 'Furst'), |
||
166 | ('F*SR', 'Fischer', 'Fisher'), |
||
167 | ('FL*N', 'Flinn', 'Flynn'), |
||
168 | ('FL*NGN', 'Flanagan', 'Flanigan', 'Flannigan'), |
||
169 | ('FR*', 'Frei', 'Frey', 'Fry', 'Frye'), |
||
170 | ('FR*DMN', 'Freedman', 'Friedman'), |
||
171 | # Corrected: Fredickson -> Fredrickson |
||
172 | # (Correct in Cunningham, et al. 1969.) |
||
173 | ('FR*DRKSN', 'Frederickson', 'Frederiksen', |
||
174 | 'Fredrickson', 'Fredriksson'), |
||
175 | # Corrected: NK would not reduce to K because of rule 4 |
||
176 | ('FR*NK', 'Franck', 'Frank'), |
||
177 | ('FR*NS', 'France', 'Frantz', 'Franz'), |
||
178 | # Corrected: vowel deletion happens after double |
||
179 | # consonant deletion |
||
180 | ('FR*NSS', 'Frances', 'Francis'), |
||
181 | ('FR*S', 'Freeze', 'Freese', 'Fries'), |
||
182 | ('FR*SR', 'Fraser', 'Frasier', 'Frazer', 'Frazier'), |
||
183 | ('G*D', 'Good', 'Goode'), |
||
184 | ('G*DS', 'Getz', 'Goetz', 'Goetze'), |
||
185 | ('G*F', 'Goff', 'Gough'), |
||
186 | ('G*L', 'Gold', 'Goold', 'Gould'), |
||
187 | ('G*LMR', 'Gilmer', 'Gilmore', 'Gilmour'), |
||
188 | ('G*LR', 'Gallagher', 'Gallaher', 'Galleher'), |
||
189 | ('G*MS', 'Gomes', 'Gomez'), |
||
190 | ('G*NR', 'Guenther', 'Gunther'), |
||
191 | ('G*NSLS', 'Gonzales', 'Gonzalez'), |
||
192 | # Corrected: 'Consalves' for the first case likely a typo |
||
193 | # (Correct in Cunningham, et al. 1969.) |
||
194 | ('G*NSLVS', 'Gonsalves', 'Gonzalves'), |
||
195 | ('G*RD', 'Garratt', 'Garrett'), |
||
196 | ('G*RD', 'Garrity', 'Geraghty', 'Geraty', 'Gerrity'), |
||
197 | ('G*RN', 'Gorden', 'Gordohn', 'Gordon'), |
||
198 | ('G*RNR', 'Gardiner', 'Gardner', 'Gartner'), |
||
199 | ('G*RR', 'Garrard', 'Gerard', 'Gerrard', 'Girard'), |
||
200 | ('G*S', 'Gauss', 'Goss'), |
||
201 | ('GR*', 'Gray', 'Grey'), |
||
202 | ('GR*FD', 'Griffeth', 'Griffith'), |
||
203 | ('GR*N', 'Green', 'Greene'), |
||
204 | ('GR*S', 'Gros', 'Grose', 'Gross'), |
||
205 | ('H*D', 'Hyde', 'Heidt'), |
||
206 | ('H*F', 'Hoff', 'Hough', 'Huff'), |
||
207 | ('H*FMN', 'Hoffman', 'Hoffmann', 'Hofman', 'Hofmann', |
||
208 | 'Huffman'), |
||
209 | ('H*G', 'Hoag', 'Hoge', 'Hogue'), |
||
210 | ('H*GN', 'Hagan', 'Hagen'), |
||
211 | ('H*K', 'Hauch', 'Hauck', 'Hauk', 'Hauke'), |
||
212 | ('H*KSN', 'Hutcheson', 'Hutchison'), |
||
213 | ('H*L', 'Holley', 'Holly'), |
||
214 | ('H*L', 'Holl', 'Hall'), |
||
215 | ('H*L', 'Halley', 'Haley'), |
||
216 | ('H*L', 'Haile', 'Hale'), |
||
217 | ('H*LD', 'Holiday', 'Halliday', 'Holladay', 'Holliday'), |
||
218 | ('H*LG', 'Helwig', 'Hellwig'), |
||
219 | ('H*LM', 'Holm', '!Home'), |
||
220 | ('H*LMS', 'Holmes', '!Homes'), |
||
221 | ('H*LN', 'Highland', 'Hyland'), |
||
222 | ('H*M', 'Ham', 'Hamm'), |
||
223 | ('H*MR', 'Hammar', 'Hammer'), |
||
224 | ('H*N', 'Hanna', 'Hannah'), |
||
225 | ('H*N', 'Hahn', 'Hahne', 'Hann', 'Haun'), |
||
226 | ('H*NN', 'Hanan', 'Hannan', 'Hannon'), |
||
227 | ('H*NRKS', 'Hendricks', 'Hendrix', 'Henriques'), |
||
228 | ('H*NRKSN', 'Hendrickson', 'Henriksen', 'Henrikson'), |
||
229 | ('H*NS', 'Heintz', 'Heinz', 'Heinze', 'Hindes', 'Hinds', |
||
230 | 'Hines', 'Hinze'), |
||
231 | ('H*NS', 'Haines', 'Haynes'), |
||
232 | ('H*NSN', 'Henson', 'Hansen', 'Hanson', 'Hanssen', |
||
233 | 'Hansson', 'Hanszen'), |
||
234 | ('H*R', 'Herd', 'Heard', 'Hird', 'Hurd'), |
||
235 | ('H*R', 'Hart', 'Hardt', 'Harte', 'Heart'), |
||
236 | ('H*R', 'Hare', 'Hair'), |
||
237 | ('H*R', 'Hardey', 'Hardie', 'Hardy'), |
||
238 | ('H*RMN', 'Hartman', 'Hardmen', 'Hardman', 'Hartmann'), |
||
239 | ('H*RMN', 'Herman', 'Hermann', 'Herrmann'), |
||
240 | ('H*RMN', 'Harman', 'Harmon'), |
||
241 | ('H*RN', 'Heron', 'Herrin', 'Herron'), |
||
242 | ('H*RN', 'Hardin', 'Harden'), |
||
243 | ('H*RN', 'Horn', 'Horne'), |
||
244 | ('H*RNGDN', 'Herrington', 'Harrington'), |
||
245 | ('H*S', 'Haas', 'Haase', 'Hasse'), |
||
246 | ('H*S', 'Howes', 'House', 'Howse'), |
||
247 | ('H*S', 'Hays', 'Hayes'), |
||
248 | ('H*SN', 'Houston', 'Huston'), |
||
249 | ('H*VR', 'Hoover', 'Hover'), |
||
250 | ('J*', 'Jew', 'Jue'), |
||
251 | ('J*FR', 'Jeffery', 'Jeffrey'), |
||
252 | ('J*FRS', 'Jefferies', 'Jefferis', 'Jefferys', |
||
253 | 'Jeffreys'), |
||
254 | ('J*KB', 'Jacobi', 'Jacoby'), |
||
255 | ('J*KBSN', 'Jacobsen', 'Jacobson', 'Jackobsen'), |
||
256 | ('J*KS', 'Jacques', 'Jacks', 'Jaques'), |
||
257 | ('J*L', 'Jewell', 'Juhl'), |
||
258 | ('J*MS', 'Jaimes', 'James'), |
||
259 | ('J*MSN', 'Jameson', 'Jamieson', 'Jamison'), |
||
260 | ('J*NSN', 'Jahnsen', 'Jansen', 'Jansohn', 'Janssen', |
||
261 | 'Jansson,', 'Janzen', 'Jensen', 'Jenson'), |
||
262 | ('J*S', 'Joice', 'Joyce'), |
||
263 | ('K*', 'Kay', 'Kaye'), |
||
264 | ('K*F', 'Coffee', 'Coffey'), |
||
265 | ('K*FMN', 'Coffman', 'Kauffman', 'Kaufman', 'Kaufmann'), |
||
266 | ('K*K', 'Cook', 'Cooke', 'Koch', 'Koche'), |
||
267 | ('K*K', 'Cook', 'Cooke', 'Koch', 'Koche'), |
||
268 | ('K*L', 'Cole', 'Kohl', 'Koll'), |
||
269 | ('K*L', 'Cole', 'Kohl', 'Koll'), |
||
270 | ('K*L', 'Kelley', 'Kelly'), |
||
271 | ('K*LMN', 'Coleman', 'Colman'), |
||
272 | ('K*LR', 'Koehler', 'Koeller', 'Kohler', 'Koller'), |
||
273 | ('K*MBRLN', 'Chamberlain', 'Chamberlin'), |
||
274 | ('K*MBS', 'Combs', 'Coombes', 'Coombs'), |
||
275 | ('K*MP', 'Camp', 'Kampe', 'Kampf'), |
||
276 | ('K*MPS', 'Campos', 'Campus'), |
||
277 | ('K*N', 'Cahn', 'Conn', 'Kahn'), |
||
278 | ('K*N', 'Cahen', 'Cain', 'Caine', 'Cane', 'Kain', |
||
279 | 'Kane'), |
||
280 | ('K*N', 'Chin', 'Chinn'), |
||
281 | ('K*N', 'Chaney', 'Cheney'), |
||
282 | ('K*N', 'Coen', 'Cohan', 'Cohen', 'Cohn', 'Cone', |
||
283 | 'Koehn', 'Kahn'), |
||
284 | ('K*N', 'Coon', 'Kuhn', 'Kuhne'), |
||
285 | ('K*N', 'Kenney', 'Kenny', 'Kinney'), |
||
286 | ('K*NL', 'Conley', 'Conly', 'Connelly', 'Connolly'), |
||
287 | ('K*NR', 'Conner', 'Connor'), |
||
288 | ('K*NS', 'Coons', 'Koontz', 'Kuhns', 'Kuns', 'Kuntz', |
||
289 | 'Kunz'), |
||
290 | ('K*P', 'Coop', 'Co-op', 'Coope', 'Coupe', 'Koop'), |
||
291 | ('K*PL', 'Chapel', 'Chapell', 'Chappel', 'Chappell', |
||
292 | 'Chappelle', 'Chapple'), |
||
293 | ('K*R', 'Carrie', 'Carey', 'Cary'), |
||
294 | ('K*R', 'Corey', 'Cory'), |
||
295 | ('K*R', 'Carr', 'Kar', 'Karr'), |
||
296 | # Corrected: No reason to strip S |
||
297 | ('K*RS', 'Kurtz', 'Kurz'), |
||
298 | ('K*R', 'Kehr', 'Ker', 'Kerr'), |
||
299 | ('K*RD', 'Cartwright', 'Cortright'), |
||
300 | # Corrected: No reason to strip D |
||
301 | ('K*RLDN', 'Carleton', 'Carlton'), |
||
302 | # Corrected: CE -> SE |
||
303 | ('K*RN', 'Carney', '!Cerney', 'Kearney'), |
||
304 | # Corrected: RC -> R |
||
305 | ('K*RSNR', 'Kirschner', '!Kirchner'), |
||
306 | ('K*S', 'Chace', 'Chase'), |
||
307 | ('K*S', 'Cass', 'Kass'), |
||
308 | ('K*S', 'Kees', 'Keyes', 'Keys'), |
||
309 | ('K*SL', 'Cassel', 'Cassell', 'Castle'), |
||
310 | ('K*SLR', 'Kesler', 'Kessler', 'Kestler'), |
||
311 | ('K*SR', 'Kaiser', 'Kayser', 'Keizer', 'Keyser', |
||
312 | 'Kieser', 'Kiser', 'Kizer'), |
||
313 | ('KL*N', 'Cline', 'Klein', 'Kleine', 'Kline'), |
||
314 | ('KL*RK', 'Clark', 'Clarke'), |
||
315 | ('KL*SN', 'Claussen', 'Clausen', 'Clawson', 'Closson'), |
||
316 | ('KR*', 'Crow', 'Crowe'), |
||
317 | ('KR*GR', 'Krieger', 'Kroeger', 'Krueger', 'Kruger'), |
||
318 | ('KR*MR', 'Creamer', 'Cramer', 'Kraemer', 'Kramer', |
||
319 | 'Kremer'), |
||
320 | ('KR*N', 'Craine', 'Crane'), |
||
321 | ('KR*S', 'Christie', 'Christy', 'Kristee'), |
||
322 | ('KR*S', 'Crouss', 'Kraus', 'Krausch', 'Krause', |
||
323 | 'Krouse'), |
||
324 | ('KR*S', 'Cross', 'Krost'), |
||
325 | ('KR*S', 'Crews', 'Cruz', 'Kruse'), |
||
326 | ('KR*SNSN', 'Christensen', 'Christiansen', |
||
327 | 'Christianson'), |
||
328 | ('L*', 'Loe', 'Loewe', 'Low', 'Lowe'), |
||
329 | ('L*', 'Lea', 'Lee', '!Leigh'), |
||
330 | ('L*D', 'Lloyd', 'Loyd'), |
||
331 | ('L*DL', 'Litle', 'Littell', 'Little', 'Lytle'), |
||
332 | ('L*DRMN', 'Ledterman', 'Letterman'), |
||
333 | ('L*K', 'Leach', 'Leech', 'Leitch'), |
||
334 | ('L*KS', 'Lucas', 'Lukas'), |
||
335 | ('L*LN', 'Laughlin', 'Loughlin'), |
||
336 | ('L*LR', 'Lawler', 'Lawlor'), |
||
337 | ('L*MB', 'Lamb', '!Lamm'), |
||
338 | ('L*MN', 'Lemen', 'Lemmon', 'Lemon'), |
||
339 | ('L*MN', 'Layman', 'Lehman', 'Lehmann'), |
||
340 | ('L*N', 'Lind', 'Lynd', 'Lynde'), |
||
341 | ('L*N', 'Lion', 'Lyon'), |
||
342 | ('L*N', 'Lin', 'Linn', 'Lynn', 'Lynne'), |
||
343 | # Corrected: NG -> NG (!N) |
||
344 | ('L*N', 'Lain', 'Laine', '!Laing', 'Lane', 'Layne'), |
||
345 | ('L*NG', 'Lang', 'Lange'), |
||
346 | ('L*NN', 'London', 'Lundin'), |
||
347 | ('L*NS', 'Lindsay', 'Lindsey', '!Lindsley', '!Linsley'), |
||
348 | ('L*R', 'Lawry', 'Lowery', 'Lowrey', 'Lowry'), |
||
349 | ('L*RNS', 'Lawrence', 'Lowrance'), |
||
350 | ('L*RNS', 'Laurence', 'Lawrance', 'Lawrence', 'Lorence', |
||
351 | 'Lorenz'), |
||
352 | ('L*RSN', 'Larsen', 'Larson'), |
||
353 | ('L*S', 'Lewis', 'Louis', 'Luis', 'Luiz'), |
||
354 | ('L*S', 'Lacey', 'Lacy'), |
||
355 | ('L*SR', '!Leicester', 'Lester'), |
||
356 | ('L*V', 'Levey', 'Levi', 'Levy'), |
||
357 | ('L*VD', 'Leavett', 'Leavitt', 'Levit'), |
||
358 | ('L*VL', 'Lavell', 'Lavelle', 'Leavelle', 'Loveall', |
||
359 | 'Lovell'), |
||
360 | ('L*VN', 'Lavin', 'Levin', 'Levine'), |
||
361 | ('M*D', 'Mead', 'Meade'), |
||
362 | # Corrected: RT*N -> R*N -> RN |
||
363 | ('M*RN', '!Moretton', 'Morton'), |
||
364 | ('M*DS', 'Mathews', 'Matthews'), |
||
365 | ('M*DSN', 'Madison', 'Madsen', 'Matson', 'Matteson', |
||
366 | 'Mattison', 'Mattson'), |
||
367 | ('M*KL', 'Michael', 'Michel'), |
||
368 | ('M*KM', 'Meacham', 'Mechem'), |
||
369 | # Corrected: RQ*S -> RKS, not KS |
||
370 | ('M*RKS', 'Marques', 'Marquez', 'Marquis', 'Marquiss'), |
||
371 | # Corrected: RKS does not compress to KS |
||
372 | ('M*RKS', 'Marcks', 'Marks', 'Marx'), |
||
373 | ('M*LN', 'Maloney', 'Moloney', 'Molony'), |
||
374 | ('M*LN', 'Mullan', 'Mullen', 'Mullin'), |
||
375 | ('M*LR', 'Mallery', 'Mallory'), |
||
376 | ('M*LR', 'Moeller', 'Moller', 'Mueller', 'Muller'), |
||
377 | ('M*LR', 'Millar', 'Miller'), |
||
378 | ('M*LS', 'Miles', 'Myles'), |
||
379 | ('M*N', 'Mahan', 'Mann'), |
||
380 | ('M*NR', 'Miner', 'Minor'), |
||
381 | ('M*NR', 'Monroe', 'Munro'), |
||
382 | ('M*NSN', 'Monson', 'Munson'), |
||
383 | ('M*R', 'Murray', 'Murrey'), |
||
384 | ('M*R', 'Maher', 'Maier', 'Mayer'), |
||
385 | ('M*R', 'Mohr', 'Moor', 'Moore'), |
||
386 | # Corrected: No reason to eliminate final S |
||
387 | ('M*RS', 'Meyers', 'Myers'), |
||
388 | ('M*R', 'Meier', 'Meyer', 'Mieir', 'Myhre'), |
||
389 | ('M*RF', 'Murphey', 'Murphy'), |
||
390 | ('M*RL', 'Merrell', 'Merrill'), |
||
391 | ('M*RN', 'Marten', 'Martin', 'Martine', 'Martyn'), |
||
392 | ('M*RS', 'Meyers', 'Myers'), |
||
393 | ('M*RS', 'Maurice', 'Morris', 'Morse'), |
||
394 | ('MK*', 'McCoy', 'McCaughey'), |
||
395 | ('MK*', 'Magee', 'McGee', 'McGehee', 'McGhie'), |
||
396 | ('MK*', 'Mackey', 'MacKay', 'Mackie', 'McKay'), |
||
397 | ('MK*', 'McCue', '!McHugh'), |
||
398 | ('MK*L', 'Magill', 'McGill'), |
||
399 | ('MK*LF', 'McCollough', '!McCullah', 'McCullough'), |
||
400 | ('MK*LM', 'McCallum', 'McCollum', 'McColm'), |
||
401 | ('MK*N', 'McKenney', 'McKinney'), |
||
402 | ('MK*NR', 'Macintyre', 'McEntire', 'Mcintire', |
||
403 | 'Mcintyre'), |
||
404 | ('MK*NS', 'MacKenzie', 'McKenzie'), |
||
405 | ('MK*NS', 'Maginnis', 'McGinnis', 'McGuinness', |
||
406 | 'Mcinnes', 'Mcinnis'), |
||
407 | ('MK*R', 'Maguire', 'McGuire'), |
||
408 | ('MK*R', 'McCarthy', 'McCarty'), |
||
409 | ('MKD*NL', 'MacDonald', 'McDonald', 'McDonnell'), |
||
410 | ('MKF*RLN', 'MacFarland', 'MacFarlane', 'McFarland', |
||
411 | 'McFarlane'), |
||
412 | ('MKF*RSN', 'MacPherson', 'McPherson'), |
||
413 | ('MKL*D', 'MacLeod', 'McCloud', 'McLeod'), |
||
414 | ('MKL*KLN', 'MacLachlan', 'Maclachlin', 'McLachlan', |
||
415 | '!McLaughlin,', '!McLoughlin'), |
||
416 | ('MKL*LN', 'McClellan', 'McClelland', 'McLellan'), |
||
417 | ('MKL*N', 'McClain', 'McClaine', 'McLain', 'McLane'), |
||
418 | ('MKL*N', 'MacLean', 'McClean', 'McLean'), |
||
419 | ('MKL*S', 'McCloskey', 'McClosky', 'McCluskey'), |
||
420 | ('MKM*LN', 'MacMillan', 'McMillan', 'McMillin'), |
||
421 | ('MKN*L', 'MacNeal', 'McNeal', 'McNeil', 'McNeill'), |
||
422 | ('MKR*D', 'Magrath', 'McGrath'), |
||
423 | ('N*KL', 'Nichol', 'Nicholl', 'Nickel', 'Nickle', |
||
424 | 'Nicol', 'Nicoll'), |
||
425 | ('N*KLS', 'Nicholls', 'Nichols', 'Nickels', 'Nickles', |
||
426 | 'Nicols'), |
||
427 | ('N*KLS', 'Nicholas', 'Nicolas'), |
||
428 | ('N*KLSN', 'Nicholsen', 'Nicholson', 'Nicolaisen', |
||
429 | 'Nicolson'), |
||
430 | ('N*KSN', 'Nickson', 'Nixon'), |
||
431 | ('N*L', 'Neal', 'Neale', 'Neall', 'Neel', 'Neil', |
||
432 | 'Neill'), |
||
433 | ('N*LSN', 'Neilsen', 'Neilson', 'Nelsen', 'Nelson', |
||
434 | 'Nielsen', 'Nielson,', 'Nilson', 'Nilssen', 'Nilsson'), |
||
435 | ('N*MN', 'Neumann', 'Newman'), |
||
436 | ('N*RS', 'Norris', 'Nourse'), |
||
437 | ('N*SBD', 'Nesbit', 'Nesbitt', 'Nisbet'), |
||
438 | ('P*D', 'Pettee', 'Petty'), |
||
439 | ('P*DRSN', 'Peterson', 'Pederson', 'Pedersen', |
||
440 | 'Petersen', 'Petterson'), |
||
441 | ('P*G', 'Page', 'Paige'), |
||
442 | ('P*LK', 'Polak', 'Pollack', 'Pollak', 'Pollock'), |
||
443 | ('P*LSN', 'Polson', 'Paulsen', 'Paulson', 'Poulsen', |
||
444 | 'Poulsson'), |
||
445 | ('P*N', 'Paine', 'Payn', 'Payne'), |
||
446 | ('P*R', 'Parry', 'Perry'), |
||
447 | ('P*R', 'Parr', 'Paar'), |
||
448 | ('P*RK', 'Park', 'Parke'), |
||
449 | ('P*RKS', 'Parks', 'Parkes'), |
||
450 | # Corrected: RC -> R |
||
451 | ('P*R', 'Pierce', 'Pearce', 'Peirce', '!Piers'), |
||
452 | ('P*RS', 'Parish', 'Parrish'), |
||
453 | ('P*RS', 'Paris', 'Parris'), |
||
454 | ('P*RSN', 'Pierson', 'Pearson', 'Pehrson', 'Peirson'), |
||
455 | ('PR*KR', 'Prichard', 'Pritchard'), |
||
456 | ('PR*NS', 'Prince', 'Prinz'), |
||
457 | ('PR*R', 'Prior', 'Pryor'), |
||
458 | ('R*', 'Roe', 'Rowe'), |
||
459 | ('R*', 'Rae', 'Ray', 'Raye', 'Rea', 'Rey', 'Wray'), |
||
460 | ('R*BNSN', 'Robinson', '!Robison'), |
||
461 | ('R*D', 'Rothe', 'Roth'), |
||
462 | ('R*D', 'Rudd', 'Rood', 'Rude'), |
||
463 | ('R*D', 'Reed', 'Read', 'Reade', 'Reid'), |
||
464 | ('R*DR', 'Rider', 'Ryder'), |
||
465 | ('R*DS', 'Rhoades', 'Rhoads', 'Rhodes'), |
||
466 | ('R*GN', 'Regan', 'Ragon', 'Reagan'), |
||
467 | # Corrected: No reason to drop final S |
||
468 | ('R*GRS', 'Rodgers', 'Rogers'), |
||
469 | ('R*K', 'Richey', 'Ritchey', 'Ritchie'), |
||
470 | ('R*K', 'Reich', 'Reiche'), |
||
471 | ('R*KR', 'Reichardt', 'Richert', 'Rickard'), |
||
472 | ('R*L', 'Reilley', 'Reilly', 'Reilli', 'Riley'), |
||
473 | # Corrected: T -> D |
||
474 | ('R*MNGDN', 'Remington', 'Rimington'), |
||
475 | ('R*MR', 'Reamer', 'Reimer', 'Riemer', 'Rimmer'), |
||
476 | ('R*MS', 'Ramsay', 'Ramsey'), |
||
477 | ('R*N', 'Rhein', 'Rhine', 'Ryan'), |
||
478 | ('R*NR', 'Reinhard', 'Reinhardt', 'Reinhart', |
||
479 | 'Rhinehart', 'Rinehart'), |
||
480 | ('R*S', 'Reas', 'Reece', 'Rees', 'Reese', 'Reis', |
||
481 | 'Reiss', 'Ries'), |
||
482 | ('R*S', '!Rauch', 'Rausch', '!Roach', '!Roche', 'Roush'), |
||
483 | ('R*S', 'Rush', 'Rusch'), |
||
484 | ('R*S', 'Russ', 'Rus'), |
||
485 | ('R*VS', 'Reaves', 'Reeves'), |
||
486 | ('S*BR', 'Seibert', 'Siebert'), |
||
487 | ('S*FL', 'Schofield', 'Scofield'), |
||
488 | ('S*FN', 'Stefan', 'Steffan', 'Steffen', 'Stephan', |
||
489 | 'Stephen'), |
||
490 | ('S*FNS', 'Steffens', 'Stephens', '!Stevens'), |
||
491 | ('S*FNSN', 'Steffensen', 'Steffenson', 'Stephenson', |
||
492 | '!Stevenson'), |
||
493 | ('S*FR', 'Schaefer', 'Schaeffer', 'Schafer', 'Schaffer', |
||
494 | 'Schafer,', 'Shaffer', 'Sheaffer'), |
||
495 | ('S*FR', 'Stauffer', 'Stouffer'), |
||
496 | ('S*GL', 'Siegal', 'Sigal'), |
||
497 | ('S*GLR', 'Sigler', 'Ziegler'), |
||
498 | ('S*K', 'Schuck', 'Shuck'), |
||
499 | ('S*KS', 'Sachs', 'Sacks', 'Saks', 'Sax', 'Saxe'), |
||
500 | ('S*L', 'Seeley', 'Seely', 'Seley'), |
||
501 | ('S*L', 'Schell', 'Shell'), |
||
502 | ('S*LR', 'Schuler', 'Schuller'), |
||
503 | # Corrected: LD -> L precedes T -> D |
||
504 | ('S*LDS', 'Schultz', 'Schultze', '!Schulz', '!Schulze', |
||
505 | 'Shults', 'Shultz'), |
||
506 | ('S*LV', 'Silva', 'Sylva'), |
||
507 | ('S*LVR', 'Silveira', 'Silvera', 'Silveria'), |
||
508 | ('S*MKR', 'Schomaker', 'Schumacher', 'Schumaker', |
||
509 | 'Shoemaker,', 'Shumaker'), |
||
510 | ('S*MN', 'Simon', 'Symon'), |
||
511 | ('S*MN', 'Seaman', 'Seemann', 'Semon'), |
||
512 | ('S*MRS', 'Somers', 'Sommars', 'Sommers', 'Summers'), |
||
513 | ('S*MS', 'Simms', 'Sims'), |
||
514 | ('S*N', 'Stein', 'Stine'), |
||
515 | ('S*N', 'Sweeney', 'Sweeny', 'Sweney'), |
||
516 | ('S*NR', 'Senter', 'Center'), |
||
517 | ('S*NRS', 'Sanders', 'Saunders'), |
||
518 | ('S*PR', 'Shepard', '!Shephard', '!Shepheard', |
||
519 | '!Shepherd', 'Sheppard'), |
||
520 | ('S*R', 'Stahr', 'Star', 'Starr'), |
||
521 | ('S*R', 'Stewart', 'Stuart'), |
||
522 | ('S*R', 'Storey', 'Story'), |
||
523 | ('S*R', 'Saier', 'Sayre'), |
||
524 | # Corrected: No reason to strip final S |
||
525 | ('S*RS', 'Schwartz', 'Schwarz', 'Schwarze', 'Swartz'), |
||
526 | ('S*RL', 'Schirle', 'Shirley'), |
||
527 | ('S*RLNG', 'Sterling', 'Stirling'), |
||
528 | ('S*RMN', 'Scheuermann', 'Schurman', 'Sherman'), |
||
529 | ('S*RN', 'Stearn', 'Stern'), |
||
530 | ('S*RR', 'Scherer', 'Shearer', 'Sharer', 'Sherer', |
||
531 | 'Sheerer'), |
||
532 | ('S*S', 'Sousa', 'Souza'), |
||
533 | ('SM*D', 'Smith', 'Smyth', 'Smythe'), |
||
534 | ('SM*D', 'Schmid', 'Schmidt', 'Schmit', 'Schmitt', |
||
535 | 'Smit'), |
||
536 | ('SN*DR', 'Schneider', 'Schnieder', 'Snaider', 'Snider', |
||
537 | 'Snyder'), |
||
538 | ('SN*L', 'Schnell', 'Snell'), |
||
539 | ('SP*LNG', 'Spalding', 'Spaulding'), |
||
540 | ('SP*R', 'Spear', 'Speer', '!Speirer'), |
||
541 | # Corrected: No reason to strip final S |
||
542 | ('SP*RS', 'Spears', 'Speers'), |
||
543 | ('SR*DR', 'Schroder', 'Schroeder', 'Schroeter'), |
||
544 | ('SR*DR', 'Schrader', 'Shrader'), |
||
545 | # Corrected: Everywhere else, rule 3 applies to char 1 |
||
546 | ('D*D', 'Tait', 'Tate'), |
||
547 | ('D*MSN', 'Thomason', '!Thompson', 'Thomsen', 'Thomson', |
||
548 | 'Tomson'), |
||
549 | ('D*RL', 'Terrel', 'Terrell', 'Terrill'), |
||
550 | ('DR*S', 'Tracey', 'Tracy'), |
||
551 | ('V*L', 'Vail', 'Vaile', 'Vale'), |
||
552 | ('V*L', 'Valley', 'Valle'), |
||
553 | ('V*R', 'Vieira', 'Vierra'), |
||
554 | ('W*D', 'White', 'Wight'), |
||
555 | ('W*DKR', 'Whitacre', 'Whitaker', 'Whiteaker', |
||
556 | 'Whittaker'), |
||
557 | ('W*DL', 'Whiteley', 'Whitley'), |
||
558 | ('W*DMN', 'Whitman', 'Wittman'), |
||
559 | ('W*DR', 'Woodard', 'Woodward'), |
||
560 | ('W*DRS', 'Waters', 'Watters'), |
||
561 | ('W*GNR', 'Wagener', 'Waggener', 'Wagoner', 'Wagner', |
||
562 | 'Wegner,', 'Waggoner'), |
||
563 | ('W*L', 'Willey', 'Willi'), |
||
564 | ('W*L', 'Wiley', 'Wylie'), |
||
565 | ('W*L', 'Wahl', 'Wall'), |
||
566 | ('W*LBR', 'Wilber', 'Wilbur'), |
||
567 | ('W*LF', 'Wolf', 'Wolfe', 'Wolff', 'Woolf', 'Woulfe', |
||
568 | 'Wulf', 'Wulff'), |
||
569 | ('W*LKNS', 'Wilkens', 'Wilkins'), |
||
570 | ('W*LKS', 'Wilkes', 'Wilks'), |
||
571 | ('W*LN', 'Whalen', 'Whelan'), |
||
572 | # Corrected: LD -> L precedes T -> D |
||
573 | ('W*LDR', 'Walter', 'Walther', 'Wolter'), |
||
574 | ('W*LDRS', 'Walters', 'Walthers', 'Wolters'), |
||
575 | ('W*LS', 'Wallace', 'Wallis'), |
||
576 | ('W*LS', 'Welch', 'Welsh'), |
||
577 | ('W*LS', 'Welles', 'Wells'), |
||
578 | ('W*LSN', 'Willson', 'Wilson'), |
||
579 | ('W*N', 'Winn', 'Wynn', 'Wynne'), |
||
580 | ('W*R', 'Worth', 'Wirth'), |
||
581 | ('W*R', 'Ware', 'Wear', 'Weir', 'Wier'), |
||
582 | ('W*RL', 'Wehrle', 'Wehrlie', 'Werle', 'Worley'), |
||
583 | ('W*RNR', 'Warner', 'Werner'), |
||
584 | ('W*S', 'Weis', 'Weiss', 'Wiese', 'Wise', 'Wyss'), |
||
585 | ('W*SMN', 'Weismann', 'Weissman', 'Weseman', 'Wiseman,', |
||
586 | 'Wismonn', 'Wissman')) |
||
587 | |||
588 | for tests in test_cases: |
||
589 | result, names = tests[0], tests[1:] |
||
590 | for name in names: |
||
591 | if name[0] == '!': |
||
592 | self.assertNotEqual(result, dolby(name[1:])) |
||
593 | else: |
||
594 | self.assertEqual(result, dolby(name)) |
||
595 | |||
596 | # Additional tests to improve coverage |
||
597 | self.assertEqual(dolby('Rune'), 'R*N') |
||
598 | self.assertEqual(dolby('Rune', keep_vowels=True), 'R*N*') |
||
599 | self.assertEqual(dolby('Rune', vowel_char=''), 'RN') |
||
600 | self.assertEqual(dolby('Rune', vowel_char='A'), 'RAN') |
||
601 | self.assertEqual(dolby('Rune', max_length=2), 'R*') |
||
602 | self.assertEqual(dolby('Rune', max_length=2), 'R*') |
||
603 | self.assertEqual(dolby('Wassermann', max_length=4), 'W*SR') |
||
604 | self.assertEqual(dolby('Wassermanns', max_length=4, keep_vowels=True), |
||
605 | 'W*S*') |
||
606 | self.assertEqual(dolby('Wassermanns'), 'W*SRMNS') |
||
607 | |||
611 |