@@ -181,6 +181,19 @@ def test_count(self):
181181 self .checkequalnofix (3 , 'aaa' , 'count' , 'a' , - 10 )
182182 self .checkequalnofix (2 , 'aaa' , 'count' , 'a' , 0 , - 1 )
183183 self .checkequalnofix (0 , 'aaa' , 'count' , 'a' , 0 , - 10 )
184+ # test mixed kinds
185+ self .checkequal (10 , '\u0102 ' + 'a' * 10 , 'count' , 'a' )
186+ self .checkequal (10 , '\U00100304 ' + 'a' * 10 , 'count' , 'a' )
187+ self .checkequal (10 , '\U00100304 ' + '\u0102 ' * 10 , 'count' , '\u0102 ' )
188+ self .checkequal (0 , 'a' * 10 , 'count' , '\u0102 ' )
189+ self .checkequal (0 , 'a' * 10 , 'count' , '\U00100304 ' )
190+ self .checkequal (0 , '\u0102 ' * 10 , 'count' , '\U00100304 ' )
191+ self .checkequal (10 , '\u0102 ' + 'a_' * 10 , 'count' , 'a_' )
192+ self .checkequal (10 , '\U00100304 ' + 'a_' * 10 , 'count' , 'a_' )
193+ self .checkequal (10 , '\U00100304 ' + '\u0102 _' * 10 , 'count' , '\u0102 _' )
194+ self .checkequal (0 , 'a' * 10 , 'count' , 'a\u0102 ' )
195+ self .checkequal (0 , 'a' * 10 , 'count' , 'a\U00100304 ' )
196+ self .checkequal (0 , '\u0102 ' * 10 , 'count' , '\u0102 \U00100304 ' )
184197
185198 def test_find (self ):
186199 string_tests .CommonTest .test_find (self )
@@ -199,6 +212,19 @@ def test_find(self):
199212
200213 self .assertRaises (TypeError , 'hello' .find )
201214 self .assertRaises (TypeError , 'hello' .find , 42 )
215+ # test mixed kinds
216+ self .checkequal (100 , '\u0102 ' * 100 + 'a' , 'find' , 'a' )
217+ self .checkequal (100 , '\U00100304 ' * 100 + 'a' , 'find' , 'a' )
218+ self .checkequal (100 , '\U00100304 ' * 100 + '\u0102 ' , 'find' , '\u0102 ' )
219+ self .checkequal (- 1 , 'a' * 100 , 'find' , '\u0102 ' )
220+ self .checkequal (- 1 , 'a' * 100 , 'find' , '\U00100304 ' )
221+ self .checkequal (- 1 , '\u0102 ' * 100 , 'find' , '\U00100304 ' )
222+ self .checkequal (100 , '\u0102 ' * 100 + 'a_' , 'find' , 'a_' )
223+ self .checkequal (100 , '\U00100304 ' * 100 + 'a_' , 'find' , 'a_' )
224+ self .checkequal (100 , '\U00100304 ' * 100 + '\u0102 _' , 'find' , '\u0102 _' )
225+ self .checkequal (- 1 , 'a' * 100 , 'find' , 'a\u0102 ' )
226+ self .checkequal (- 1 , 'a' * 100 , 'find' , 'a\U00100304 ' )
227+ self .checkequal (- 1 , '\u0102 ' * 100 , 'find' , '\u0102 \U00100304 ' )
202228
203229 def test_rfind (self ):
204230 string_tests .CommonTest .test_rfind (self )
@@ -214,6 +240,19 @@ def test_rfind(self):
214240 self .checkequalnofix (9 , 'abcdefghiabc' , 'rfind' , 'abc' )
215241 self .checkequalnofix (12 , 'abcdefghiabc' , 'rfind' , '' )
216242 self .checkequalnofix (12 , 'abcdefghiabc' , 'rfind' , '' )
243+ # test mixed kinds
244+ self .checkequal (0 , 'a' + '\u0102 ' * 100 , 'rfind' , 'a' )
245+ self .checkequal (0 , 'a' + '\U00100304 ' * 100 , 'rfind' , 'a' )
246+ self .checkequal (0 , '\u0102 ' + '\U00100304 ' * 100 , 'rfind' , '\u0102 ' )
247+ self .checkequal (- 1 , 'a' * 100 , 'rfind' , '\u0102 ' )
248+ self .checkequal (- 1 , 'a' * 100 , 'rfind' , '\U00100304 ' )
249+ self .checkequal (- 1 , '\u0102 ' * 100 , 'rfind' , '\U00100304 ' )
250+ self .checkequal (0 , '_a' + '\u0102 ' * 100 , 'rfind' , '_a' )
251+ self .checkequal (0 , '_a' + '\U00100304 ' * 100 , 'rfind' , '_a' )
252+ self .checkequal (0 , '_\u0102 ' + '\U00100304 ' * 100 , 'rfind' , '_\u0102 ' )
253+ self .checkequal (- 1 , 'a' * 100 , 'rfind' , '\u0102 a' )
254+ self .checkequal (- 1 , 'a' * 100 , 'rfind' , '\U00100304 a' )
255+ self .checkequal (- 1 , '\u0102 ' * 100 , 'rfind' , '\U00100304 \u0102 ' )
217256
218257 def test_index (self ):
219258 string_tests .CommonTest .test_index (self )
@@ -225,6 +264,19 @@ def test_index(self):
225264 self .assertRaises (ValueError , 'abcdefghiab' .index , 'abc' , 1 )
226265 self .assertRaises (ValueError , 'abcdefghi' .index , 'ghi' , 8 )
227266 self .assertRaises (ValueError , 'abcdefghi' .index , 'ghi' , - 1 )
267+ # test mixed kinds
268+ self .checkequal (100 , '\u0102 ' * 100 + 'a' , 'index' , 'a' )
269+ self .checkequal (100 , '\U00100304 ' * 100 + 'a' , 'index' , 'a' )
270+ self .checkequal (100 , '\U00100304 ' * 100 + '\u0102 ' , 'index' , '\u0102 ' )
271+ self .assertRaises (ValueError , ('a' * 100 ).index , '\u0102 ' )
272+ self .assertRaises (ValueError , ('a' * 100 ).index , '\U00100304 ' )
273+ self .assertRaises (ValueError , ('\u0102 ' * 100 ).index , '\U00100304 ' )
274+ self .checkequal (100 , '\u0102 ' * 100 + 'a_' , 'index' , 'a_' )
275+ self .checkequal (100 , '\U00100304 ' * 100 + 'a_' , 'index' , 'a_' )
276+ self .checkequal (100 , '\U00100304 ' * 100 + '\u0102 _' , 'index' , '\u0102 _' )
277+ self .assertRaises (ValueError , ('a' * 100 ).index , 'a\u0102 ' )
278+ self .assertRaises (ValueError , ('a' * 100 ).index , 'a\U00100304 ' )
279+ self .assertRaises (ValueError , ('\u0102 ' * 100 ).index , '\u0102 \U00100304 ' )
228280
229281 def test_rindex (self ):
230282 string_tests .CommonTest .test_rindex (self )
@@ -238,6 +290,19 @@ def test_rindex(self):
238290 self .assertRaises (ValueError , 'defghiabc' .rindex , 'abc' , 0 , - 1 )
239291 self .assertRaises (ValueError , 'abcdefghi' .rindex , 'ghi' , 0 , 8 )
240292 self .assertRaises (ValueError , 'abcdefghi' .rindex , 'ghi' , 0 , - 1 )
293+ # test mixed kinds
294+ self .checkequal (0 , 'a' + '\u0102 ' * 100 , 'rindex' , 'a' )
295+ self .checkequal (0 , 'a' + '\U00100304 ' * 100 , 'rindex' , 'a' )
296+ self .checkequal (0 , '\u0102 ' + '\U00100304 ' * 100 , 'rindex' , '\u0102 ' )
297+ self .assertRaises (ValueError , ('a' * 100 ).rindex , '\u0102 ' )
298+ self .assertRaises (ValueError , ('a' * 100 ).rindex , '\U00100304 ' )
299+ self .assertRaises (ValueError , ('\u0102 ' * 100 ).rindex , '\U00100304 ' )
300+ self .checkequal (0 , '_a' + '\u0102 ' * 100 , 'rindex' , '_a' )
301+ self .checkequal (0 , '_a' + '\U00100304 ' * 100 , 'rindex' , '_a' )
302+ self .checkequal (0 , '_\u0102 ' + '\U00100304 ' * 100 , 'rindex' , '_\u0102 ' )
303+ self .assertRaises (ValueError , ('a' * 100 ).rindex , '\u0102 a' )
304+ self .assertRaises (ValueError , ('a' * 100 ).rindex , '\U00100304 a' )
305+ self .assertRaises (ValueError , ('\u0102 ' * 100 ).rindex , '\U00100304 \u0102 ' )
241306
242307 def test_maketrans_translate (self ):
243308 # these work with plain translate()
@@ -306,6 +371,67 @@ def test_split(self):
306371 self .checkequalnofix (['a' , 'b' , 'c' , 'd' ], 'a//b//c//d' , 'split' , '//' )
307372 self .checkequalnofix (['a' , 'b' , 'c' , 'd' ], 'a//b//c//d' , 'split' , '//' )
308373 self .checkequalnofix (['endcase ' , '' ], 'endcase test' , 'split' , 'test' )
374+ # test mixed kinds
375+ for left , right in ('ba' , '\u0101 \u0100 ' , '\U00010301 \U00010300 ' ):
376+ left *= 9
377+ right *= 9
378+ for delim in ('c' , '\u0102 ' , '\U00010302 ' ):
379+ self .checkequal ([left + right ],
380+ left + right , 'split' , delim )
381+ self .checkequal ([left , right ],
382+ left + delim + right , 'split' , delim )
383+ self .checkequal ([left + right ],
384+ left + right , 'split' , delim * 2 )
385+ self .checkequal ([left , right ],
386+ left + delim * 2 + right , 'split' , delim * 2 )
387+
388+ def test_rsplit (self ):
389+ string_tests .CommonTest .test_rsplit (self )
390+ # test mixed kinds
391+ for left , right in ('ba' , '\u0101 \u0100 ' , '\U00010301 \U00010300 ' ):
392+ left *= 9
393+ right *= 9
394+ for delim in ('c' , '\u0102 ' , '\U00010302 ' ):
395+ self .checkequal ([left + right ],
396+ left + right , 'rsplit' , delim )
397+ self .checkequal ([left , right ],
398+ left + delim + right , 'rsplit' , delim )
399+ self .checkequal ([left + right ],
400+ left + right , 'rsplit' , delim * 2 )
401+ self .checkequal ([left , right ],
402+ left + delim * 2 + right , 'rsplit' , delim * 2 )
403+
404+ def test_partition (self ):
405+ string_tests .MixinStrUnicodeUserStringTest .test_partition (self )
406+ # test mixed kinds
407+ for left , right in ('ba' , '\u0101 \u0100 ' , '\U00010301 \U00010300 ' ):
408+ left *= 9
409+ right *= 9
410+ for delim in ('c' , '\u0102 ' , '\U00010302 ' ):
411+ self .checkequal ((left + right , '' , '' ),
412+ left + right , 'partition' , delim )
413+ self .checkequal ((left , delim , right ),
414+ left + delim + right , 'partition' , delim )
415+ self .checkequal ((left + right , '' , '' ),
416+ left + right , 'partition' , delim * 2 )
417+ self .checkequal ((left , delim * 2 , right ),
418+ left + delim * 2 + right , 'partition' , delim * 2 )
419+
420+ def test_rpartition (self ):
421+ string_tests .MixinStrUnicodeUserStringTest .test_rpartition (self )
422+ # test mixed kinds
423+ for left , right in ('ba' , '\u0101 \u0100 ' , '\U00010301 \U00010300 ' ):
424+ left *= 9
425+ right *= 9
426+ for delim in ('c' , '\u0102 ' , '\U00010302 ' ):
427+ self .checkequal (('' , '' , left + right ),
428+ left + right , 'rpartition' , delim )
429+ self .checkequal ((left , delim , right ),
430+ left + delim + right , 'rpartition' , delim )
431+ self .checkequal (('' , '' , left + right ),
432+ left + right , 'rpartition' , delim * 2 )
433+ self .checkequal ((left , delim * 2 , right ),
434+ left + delim * 2 + right , 'rpartition' , delim * 2 )
309435
310436 def test_join (self ):
311437 string_tests .MixinStrUnicodeUserStringTest .test_join (self )
@@ -333,6 +459,22 @@ def test_replace(self):
333459 # method call forwarded from str implementation because of unicode argument
334460 self .checkequalnofix ('one@two!three!' , 'one!two!three!' , 'replace' , '!' , '@' , 1 )
335461 self .assertRaises (TypeError , 'replace' .replace , "r" , 42 )
462+ # test mixed kinds
463+ for left , right in ('ba' , '\u0101 \u0100 ' , '\U00010301 \U00010300 ' ):
464+ left *= 9
465+ right *= 9
466+ for delim in ('c' , '\u0102 ' , '\U00010302 ' ):
467+ for repl in ('d' , '\u0103 ' , '\U00010303 ' ):
468+ self .checkequal (left + right ,
469+ left + right , 'replace' , delim , repl )
470+ self .checkequal (left + repl + right ,
471+ left + delim + right ,
472+ 'replace' , delim , repl )
473+ self .checkequal (left + right ,
474+ left + right , 'replace' , delim * 2 , repl )
475+ self .checkequal (left + repl + right ,
476+ left + delim * 2 + right ,
477+ 'replace' , delim * 2 , repl )
336478
337479 @support .cpython_only
338480 def test_replace_id (self ):
@@ -737,6 +879,14 @@ def test_contains(self):
737879 self .assertNotIn ('asdf' , '' )
738880
739881 self .assertRaises (TypeError , "abc" .__contains__ )
882+ # test mixed kinds
883+ for fill in ('a' , '\u0100 ' , '\U00010300 ' ):
884+ fill *= 9
885+ for delim in ('c' , '\u0102 ' , '\U00010302 ' ):
886+ self .assertNotIn (delim , fill )
887+ self .assertIn (delim , fill + delim )
888+ self .assertNotIn (delim * 2 , fill )
889+ self .assertIn (delim * 2 , fill + delim * 2 )
740890
741891 def test_issue18183 (self ):
742892 '\U00010000 \U00100000 ' .lower ()
0 commit comments