@@ -345,6 +345,23 @@ extension RegexTests {
345345 input: " e \u{301} 0e \u{302} " ,
346346 match: " e \u{301} 0e \u{302} "
347347 )
348+ firstMatchTest (
349+ #"(?x) e \u{35C} \u{315}(?#hello)\u{301}"# ,
350+ input: " e \u{301} \u{315} \u{35C} " ,
351+ match: " e \u{301} \u{315} \u{35C} "
352+ )
353+ firstMatchTest (
354+ #"(?x) e \u{35C} \u{315 301}"# ,
355+ input: " e \u{301} \u{315} \u{35C} " ,
356+ match: " e \u{301} \u{315} \u{35C} "
357+ )
358+
359+ // We don't coalesce across groups.
360+ firstMatchTests (
361+ #"e\u{301}(?:\u{315}\u{35C})?"# ,
362+ ( " e \u{301} " , " e \u{301} " ) ,
363+ ( " e \u{301} \u{315} \u{35C} " , nil )
364+ )
348365
349366 // Escape sequences that represent scalar values.
350367 firstMatchTest ( #"\a[\b]\e\f\n\r\t"# ,
@@ -824,6 +841,30 @@ extension RegexTests {
824841 ( " e \u{301} \u{315} \u{35C} " , " e \u{301} \u{315} \u{35C} " ) ,
825842 ( " e \u{35C} \u{301} \u{315} " , " e \u{35C} \u{301} \u{315} " )
826843 )
844+ firstMatchTests (
845+ #"(?x) [ e \u{315} \u{301} \u{35C} ]"# ,
846+ ( " e " , nil ) ,
847+ ( " e \u{315} " , nil ) ,
848+ ( " e \u{301} " , nil ) ,
849+ ( " e \u{315} \u{301} \u{35C} " , " e \u{315} \u{301} \u{35C} " ) ,
850+ ( " e \u{301} \u{315} \u{35C} " , " e \u{301} \u{315} \u{35C} " ) ,
851+ ( " e \u{35C} \u{301} \u{315} " , " e \u{35C} \u{301} \u{315} " )
852+ )
853+
854+ // We don't coalesce across character classes.
855+ firstMatchTests (
856+ #"e[\u{315}\u{301}\u{35C}]"# ,
857+ ( " e " , nil ) ,
858+ ( " e \u{315} " , nil ) ,
859+ ( " e \u{315} \u{301} " , nil ) ,
860+ ( " e \u{301} \u{315} \u{35C} " , nil )
861+ )
862+ firstMatchTests (
863+ #"[e[\u{301}]]"# ,
864+ ( " e " , " e " ) ,
865+ ( " \u{301} " , " \u{301} " ) ,
866+ ( " e \u{301} " , nil )
867+ )
827868
828869 firstMatchTests (
829870 #"[a-z1\u{E9}-\u{302}\u{E1}3-59]"# ,
@@ -1012,6 +1053,16 @@ extension RegexTests {
10121053 ( " e \u{302} " , nil ) ,
10131054 ( " e \u{303} " , " e \u{303} " ) )
10141055
1056+ firstMatchTests (
1057+ #"(?x) [ e \u{301} [ e \u{303} ] -- [ [ e \u{301} ] e \u{302} ] ]"# ,
1058+ ( " e " , nil ) ,
1059+ ( " \u{301} " , nil ) ,
1060+ ( " \u{302} " , nil ) ,
1061+ ( " \u{303} " , nil ) ,
1062+ ( " e \u{301} " , nil ) ,
1063+ ( " e \u{302} " , nil ) ,
1064+ ( " e \u{303} " , " e \u{303} " ) )
1065+
10151066 firstMatchTest ( " [-] " , input: " 123-abcxyz " , match: " - " )
10161067
10171068 // These are metacharacters in certain contexts, but normal characters
@@ -2182,6 +2233,11 @@ extension RegexTests {
21822233 #"\u{65 301}"# ,
21832234 ( eComposed, true ) ,
21842235 ( eDecomposed, true ) )
2236+
2237+ matchTest (
2238+ #"(?x) \u{65} \u{301}"# ,
2239+ ( eComposed, true ) ,
2240+ ( eDecomposed, true ) )
21852241 }
21862242
21872243 func testCanonicalEquivalenceCharacterClass( ) throws {
0 commit comments