@@ -1073,6 +1073,39 @@ def test_ignore_case_set(self):
10731073 self .assertTrue (re .match (br'[19a]' , b'a' , re .I ))
10741074 self .assertTrue (re .match (br'[19a]' , b'A' , re .I ))
10751075 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 ))
10761109
10771110 # Two different characters have the same lowercase.
10781111 assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
@@ -1109,8 +1142,10 @@ def test_ignore_case_range(self):
11091142 self .assertTrue (re .match (br'[9-a]' , b'_' , re .I ))
11101143 self .assertIsNone (re .match (br'[9-A]' , b'_' , re .I ))
11111144 self .assertTrue (re .match (r'[\xc0-\xde]' , '\xd7 ' , re .I ))
1145+ self .assertTrue (re .match (r'[\xc0-\xde]' , '\xe7 ' , re .I ))
11121146 self .assertIsNone (re .match (r'[\xc0-\xde]' , '\xf7 ' , re .I ))
11131147 self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xf7 ' , re .I ))
1148+ self .assertTrue (re .match (r'[\xe0-\xfe]' , '\xc7 ' , re .I ))
11141149 self .assertIsNone (re .match (r'[\xe0-\xfe]' , '\xd7 ' , re .I ))
11151150 self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0450 ' , re .I ))
11161151 self .assertTrue (re .match (r'[\u0430-\u045f]' , '\u0400 ' , re .I ))
@@ -1121,6 +1156,26 @@ def test_ignore_case_range(self):
11211156 self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010428 ' , re .I ))
11221157 self .assertTrue (re .match (r'[\U00010400-\U00010427]' , '\U00010400 ' , re .I ))
11231158
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+
11241179 # Two different characters have the same lowercase.
11251180 assert 'K' .lower () == '\u212a ' .lower () == 'k' # 'K'
11261181 self .assertTrue (re .match (r'[J-M]' , '\u212a ' , re .I ))
0 commit comments