@@ -2728,6 +2728,29 @@ def test_asucs4(self):
27282728 self .assertEqual (unicode_asucs4 (s , len (s ), 1 ), s + '\0 ' )
27292729 self .assertEqual (unicode_asucs4 (s , len (s ), 0 ), s + '\uffff ' )
27302730
2731+ # Test PyUnicode_FindChar()
2732+ @support .cpython_only
2733+ def test_findchar (self ):
2734+ from _testcapi import unicode_findchar
2735+
2736+ for str in "\xa1 " , "\u8000 \u8080 " , "\ud800 \udc02 " , "\U0001f100 \U0001f1f1 " :
2737+ for i , ch in enumerate (str ):
2738+ self .assertEqual (unicode_findchar (str , ord (ch ), 0 , len (str ), 1 ), i )
2739+ self .assertEqual (unicode_findchar (str , ord (ch ), 0 , len (str ), - 1 ), i )
2740+
2741+ str = "!>_<!"
2742+ self .assertEqual (unicode_findchar (str , 0x110000 , 0 , len (str ), 1 ), - 1 )
2743+ self .assertEqual (unicode_findchar (str , 0x110000 , 0 , len (str ), - 1 ), - 1 )
2744+ # start < end
2745+ self .assertEqual (unicode_findchar (str , ord ('!' ), 1 , len (str )+ 1 , 1 ), 4 )
2746+ self .assertEqual (unicode_findchar (str , ord ('!' ), 1 , len (str )+ 1 , - 1 ), 4 )
2747+ # start >= end
2748+ self .assertEqual (unicode_findchar (str , ord ('!' ), 0 , 0 , 1 ), - 1 )
2749+ self .assertEqual (unicode_findchar (str , ord ('!' ), len (str ), 0 , 1 ), - 1 )
2750+ # negative
2751+ self .assertEqual (unicode_findchar (str , ord ('!' ), - len (str ), - 1 , 1 ), 0 )
2752+ self .assertEqual (unicode_findchar (str , ord ('!' ), - len (str ), - 1 , - 1 ), 0 )
2753+
27312754 # Test PyUnicode_CopyCharacters()
27322755 @support .cpython_only
27332756 def test_copycharacters (self ):
0 commit comments