@@ -1136,6 +1136,39 @@ def test_ignore_case_set(self):
11361136 self .assertTrue (re .match (br'[19a]' , b'a' , re .I ))
11371137 self .assertTrue (re .match (br'[19a]' , b'A' , re .I ))
11381138 self .assertTrue (re .match (br'[19A]' , b'a' , re .I ))
1139+ self .assertTrue (re .match (r'[19\xc7]' , '\xc7 ' , re .I ))
1140+ self .assertTrue (re .match (r'[19\xc7]' , '\xe7 ' , re .I ))
1141+ self .assertTrue (re .match (r'[19\xe7]' , '\xc7 ' , re .I ))
1142+ self .assertTrue (re .match (r'[19\xe7]' , '\xe7 ' , re .I ))
1143+ self .assertTrue (re .match (r'[19\u0400]' , '\u0400 ' , re .I ))
1144+ self .assertTrue (re .match (r'[19\u0400]' , '\u0450 ' , re .I ))
1145+ self .assertTrue (re .match (r'[19\u0450]' , '\u0400 ' , re .I ))
1146+ self .assertTrue (re .match (r'[19\u0450]' , '\u0450 ' , re .I ))
1147+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010400 ' , re .I ))
1148+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010428 ' , re .I ))
1149+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010400 ' , re .I ))
1150+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010428 ' , re .I ))
1151+
1152+ self .assertTrue (re .match (br'[19A]' , b'A' , re .I ))
1153+ self .assertTrue (re .match (br'[19a]' , b'a' , re .I ))
1154+ self .assertTrue (re .match (br'[19a]' , b'A' , re .I ))
1155+ self .assertTrue (re .match (br'[19A]' , b'a' , re .I ))
1156+ self .assertTrue (re .match (r'[19A]' , 'A' , re .I | re .A ))
1157+ self .assertTrue (re .match (r'[19a]' , 'a' , re .I | re .A ))
1158+ self .assertTrue (re .match (r'[19a]' , 'A' , re .I | re .A ))
1159+ self .assertTrue (re .match (r'[19A]' , 'a' , re .I | re .A ))
1160+ self .assertTrue (re .match (r'[19\xc7]' , '\xc7 ' , re .I | re .A ))
1161+ self .assertIsNone (re .match (r'[19\xc7]' , '\xe7 ' , re .I | re .A ))
1162+ self .assertIsNone (re .match (r'[19\xe7]' , '\xc7 ' , re .I | re .A ))
1163+ self .assertTrue (re .match (r'[19\xe7]' , '\xe7 ' , re .I | re .A ))
1164+ self .assertTrue (re .match (r'[19\u0400]' , '\u0400 ' , re .I | re .A ))
1165+ self .assertIsNone (re .match (r'[19\u0400]' , '\u0450 ' , re .I | re .A ))
1166+ self .assertIsNone (re .match (r'[19\u0450]' , '\u0400 ' , re .I | re .A ))
1167+ self .assertTrue (re .match (r'[19\u0450]' , '\u0450 ' , re .I | re .A ))
1168+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010400 ' , re .I | re .A ))
1169+ self .assertIsNone (re .match (r'[19\U00010400]' , '\U00010428 ' , re .I | re .A ))
1170+ self .assertIsNone (re .match (r'[19\U00010428]' , '\U00010400 ' , re .I | re .A ))
1171+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010428 ' , re .I | re .A ))
11391172
11401173 # Two different characters have the same lowercase.
11411174 assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
@@ -1172,8 +1205,10 @@ def test_ignore_case_range(self):
11721205 self .assertTrue (re .match (br'[9-a]' , b'_' , re .I ))
11731206 self .assertIsNone (re .match (br'[9-A]' , b'_' , re .I ))
11741207 self .assertTrue (re .match (r'[\xc0-\xde]' , '\xd7 ' , re .I ))
1208+ self .assertTrue (re .match (r'[\xc0-\xde]' , '\xe7 ' , re .I ))
11751209 self .assertIsNone (re .match (r'[\xc0-\xde]' , '\xf7 ' , re .I ))
11761210 self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xf7 ' , re .I ))
1211+ self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xc7 ' , re .I ))
11771212 self .assertIsNone (re .match (r'[\xe0-\xfe]' , '\xd7 ' , re .I ))
11781213 self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0450 ' , re .I ))
11791214 self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0400 ' , re .I ))
@@ -1184,6 +1219,26 @@ def test_ignore_case_range(self):
11841219 self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010428 ' , re .I ))
11851220 self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010400 ' , re .I ))
11861221
1222+ self .assertTrue (re .match (r'[\xc0-\xde]' , '\xd7 ' , re .I | re .A ))
1223+ self .assertIsNone (re .match (r'[\xc0-\xde]' , '\xe7 ' , re .I | re .A ))
1224+ self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xf7 ' , re .I | re .A ))
1225+ self .assertIsNone (re .match (r'[\xe0-\xfe]' , '\xc7 ' , re .I | re .A ))
1226+ self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0450 ' , re .I | re .A ))
1227+ self .assertIsNone (re .match (r'[\u0430-\u045f]' , '\u0400 ' , re .I | re .A ))
1228+ self .assertIsNone (re .match (r'[\u0400-\u042f]' , '\u0450 ' , re .I | re .A ))
1229+ self .assertTrue (re .match (r'[\u0400-\u042f]' , '\u0400 ' , re .I | re .A ))
1230+ self .assertTrue (re .match (r'[\U00010428-\U0001044f]' , '\U00010428 ' , re .I | re .A ))
1231+ self .assertIsNone (re .match (r'[\U00010428-\U0001044f]' , '\U00010400 ' , re .I | re .A ))
1232+ self .assertIsNone (re .match (r'[\U00010400-\U00010427]' , '\U00010428 ' , re .I | re .A ))
1233+ self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010400 ' , re .I | re .A ))
1234+
1235+ self .assertTrue (re .match (r'[N-\x7f]' , 'A' , re .I | re .A ))
1236+ self .assertTrue (re .match (r'[n-\x7f]' , 'Z' , re .I | re .A ))
1237+ self .assertTrue (re .match (r'[N-\uffff]' , 'A' , re .I | re .A ))
1238+ self .assertTrue (re .match (r'[n-\uffff]' , 'Z' , re .I | re .A ))
1239+ self .assertTrue (re .match (r'[N-\U00010000]' , 'A' , re .I | re .A ))
1240+ self .assertTrue (re .match (r'[n-\U00010000]' , 'Z' , re .I | re .A ))
1241+
11871242 # Two different characters have the same lowercase.
11881243 assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
11891244 self .assertTrue (re .match (r'[J-M]' , '\u212a ' , re .I ))
0 commit comments