@@ -1073,6 +1073,39 @@ def test_ignore_case_set(self):
1073
1073
self .assertTrue (re .match (br'[19a]' , b'a' , re .I ))
1074
1074
self .assertTrue (re .match (br'[19a]' , b'A' , re .I ))
1075
1075
self .assertTrue (re .match (br'[19A]' , b'a' , re .I ))
1076
+ self .assertTrue (re .match (r'[19\xc7]' , '\xc7 ' , re .I ))
1077
+ self .assertTrue (re .match (r'[19\xc7]' , '\xe7 ' , re .I ))
1078
+ self .assertTrue (re .match (r'[19\xe7]' , '\xc7 ' , re .I ))
1079
+ self .assertTrue (re .match (r'[19\xe7]' , '\xe7 ' , re .I ))
1080
+ self .assertTrue (re .match (r'[19\u0400]' , '\u0400 ' , re .I ))
1081
+ self .assertTrue (re .match (r'[19\u0400]' , '\u0450 ' , re .I ))
1082
+ self .assertTrue (re .match (r'[19\u0450]' , '\u0400 ' , re .I ))
1083
+ self .assertTrue (re .match (r'[19\u0450]' , '\u0450 ' , re .I ))
1084
+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010400 ' , re .I ))
1085
+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010428 ' , re .I ))
1086
+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010400 ' , re .I ))
1087
+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010428 ' , re .I ))
1088
+
1089
+ self .assertTrue (re .match (br'[19A]' , b'A' , re .I ))
1090
+ self .assertTrue (re .match (br'[19a]' , b'a' , re .I ))
1091
+ self .assertTrue (re .match (br'[19a]' , b'A' , re .I ))
1092
+ self .assertTrue (re .match (br'[19A]' , b'a' , re .I ))
1093
+ self .assertTrue (re .match (r'[19A]' , 'A' , re .I | re .A ))
1094
+ self .assertTrue (re .match (r'[19a]' , 'a' , re .I | re .A ))
1095
+ self .assertTrue (re .match (r'[19a]' , 'A' , re .I | re .A ))
1096
+ self .assertTrue (re .match (r'[19A]' , 'a' , re .I | re .A ))
1097
+ self .assertTrue (re .match (r'[19\xc7]' , '\xc7 ' , re .I | re .A ))
1098
+ self .assertIsNone (re .match (r'[19\xc7]' , '\xe7 ' , re .I | re .A ))
1099
+ self .assertIsNone (re .match (r'[19\xe7]' , '\xc7 ' , re .I | re .A ))
1100
+ self .assertTrue (re .match (r'[19\xe7]' , '\xe7 ' , re .I | re .A ))
1101
+ self .assertTrue (re .match (r'[19\u0400]' , '\u0400 ' , re .I | re .A ))
1102
+ self .assertIsNone (re .match (r'[19\u0400]' , '\u0450 ' , re .I | re .A ))
1103
+ self .assertIsNone (re .match (r'[19\u0450]' , '\u0400 ' , re .I | re .A ))
1104
+ self .assertTrue (re .match (r'[19\u0450]' , '\u0450 ' , re .I | re .A ))
1105
+ self .assertTrue (re .match (r'[19\U00010400]' , '\U00010400 ' , re .I | re .A ))
1106
+ self .assertIsNone (re .match (r'[19\U00010400]' , '\U00010428 ' , re .I | re .A ))
1107
+ self .assertIsNone (re .match (r'[19\U00010428]' , '\U00010400 ' , re .I | re .A ))
1108
+ self .assertTrue (re .match (r'[19\U00010428]' , '\U00010428 ' , re .I | re .A ))
1076
1109
1077
1110
# Two different characters have the same lowercase.
1078
1111
assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
@@ -1109,8 +1142,10 @@ def test_ignore_case_range(self):
1109
1142
self .assertTrue (re .match (br'[9-a]' , b'_' , re .I ))
1110
1143
self .assertIsNone (re .match (br'[9-A]' , b'_' , re .I ))
1111
1144
self .assertTrue (re .match (r'[\xc0-\xde]' , '\xd7 ' , re .I ))
1145
+ self .assertTrue (re .match (r'[\xc0-\xde]' , '\xe7 ' , re .I ))
1112
1146
self .assertIsNone (re .match (r'[\xc0-\xde]' , '\xf7 ' , re .I ))
1113
1147
self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xf7 ' , re .I ))
1148
+ self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xc7 ' , re .I ))
1114
1149
self .assertIsNone (re .match (r'[\xe0-\xfe]' , '\xd7 ' , re .I ))
1115
1150
self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0450 ' , re .I ))
1116
1151
self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0400 ' , re .I ))
@@ -1121,6 +1156,26 @@ def test_ignore_case_range(self):
1121
1156
self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010428 ' , re .I ))
1122
1157
self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010400 ' , re .I ))
1123
1158
1159
+ self .assertTrue (re .match (r'[\xc0-\xde]' , '\xd7 ' , re .I | re .A ))
1160
+ self .assertIsNone (re .match (r'[\xc0-\xde]' , '\xe7 ' , re .I | re .A ))
1161
+ self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xf7 ' , re .I | re .A ))
1162
+ self .assertIsNone (re .match (r'[\xe0-\xfe]' , '\xc7 ' , re .I | re .A ))
1163
+ self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0450 ' , re .I | re .A ))
1164
+ self .assertIsNone (re .match (r'[\u0430-\u045f]' , '\u0400 ' , re .I | re .A ))
1165
+ self .assertIsNone (re .match (r'[\u0400-\u042f]' , '\u0450 ' , re .I | re .A ))
1166
+ self .assertTrue (re .match (r'[\u0400-\u042f]' , '\u0400 ' , re .I | re .A ))
1167
+ self .assertTrue (re .match (r'[\U00010428-\U0001044f]' , '\U00010428 ' , re .I | re .A ))
1168
+ self .assertIsNone (re .match (r'[\U00010428-\U0001044f]' , '\U00010400 ' , re .I | re .A ))
1169
+ self .assertIsNone (re .match (r'[\U00010400-\U00010427]' , '\U00010428 ' , re .I | re .A ))
1170
+ self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010400 ' , re .I | re .A ))
1171
+
1172
+ self .assertTrue (re .match (r'[N-\x7f]' , 'A' , re .I | re .A ))
1173
+ self .assertTrue (re .match (r'[n-\x7f]' , 'Z' , re .I | re .A ))
1174
+ self .assertTrue (re .match (r'[N-\uffff]' , 'A' , re .I | re .A ))
1175
+ self .assertTrue (re .match (r'[n-\uffff]' , 'Z' , re .I | re .A ))
1176
+ self .assertTrue (re .match (r'[N-\U00010000]' , 'A' , re .I | re .A ))
1177
+ self .assertTrue (re .match (r'[n-\U00010000]' , 'Z' , re .I | re .A ))
1178
+
1124
1179
# Two different characters have the same lowercase.
1125
1180
assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
1126
1181
self .assertTrue (re .match (r'[J-M]' , '\u212a ' , re .I ))
0 commit comments