@@ -1137,6 +1137,39 @@ def test_ignore_case_set(self):
1137
1137
self .assertTrue (re .match (br'[19a]' , b'a' , re .I ))
1138
1138
self .assertTrue (re .match (br'[19a]' , b'A' , re .I ))
1139
1139
self .assertTrue (re .match (br'[19A]' , b'a' , re .I ))
1140
+ self .assertTrue (re .match (r'[19\xc7]' , '\xc7 ' , re .I ))
1141
+ self .assertTrue (re .match (r'[19\xc7]' , '\xe7 ' , re .I ))
1142
+ self .assertTrue (re .match (r'[19\xe7]' , '\xc7 ' , re .I ))
1143
+ self .assertTrue (re .match (r'[19\xe7]' , '\xe7 ' , re .I ))
1144
+ self .assertTrue (re .match (r'[19\u0400]' , '\u0400 ' , re .I ))
1145
+ self .assertTrue (re .match (r'[19\u0400]' , '\u0450 ' , re .I ))
1146
+ self .assertTrue (re .match (r'[19\u0450]' , '\u0400 ' , re .I ))
1147
+ self .assertTrue (re .match (r'[19\u0450]' , '\u0450 ' , re .I ))
1148
+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010400 ' , re .I ))
1149
+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010428 ' , re .I ))
1150
+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010400 ' , re .I ))
1151
+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010428 ' , re .I ))
1152
+
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 (br'[19A]' , b'a' , re .I ))
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'[19A]' , 'a' , re .I | re .A ))
1161
+ self .assertTrue (re .match (r'[19\xc7]' , '\xc7 ' , re .I | re .A ))
1162
+ self .assertIsNone (re .match (r'[19\xc7]' , '\xe7 ' , re .I | re .A ))
1163
+ self .assertIsNone (re .match (r'[19\xe7]' , '\xc7 ' , re .I | re .A ))
1164
+ self .assertTrue (re .match (r'[19\xe7]' , '\xe7 ' , re .I | re .A ))
1165
+ self .assertTrue (re .match (r'[19\u0400]' , '\u0400 ' , re .I | re .A ))
1166
+ self .assertIsNone (re .match (r'[19\u0400]' , '\u0450 ' , re .I | re .A ))
1167
+ self .assertIsNone (re .match (r'[19\u0450]' , '\u0400 ' , re .I | re .A ))
1168
+ self .assertTrue (re .match (r'[19\u0450]' , '\u0450 ' , re .I | re .A ))
1169
+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010400 ' , re .I | re .A ))
1170
+ self .assertIsNone (re .match (r'[19\U00010400]' , '\U00010428 ' , re .I | re .A ))
1171
+ self .assertIsNone (re .match (r'[19\U00010428]' , '\U00010400 ' , re .I | re .A ))
1172
+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010428 ' , re .I | re .A ))
1140
1173
1141
1174
# Two different characters have the same lowercase.
1142
1175
assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
@@ -1173,8 +1206,10 @@ def test_ignore_case_range(self):
1173
1206
self .assertTrue (re .match (br'[9-a]' , b'_' , re .I ))
1174
1207
self .assertIsNone (re .match (br'[9-A]' , b'_' , re .I ))
1175
1208
self .assertTrue (re .match (r'[\xc0-\xde]' , '\xd7 ' , re .I ))
1209
+ self .assertTrue (re .match (r'[\xc0-\xde]' , '\xe7 ' , re .I ))
1176
1210
self .assertIsNone (re .match (r'[\xc0-\xde]' , '\xf7 ' , re .I ))
1177
1211
self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xf7 ' , re .I ))
1212
+ self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xc7 ' , re .I ))
1178
1213
self .assertIsNone (re .match (r'[\xe0-\xfe]' , '\xd7 ' , re .I ))
1179
1214
self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0450 ' , re .I ))
1180
1215
self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0400 ' , re .I ))
@@ -1185,6 +1220,26 @@ def test_ignore_case_range(self):
1185
1220
self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010428 ' , re .I ))
1186
1221
self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010400 ' , re .I ))
1187
1222
1223
+ self .assertTrue (re .match (r'[\xc0-\xde]' , '\xd7 ' , re .I | re .A ))
1224
+ self .assertIsNone (re .match (r'[\xc0-\xde]' , '\xe7 ' , re .I | re .A ))
1225
+ self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xf7 ' , re .I | re .A ))
1226
+ self .assertIsNone (re .match (r'[\xe0-\xfe]' , '\xc7 ' , re .I | re .A ))
1227
+ self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0450 ' , re .I | re .A ))
1228
+ self .assertIsNone (re .match (r'[\u0430-\u045f]' , '\u0400 ' , re .I | re .A ))
1229
+ self .assertIsNone (re .match (r'[\u0400-\u042f]' , '\u0450 ' , re .I | re .A ))
1230
+ self .assertTrue (re .match (r'[\u0400-\u042f]' , '\u0400 ' , re .I | re .A ))
1231
+ self .assertTrue (re .match (r'[\U00010428-\U0001044f]' , '\U00010428 ' , re .I | re .A ))
1232
+ self .assertIsNone (re .match (r'[\U00010428-\U0001044f]' , '\U00010400 ' , re .I | re .A ))
1233
+ self .assertIsNone (re .match (r'[\U00010400-\U00010427]' , '\U00010428 ' , re .I | re .A ))
1234
+ self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010400 ' , re .I | re .A ))
1235
+
1236
+ self .assertTrue (re .match (r'[N-\x7f]' , 'A' , re .I | re .A ))
1237
+ self .assertTrue (re .match (r'[n-\x7f]' , 'Z' , re .I | re .A ))
1238
+ self .assertTrue (re .match (r'[N-\uffff]' , 'A' , re .I | re .A ))
1239
+ self .assertTrue (re .match (r'[n-\uffff]' , 'Z' , re .I | re .A ))
1240
+ self .assertTrue (re .match (r'[N-\U00010000]' , 'A' , re .I | re .A ))
1241
+ self .assertTrue (re .match (r'[n-\U00010000]' , 'Z' , re .I | re .A ))
1242
+
1188
1243
# Two different characters have the same lowercase.
1189
1244
assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
1190
1245
self .assertTrue (re .match (r'[J-M]' , '\u212a ' , re .I ))
0 commit comments