use v6-alpha; use Test; =pod This file was originally derived from the perl5 CPAN module Perl6::Rules, version 0.3 (12 Apr 2004), file t/properties_slow_to_compile.t. =cut plan 1881; if !eval('("a" ~~ /a/)') { skip_rest "skipped tests - rules support appears to be missing"; } else { force_todo(1,5..8,12..15,19..20,22..25,29..32,36..37,39..42,46..47,49..52,56..57,59..62,66..69,73..74,76..79,83..86,90..91,93..96,100..103,107..108,110..113,117..120,124..127,131..132,134..137,141..144,148..149,151..154,158..161,165..166,168..171,175..178,182..185,189..192,196..197,199..202,206..209,213..214,216..219,223..224,226..229,233..234,236..239,243..246,250..253,257..260,264..265,267..270,274..277,281..282,284..287,291..294,298..299,301..304,308..311,315..316,318..321,325..328,332..333,335..338,342..345,349..350,352..355,359..362,366..367,369..372,376..379,383..386,390..393,397..398,400..403,407..408,410..413,417..418,420..423,427..430,434..435,437..440,444..445,447..450,454..455,457..460,464..467,471..474,478..479,481..484,488..489,491..494,498..499,501..504,508..509,511..514,518..519,521..524,528..529,531..534,538..539,541..544,548..551,555..558,562..563,565..568,572..573,575..578,582..583,585..588,592..595,599..602,606..609,613..616,620..623,627..630,634..637,641..644,648..651,655..658,662..665,669..670,672..675,679..680,682..685,689..690,692..694,696..698,702..705,709..712,716..718,720..722,726..729,733..736,740..743,747..750,754..757,761..764,768..771,775..778,782..785,789..792,796..799,803..806,810..811,813..816,820..821,823..826,830..831,833..836,840..841,843..846,850..851,853..856,860..862,864..866,870..873,877..880,884..885,887..890,894..895,897..900,904..907,911..914,918..921,925..928,932..935,939..942,946..949,953..956,960..963,967..970,974..977,981..984,988..991,995..998,1002..1005,1009..1012,1016..1019,1023..1026,1030..1033,1037..1038,1040..1042,1044..1045,1047..1049,1053..1056,1060..1063,1067..1070,1074..1077,1081..1084,1088..1091,1095..1098,1102..1105,1109..1110,1112..1115,1119..1122,1126..1129,1133..1136,1140..1143,1147..1148,1150..1153,1157..1160,1164..1165,1167..1170,1174..1177,1181..1184,1187..1188,1192..1195,1199..1202,1206..1207,1209..1211,1213..1215,1219..1221,1223..1224,1226..1228,1232..1235,1239..1242,1246..1249,1253..1256,1260..1263,1267..1270,1274..1277,1281..1284,1288..1291,1295..1297,1299..1301,1305..1307,1309..1310,1312..1313,1315..1317,1321..1324,1328..1331,1335..1338,1342..1344,1346..1348,1352..1355,1359..1362,1366..1368,1370..1372,1376..1379,1383..1386,1390..1393,1397..1399,1401..1403,1407..1410,1414..1417,1421..1424,1428..1431,1435..1438,1442..1445,1449..1452,1456..1458,1460..1462,1466..1469,1473..1476,1480..1483,1487..1489,1491..1493,1497..1500,1504..1507,1511..1514,1518..1521,1525..1527,1529..1530,1532..1534,1538..1541,1545..1548,1552..1555,1559..1562,1566..1569,1573..1576,1580..1583,1587..1590,1594..1597,1601..1604,1608..1611,1615..1618,1622..1625,1629..1632,1636..1638,1640..1642,1646..1648,1650..1652,1656..1659,1663..1666,1670..1673,1677..1680,1684..1687,1691..1693,1695..1697,1701..1704,1708..1711,1715..1717,1719..1721,1725..1728,1732..1734,1736..1738,1742..1745,1749..1751,1753..1755,1759..1761,1763..1765,1769..1772,1776..1779,1783..1786,1790..1792,1794..1795,1797..1799,1803..1806,1810..1813,1817..1819,1821..1823,1827..1830,1834..1837,1841..1844,1848..1851,1855..1858,1862..1864,1866..1868,1872..1875,1879..1881); # Unicode property subrules are :todo. # L Letter ok("\x[846D]" ~~ m/^$/, q{Match (Letter)} ); ok(!( "\x[846D]" ~~ m/^.$/ ), q{Don't match negated (Letter)} ); ok(!( "\x[846D]" ~~ m/^<-isL>$/ ), q{Don't match inverted (Letter)} ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match unrelated (Letter)} ); ok("\x[9FA6]" ~~ m/^.$/, q{Match unrelated negated (Letter)} ); ok("\x[9FA6]" ~~ m/^<-isL>$/, q{Match unrelated inverted (Letter)} ); ok("\x[9FA6]\x[846D]" ~~ m//, q{Match unanchored (Letter)} ); ok("\x[6DF7]" ~~ m/^$/, q{Match } ); ok(!( "\x[6DF7]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[6DF7]" ~~ m/^<-isLetter>$/ ), q{Don't match inverted } ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9FA6]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9FA6]" ~~ m/^<-isLetter>$/, q{Match unrelated inverted } ); ok("\x[9FA6]\x[6DF7]" ~~ m//, q{Match unanchored } ); # Lu UppercaseLetter ok("\c[LATIN CAPITAL LETTER A]" ~~ m/^$/, q{Match (UppercaseLetter)} ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^.$/ ), q{Don't match negated (UppercaseLetter)} ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^<-isLu>$/ ), q{Don't match inverted (UppercaseLetter)} ); ok(!( "\x[C767]" ~~ m/^$/ ), q{Don't match unrelated (UppercaseLetter)} ); ok("\x[C767]" ~~ m/^.$/, q{Match unrelated negated (UppercaseLetter)} ); ok("\x[C767]" ~~ m/^<-isLu>$/, q{Match unrelated inverted (UppercaseLetter)} ); ok(!( "\x[C767]" ~~ m/^$/ ), q{Don't match related (UppercaseLetter)} ); ok("\x[C767]" ~~ m/^.$/, q{Match related negated (UppercaseLetter)} ); ok("\x[C767]" ~~ m/^<-isLu>$/, q{Match related inverted (UppercaseLetter)} ); ok("\x[C767]\x[C767]\c[LATIN CAPITAL LETTER A]" ~~ m//, q{Match unanchored (UppercaseLetter)} ); ok("\c[LATIN CAPITAL LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^<-isUppercaseLetter>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE NBA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE NBA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE NBA]" ~~ m/^<-isUppercaseLetter>$/, q{Match unrelated inverted } ); ok("\c[YI SYLLABLE NBA]\c[LATIN CAPITAL LETTER A]" ~~ m//, q{Match unanchored } ); # Ll LowercaseLetter ok("\c[LATIN SMALL LETTER A]" ~~ m/^$/, q{Match (LowercaseLetter)} ); ok(!( "\c[LATIN SMALL LETTER A]" ~~ m/^.$/ ), q{Don't match negated (LowercaseLetter)} ); ok(!( "\c[LATIN SMALL LETTER A]" ~~ m/^<-isLl>$/ ), q{Don't match inverted (LowercaseLetter)} ); ok(!( "\c[BOPOMOFO FINAL LETTER H]" ~~ m/^$/ ), q{Don't match unrelated (LowercaseLetter)} ); ok("\c[BOPOMOFO FINAL LETTER H]" ~~ m/^.$/, q{Match unrelated negated (LowercaseLetter)} ); ok("\c[BOPOMOFO FINAL LETTER H]" ~~ m/^<-isLl>$/, q{Match unrelated inverted (LowercaseLetter)} ); ok(!( "\c[BOPOMOFO FINAL LETTER H]" ~~ m/^$/ ), q{Don't match related (LowercaseLetter)} ); ok("\c[BOPOMOFO FINAL LETTER H]" ~~ m/^.$/, q{Match related negated (LowercaseLetter)} ); ok("\c[BOPOMOFO FINAL LETTER H]" ~~ m/^<-isLl>$/, q{Match related inverted (LowercaseLetter)} ); ok("\c[BOPOMOFO FINAL LETTER H]\c[BOPOMOFO FINAL LETTER H]\c[LATIN SMALL LETTER A]" ~~ m//, q{Match unanchored (LowercaseLetter)} ); ok("\c[LATIN SMALL LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN SMALL LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN SMALL LETTER A]" ~~ m/^<-isLowercaseLetter>$/ ), q{Don't match inverted } ); ok(!( "\x[86CA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[86CA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[86CA]" ~~ m/^<-isLowercaseLetter>$/, q{Match unrelated inverted } ); ok(!( "\x[86CA]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[86CA]" ~~ m/^.$/, q{Match related negated } ); ok("\x[86CA]" ~~ m/^<-isLowercaseLetter>$/, q{Match related inverted } ); ok("\x[86CA]\x[86CA]\c[LATIN SMALL LETTER A]" ~~ m//, q{Match unanchored } ); # Lt TitlecaseLetter ok("\c[LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]" ~~ m/^$/, q{Match (TitlecaseLetter)} ); ok(!( "\c[LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]" ~~ m/^.$/ ), q{Don't match negated (TitlecaseLetter)} ); ok(!( "\c[LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]" ~~ m/^<-isLt>$/ ), q{Don't match inverted (TitlecaseLetter)} ); ok(!( "\x[6DC8]" ~~ m/^$/ ), q{Don't match unrelated (TitlecaseLetter)} ); ok("\x[6DC8]" ~~ m/^.$/, q{Match unrelated negated (TitlecaseLetter)} ); ok("\x[6DC8]" ~~ m/^<-isLt>$/, q{Match unrelated inverted (TitlecaseLetter)} ); ok(!( "\x[6DC8]" ~~ m/^$/ ), q{Don't match related (TitlecaseLetter)} ); ok("\x[6DC8]" ~~ m/^.$/, q{Match related negated (TitlecaseLetter)} ); ok("\x[6DC8]" ~~ m/^<-isLt>$/, q{Match related inverted (TitlecaseLetter)} ); ok("\x[6DC8]\x[6DC8]\c[LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]" ~~ m//, q{Match unanchored (TitlecaseLetter)} ); ok("\c[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI]" ~~ m/^$/, q{Match } ); ok(!( "\c[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI]" ~~ m/^<-isTitlecaseLetter>$/ ), q{Don't match inverted } ); ok(!( "\x[0C4E]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[0C4E]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[0C4E]" ~~ m/^<-isTitlecaseLetter>$/, q{Match unrelated inverted } ); ok("\x[0C4E]\c[GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI]" ~~ m//, q{Match unanchored } ); # Lm ModifierLetter ok("\c[IDEOGRAPHIC ITERATION MARK]" ~~ m/^$/, q{Match (ModifierLetter)} ); ok(!( "\c[IDEOGRAPHIC ITERATION MARK]" ~~ m/^.$/ ), q{Don't match negated (ModifierLetter)} ); ok(!( "\c[IDEOGRAPHIC ITERATION MARK]" ~~ m/^<-isLm>$/ ), q{Don't match inverted (ModifierLetter)} ); ok(!( "\x[2B61]" ~~ m/^$/ ), q{Don't match unrelated (ModifierLetter)} ); ok("\x[2B61]" ~~ m/^.$/, q{Match unrelated negated (ModifierLetter)} ); ok("\x[2B61]" ~~ m/^<-isLm>$/, q{Match unrelated inverted (ModifierLetter)} ); ok(!( "\c[IDEOGRAPHIC CLOSING MARK]" ~~ m/^$/ ), q{Don't match related (ModifierLetter)} ); ok("\c[IDEOGRAPHIC CLOSING MARK]" ~~ m/^.$/, q{Match related negated (ModifierLetter)} ); ok("\c[IDEOGRAPHIC CLOSING MARK]" ~~ m/^<-isLm>$/, q{Match related inverted (ModifierLetter)} ); ok("\x[2B61]\c[IDEOGRAPHIC CLOSING MARK]\c[IDEOGRAPHIC ITERATION MARK]" ~~ m//, q{Match unanchored (ModifierLetter)} ); ok("\c[MODIFIER LETTER SMALL H]" ~~ m/^$/, q{Match } ); ok(!( "\c[MODIFIER LETTER SMALL H]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MODIFIER LETTER SMALL H]" ~~ m/^<-isModifierLetter>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE HA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE HA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE HA]" ~~ m/^<-isModifierLetter>$/, q{Match unrelated inverted } ); ok("\c[YI SYLLABLE HA]\c[MODIFIER LETTER SMALL H]" ~~ m//, q{Match unanchored } ); # Lo OtherLetter ok("\c[LATIN LETTER TWO WITH STROKE]" ~~ m/^$/, q{Match (OtherLetter)} ); ok(!( "\c[LATIN LETTER TWO WITH STROKE]" ~~ m/^.$/ ), q{Don't match negated (OtherLetter)} ); ok(!( "\c[LATIN LETTER TWO WITH STROKE]" ~~ m/^<-isLo>$/ ), q{Don't match inverted (OtherLetter)} ); ok(!( "\c[LATIN SMALL LETTER TURNED DELTA]" ~~ m/^$/ ), q{Don't match unrelated (OtherLetter)} ); ok("\c[LATIN SMALL LETTER TURNED DELTA]" ~~ m/^.$/, q{Match unrelated negated (OtherLetter)} ); ok("\c[LATIN SMALL LETTER TURNED DELTA]" ~~ m/^<-isLo>$/, q{Match unrelated inverted (OtherLetter)} ); ok(!( "\c[LATIN SMALL LETTER TURNED DELTA]" ~~ m/^$/ ), q{Don't match related (OtherLetter)} ); ok("\c[LATIN SMALL LETTER TURNED DELTA]" ~~ m/^.$/, q{Match related negated (OtherLetter)} ); ok("\c[LATIN SMALL LETTER TURNED DELTA]" ~~ m/^<-isLo>$/, q{Match related inverted (OtherLetter)} ); ok("\c[LATIN SMALL LETTER TURNED DELTA]\c[LATIN SMALL LETTER TURNED DELTA]\c[LATIN LETTER TWO WITH STROKE]" ~~ m//, q{Match unanchored (OtherLetter)} ); ok("\c[ETHIOPIC SYLLABLE GLOTTAL A]" ~~ m/^$/, q{Match } ); ok(!( "\c[ETHIOPIC SYLLABLE GLOTTAL A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ETHIOPIC SYLLABLE GLOTTAL A]" ~~ m/^<-isOtherLetter>$/ ), q{Don't match inverted } ); ok(!( "\x[12AF]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[12AF]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[12AF]" ~~ m/^<-isOtherLetter>$/, q{Match unrelated inverted } ); ok("\x[12AF]\c[ETHIOPIC SYLLABLE GLOTTAL A]" ~~ m//, q{Match unanchored } ); # Lr # Alias for "Ll", "Lu", and "Lt". ok("\c[LATIN CAPITAL LETTER A]" ~~ m/^$/, q{Match (Alias for "Ll", "Lu", and "Lt".)} ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^.$/ ), q{Don't match negated (Alias for "Ll", "Lu", and "Lt".)} ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^<-isLr>$/ ), q{Don't match inverted (Alias for "Ll", "Lu", and "Lt".)} ); ok(!( "\x[87B5]" ~~ m/^$/ ), q{Don't match unrelated (Alias for "Ll", "Lu", and "Lt".)} ); ok("\x[87B5]" ~~ m/^.$/, q{Match unrelated negated (Alias for "Ll", "Lu", and "Lt".)} ); ok("\x[87B5]" ~~ m/^<-isLr>$/, q{Match unrelated inverted (Alias for "Ll", "Lu", and "Lt".)} ); ok(!( "\x[87B5]" ~~ m/^$/ ), q{Don't match related (Alias for "Ll", "Lu", and "Lt".)} ); ok("\x[87B5]" ~~ m/^.$/, q{Match related negated (Alias for "Ll", "Lu", and "Lt".)} ); ok("\x[87B5]" ~~ m/^<-isLr>$/, q{Match related inverted (Alias for "Ll", "Lu", and "Lt".)} ); ok("\x[87B5]\x[87B5]\c[LATIN CAPITAL LETTER A]" ~~ m//, q{Match unanchored (Alias for "Ll", "Lu", and "Lt".)} ); # M Mark ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^$/, q{Match (Mark)} ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/ ), q{Don't match negated (Mark)} ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isM>$/ ), q{Don't match inverted (Mark)} ); ok(!( "\x[D0AA]" ~~ m/^$/ ), q{Don't match unrelated (Mark)} ); ok("\x[D0AA]" ~~ m/^.$/, q{Match unrelated negated (Mark)} ); ok("\x[D0AA]" ~~ m/^<-isM>$/, q{Match unrelated inverted (Mark)} ); ok("\x[D0AA]\c[COMBINING GRAVE ACCENT]" ~~ m//, q{Match unanchored (Mark)} ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^$/, q{Match } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMark>$/ ), q{Don't match inverted } ); ok(!( "\x[BE64]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BE64]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BE64]" ~~ m/^<-isMark>$/, q{Match unrelated inverted } ); ok("\x[BE64]\c[COMBINING GRAVE ACCENT]" ~~ m//, q{Match unanchored } ); # Mn NonspacingMark ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^$/, q{Match (NonspacingMark)} ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/ ), q{Don't match negated (NonspacingMark)} ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMn>$/ ), q{Don't match inverted (NonspacingMark)} ); ok(!( "\x[47A5]" ~~ m/^$/ ), q{Don't match unrelated (NonspacingMark)} ); ok("\x[47A5]" ~~ m/^.$/, q{Match unrelated negated (NonspacingMark)} ); ok("\x[47A5]" ~~ m/^<-isMn>$/, q{Match unrelated inverted (NonspacingMark)} ); ok(!( "\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^$/ ), q{Don't match related (NonspacingMark)} ); ok("\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^.$/, q{Match related negated (NonspacingMark)} ); ok("\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^<-isMn>$/, q{Match related inverted (NonspacingMark)} ); ok("\x[47A5]\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]\c[COMBINING GRAVE ACCENT]" ~~ m//, q{Match unanchored (NonspacingMark)} ); ok("\c[TAGALOG VOWEL SIGN I]" ~~ m/^$/, q{Match } ); ok(!( "\c[TAGALOG VOWEL SIGN I]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TAGALOG VOWEL SIGN I]" ~~ m/^<-isNonspacingMark>$/ ), q{Don't match inverted } ); ok(!( "\c[CANADIAN SYLLABICS TYA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[CANADIAN SYLLABICS TYA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[CANADIAN SYLLABICS TYA]" ~~ m/^<-isNonspacingMark>$/, q{Match unrelated inverted } ); ok("\c[CANADIAN SYLLABICS TYA]\c[TAGALOG VOWEL SIGN I]" ~~ m//, q{Match unanchored } ); # Mc SpacingMark ok("\c[DEVANAGARI SIGN VISARGA]" ~~ m/^$/, q{Match (SpacingMark)} ); ok(!( "\c[DEVANAGARI SIGN VISARGA]" ~~ m/^.$/ ), q{Don't match negated (SpacingMark)} ); ok(!( "\c[DEVANAGARI SIGN VISARGA]" ~~ m/^<-isMc>$/ ), q{Don't match inverted (SpacingMark)} ); ok(!( "\x[9981]" ~~ m/^$/ ), q{Don't match unrelated (SpacingMark)} ); ok("\x[9981]" ~~ m/^.$/, q{Match unrelated negated (SpacingMark)} ); ok("\x[9981]" ~~ m/^<-isMc>$/, q{Match unrelated inverted (SpacingMark)} ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related (SpacingMark)} ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated (SpacingMark)} ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMc>$/, q{Match related inverted (SpacingMark)} ); ok("\x[9981]\c[COMBINING GRAVE ACCENT]\c[DEVANAGARI SIGN VISARGA]" ~~ m//, q{Match unanchored (SpacingMark)} ); ok("\c[DEVANAGARI SIGN VISARGA]" ~~ m/^$/, q{Match } ); ok(!( "\c[DEVANAGARI SIGN VISARGA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DEVANAGARI SIGN VISARGA]" ~~ m/^<-isSpacingMark>$/ ), q{Don't match inverted } ); ok(!( "\x[35E3]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[35E3]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[35E3]" ~~ m/^<-isSpacingMark>$/, q{Match unrelated inverted } ); ok("\x[35E3]\c[DEVANAGARI SIGN VISARGA]" ~~ m//, q{Match unanchored } ); # Me EnclosingMark ok("\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^$/, q{Match (EnclosingMark)} ); ok(!( "\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^.$/ ), q{Don't match negated (EnclosingMark)} ); ok(!( "\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^<-isMe>$/ ), q{Don't match inverted (EnclosingMark)} ); ok(!( "\x[9400]" ~~ m/^$/ ), q{Don't match unrelated (EnclosingMark)} ); ok("\x[9400]" ~~ m/^.$/, q{Match unrelated negated (EnclosingMark)} ); ok("\x[9400]" ~~ m/^<-isMe>$/, q{Match unrelated inverted (EnclosingMark)} ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related (EnclosingMark)} ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated (EnclosingMark)} ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMe>$/, q{Match related inverted (EnclosingMark)} ); ok("\x[9400]\c[COMBINING GRAVE ACCENT]\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m//, q{Match unanchored (EnclosingMark)} ); ok("\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^$/, q{Match } ); ok(!( "\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m/^<-isEnclosingMark>$/ ), q{Don't match inverted } ); ok(!( "\x[7C68]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7C68]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7C68]" ~~ m/^<-isEnclosingMark>$/, q{Match unrelated inverted } ); ok("\x[7C68]\c[COMBINING CYRILLIC HUNDRED THOUSANDS SIGN]" ~~ m//, q{Match unanchored } ); # N Number ok("\c[SUPERSCRIPT ZERO]" ~~ m/^$/, q{Match (Number)} ); ok(!( "\c[SUPERSCRIPT ZERO]" ~~ m/^.$/ ), q{Don't match negated (Number)} ); ok(!( "\c[SUPERSCRIPT ZERO]" ~~ m/^<-isN>$/ ), q{Don't match inverted (Number)} ); ok(!( "\c[LATIN LETTER SMALL CAPITAL E]" ~~ m/^$/ ), q{Don't match unrelated (Number)} ); ok("\c[LATIN LETTER SMALL CAPITAL E]" ~~ m/^.$/, q{Match unrelated negated (Number)} ); ok("\c[LATIN LETTER SMALL CAPITAL E]" ~~ m/^<-isN>$/, q{Match unrelated inverted (Number)} ); ok("\c[LATIN LETTER SMALL CAPITAL E]\c[SUPERSCRIPT ZERO]" ~~ m//, q{Match unanchored (Number)} ); ok("\c[DIGIT ZERO]" ~~ m/^$/, q{Match } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^<-isNumber>$/ ), q{Don't match inverted } ); ok(!( "\x[A994]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[A994]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[A994]" ~~ m/^<-isNumber>$/, q{Match unrelated inverted } ); ok("\x[A994]\c[DIGIT ZERO]" ~~ m//, q{Match unanchored } ); # Nd DecimalNumber ok("\c[DIGIT ZERO]" ~~ m/^$/, q{Match (DecimalNumber)} ); ok(!( "\c[DIGIT ZERO]" ~~ m/^.$/ ), q{Don't match negated (DecimalNumber)} ); ok(!( "\c[DIGIT ZERO]" ~~ m/^<-isNd>$/ ), q{Don't match inverted (DecimalNumber)} ); ok(!( "\x[4E2C]" ~~ m/^$/ ), q{Don't match unrelated (DecimalNumber)} ); ok("\x[4E2C]" ~~ m/^.$/, q{Match unrelated negated (DecimalNumber)} ); ok("\x[4E2C]" ~~ m/^<-isNd>$/, q{Match unrelated inverted (DecimalNumber)} ); ok(!( "\c[SUPERSCRIPT TWO]" ~~ m/^$/ ), q{Don't match related (DecimalNumber)} ); ok("\c[SUPERSCRIPT TWO]" ~~ m/^.$/, q{Match related negated (DecimalNumber)} ); ok("\c[SUPERSCRIPT TWO]" ~~ m/^<-isNd>$/, q{Match related inverted (DecimalNumber)} ); ok("\x[4E2C]\c[SUPERSCRIPT TWO]\c[DIGIT ZERO]" ~~ m//, q{Match unanchored (DecimalNumber)} ); ok("\c[DIGIT ZERO]" ~~ m/^$/, q{Match } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^<-isDecimalNumber>$/ ), q{Don't match inverted } ); ok(!( "\x[A652]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[A652]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[A652]" ~~ m/^<-isDecimalNumber>$/, q{Match unrelated inverted } ); ok("\x[A652]\c[DIGIT ZERO]" ~~ m//, q{Match unanchored } ); # Nl LetterNumber ok("\c[RUNIC ARLAUG SYMBOL]" ~~ m/^$/, q{Match (LetterNumber)} ); ok(!( "\c[RUNIC ARLAUG SYMBOL]" ~~ m/^.$/ ), q{Don't match negated (LetterNumber)} ); ok(!( "\c[RUNIC ARLAUG SYMBOL]" ~~ m/^<-isNl>$/ ), q{Don't match inverted (LetterNumber)} ); ok(!( "\x[6C2F]" ~~ m/^$/ ), q{Don't match unrelated (LetterNumber)} ); ok("\x[6C2F]" ~~ m/^.$/, q{Match unrelated negated (LetterNumber)} ); ok("\x[6C2F]" ~~ m/^<-isNl>$/, q{Match unrelated inverted (LetterNumber)} ); ok(!( "\c[DIGIT ZERO]" ~~ m/^$/ ), q{Don't match related (LetterNumber)} ); ok("\c[DIGIT ZERO]" ~~ m/^.$/, q{Match related negated (LetterNumber)} ); ok("\c[DIGIT ZERO]" ~~ m/^<-isNl>$/, q{Match related inverted (LetterNumber)} ); ok("\x[6C2F]\c[DIGIT ZERO]\c[RUNIC ARLAUG SYMBOL]" ~~ m//, q{Match unanchored (LetterNumber)} ); ok("\c[RUNIC ARLAUG SYMBOL]" ~~ m/^$/, q{Match } ); ok(!( "\c[RUNIC ARLAUG SYMBOL]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[RUNIC ARLAUG SYMBOL]" ~~ m/^<-isLetterNumber>$/ ), q{Don't match inverted } ); ok(!( "\x[80A5]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[80A5]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[80A5]" ~~ m/^<-isLetterNumber>$/, q{Match unrelated inverted } ); ok(!( "\x[80A5]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[80A5]" ~~ m/^.$/, q{Match related negated } ); ok("\x[80A5]" ~~ m/^<-isLetterNumber>$/, q{Match related inverted } ); ok("\x[80A5]\x[80A5]\c[RUNIC ARLAUG SYMBOL]" ~~ m//, q{Match unanchored } ); # No OtherNumber ok("\c[SUPERSCRIPT TWO]" ~~ m/^$/, q{Match (OtherNumber)} ); ok(!( "\c[SUPERSCRIPT TWO]" ~~ m/^.$/ ), q{Don't match negated (OtherNumber)} ); ok(!( "\c[SUPERSCRIPT TWO]" ~~ m/^<-isNo>$/ ), q{Don't match inverted (OtherNumber)} ); ok(!( "\x[92F3]" ~~ m/^$/ ), q{Don't match unrelated (OtherNumber)} ); ok("\x[92F3]" ~~ m/^.$/, q{Match unrelated negated (OtherNumber)} ); ok("\x[92F3]" ~~ m/^<-isNo>$/, q{Match unrelated inverted (OtherNumber)} ); ok(!( "\c[DIGIT ZERO]" ~~ m/^$/ ), q{Don't match related (OtherNumber)} ); ok("\c[DIGIT ZERO]" ~~ m/^.$/, q{Match related negated (OtherNumber)} ); ok("\c[DIGIT ZERO]" ~~ m/^<-isNo>$/, q{Match related inverted (OtherNumber)} ); ok("\x[92F3]\c[DIGIT ZERO]\c[SUPERSCRIPT TWO]" ~~ m//, q{Match unanchored (OtherNumber)} ); ok("\c[SUPERSCRIPT TWO]" ~~ m/^$/, q{Match } ); ok(!( "\c[SUPERSCRIPT TWO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SUPERSCRIPT TWO]" ~~ m/^<-isOtherNumber>$/ ), q{Don't match inverted } ); ok(!( "\x[5363]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5363]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5363]" ~~ m/^<-isOtherNumber>$/, q{Match unrelated inverted } ); ok("\x[5363]\c[SUPERSCRIPT TWO]" ~~ m//, q{Match unanchored } ); # P Punctuation ok("\c[EXCLAMATION MARK]" ~~ m/^$/, q{Match (Punctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^.$/ ), q{Don't match negated (Punctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^<-isP>$/ ), q{Don't match inverted (Punctuation)} ); ok(!( "\x[A918]" ~~ m/^$/ ), q{Don't match unrelated (Punctuation)} ); ok("\x[A918]" ~~ m/^.$/, q{Match unrelated negated (Punctuation)} ); ok("\x[A918]" ~~ m/^<-isP>$/, q{Match unrelated inverted (Punctuation)} ); ok("\x[A918]\c[EXCLAMATION MARK]" ~~ m//, q{Match unanchored (Punctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^<-isPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[CE60]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[CE60]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[CE60]" ~~ m/^<-isPunctuation>$/, q{Match unrelated inverted } ); ok("\x[CE60]\c[EXCLAMATION MARK]" ~~ m//, q{Match unanchored } ); # Pc ConnectorPunctuation ok("\c[LOW LINE]" ~~ m/^$/, q{Match (ConnectorPunctuation)} ); ok(!( "\c[LOW LINE]" ~~ m/^.$/ ), q{Don't match negated (ConnectorPunctuation)} ); ok(!( "\c[LOW LINE]" ~~ m/^<-isPc>$/ ), q{Don't match inverted (ConnectorPunctuation)} ); ok(!( "\x[5F19]" ~~ m/^$/ ), q{Don't match unrelated (ConnectorPunctuation)} ); ok("\x[5F19]" ~~ m/^.$/, q{Match unrelated negated (ConnectorPunctuation)} ); ok("\x[5F19]" ~~ m/^<-isPc>$/, q{Match unrelated inverted (ConnectorPunctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^$/ ), q{Don't match related (ConnectorPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^.$/, q{Match related negated (ConnectorPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^<-isPc>$/, q{Match related inverted (ConnectorPunctuation)} ); ok("\x[5F19]\c[EXCLAMATION MARK]\c[LOW LINE]" ~~ m//, q{Match unanchored (ConnectorPunctuation)} ); ok("\c[LOW LINE]" ~~ m/^$/, q{Match } ); ok(!( "\c[LOW LINE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LOW LINE]" ~~ m/^<-isConnectorPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE MGOX]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE MGOX]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE MGOX]" ~~ m/^<-isConnectorPunctuation>$/, q{Match unrelated inverted } ); ok("\c[YI SYLLABLE MGOX]\c[LOW LINE]" ~~ m//, q{Match unanchored } ); # Pd DashPunctuation ok("\c[HYPHEN-MINUS]" ~~ m/^$/, q{Match (DashPunctuation)} ); ok(!( "\c[HYPHEN-MINUS]" ~~ m/^.$/ ), q{Don't match negated (DashPunctuation)} ); ok(!( "\c[HYPHEN-MINUS]" ~~ m/^<-isPd>$/ ), q{Don't match inverted (DashPunctuation)} ); ok(!( "\x[49A1]" ~~ m/^$/ ), q{Don't match unrelated (DashPunctuation)} ); ok("\x[49A1]" ~~ m/^.$/, q{Match unrelated negated (DashPunctuation)} ); ok("\x[49A1]" ~~ m/^<-isPd>$/, q{Match unrelated inverted (DashPunctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^$/ ), q{Don't match related (DashPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^.$/, q{Match related negated (DashPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^<-isPd>$/, q{Match related inverted (DashPunctuation)} ); ok("\x[49A1]\c[EXCLAMATION MARK]\c[HYPHEN-MINUS]" ~~ m//, q{Match unanchored (DashPunctuation)} ); ok("\c[HYPHEN-MINUS]" ~~ m/^$/, q{Match } ); ok(!( "\c[HYPHEN-MINUS]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HYPHEN-MINUS]" ~~ m/^<-isDashPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[3C6E]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3C6E]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3C6E]" ~~ m/^<-isDashPunctuation>$/, q{Match unrelated inverted } ); ok("\x[3C6E]\c[HYPHEN-MINUS]" ~~ m//, q{Match unanchored } ); # Ps OpenPunctuation ok("\c[LEFT PARENTHESIS]" ~~ m/^$/, q{Match (OpenPunctuation)} ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^.$/ ), q{Don't match negated (OpenPunctuation)} ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^<-isPs>$/ ), q{Don't match inverted (OpenPunctuation)} ); ok(!( "\x[C8A5]" ~~ m/^$/ ), q{Don't match unrelated (OpenPunctuation)} ); ok("\x[C8A5]" ~~ m/^.$/, q{Match unrelated negated (OpenPunctuation)} ); ok("\x[C8A5]" ~~ m/^<-isPs>$/, q{Match unrelated inverted (OpenPunctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^$/ ), q{Don't match related (OpenPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^.$/, q{Match related negated (OpenPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^<-isPs>$/, q{Match related inverted (OpenPunctuation)} ); ok("\x[C8A5]\c[EXCLAMATION MARK]\c[LEFT PARENTHESIS]" ~~ m//, q{Match unanchored (OpenPunctuation)} ); ok("\c[LEFT PARENTHESIS]" ~~ m/^$/, q{Match } ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^<-isOpenPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[84B8]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[84B8]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[84B8]" ~~ m/^<-isOpenPunctuation>$/, q{Match unrelated inverted } ); ok("\x[84B8]\c[LEFT PARENTHESIS]" ~~ m//, q{Match unanchored } ); # Pe ClosePunctuation ok("\c[RIGHT PARENTHESIS]" ~~ m/^$/, q{Match (ClosePunctuation)} ); ok(!( "\c[RIGHT PARENTHESIS]" ~~ m/^.$/ ), q{Don't match negated (ClosePunctuation)} ); ok(!( "\c[RIGHT PARENTHESIS]" ~~ m/^<-isPe>$/ ), q{Don't match inverted (ClosePunctuation)} ); ok(!( "\x[BB92]" ~~ m/^$/ ), q{Don't match unrelated (ClosePunctuation)} ); ok("\x[BB92]" ~~ m/^.$/, q{Match unrelated negated (ClosePunctuation)} ); ok("\x[BB92]" ~~ m/^<-isPe>$/, q{Match unrelated inverted (ClosePunctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^$/ ), q{Don't match related (ClosePunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^.$/, q{Match related negated (ClosePunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^<-isPe>$/, q{Match related inverted (ClosePunctuation)} ); ok("\x[BB92]\c[EXCLAMATION MARK]\c[RIGHT PARENTHESIS]" ~~ m//, q{Match unanchored (ClosePunctuation)} ); ok("\c[RIGHT PARENTHESIS]" ~~ m/^$/, q{Match } ); ok(!( "\c[RIGHT PARENTHESIS]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[RIGHT PARENTHESIS]" ~~ m/^<-isClosePunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[D55D]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D55D]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D55D]" ~~ m/^<-isClosePunctuation>$/, q{Match unrelated inverted } ); ok("\x[D55D]\c[RIGHT PARENTHESIS]" ~~ m//, q{Match unanchored } ); # Pi InitialPunctuation ok("\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^$/, q{Match (InitialPunctuation)} ); ok(!( "\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^.$/ ), q{Don't match negated (InitialPunctuation)} ); ok(!( "\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^<-isPi>$/ ), q{Don't match inverted (InitialPunctuation)} ); ok(!( "\x[3A35]" ~~ m/^$/ ), q{Don't match unrelated (InitialPunctuation)} ); ok("\x[3A35]" ~~ m/^.$/, q{Match unrelated negated (InitialPunctuation)} ); ok("\x[3A35]" ~~ m/^<-isPi>$/, q{Match unrelated inverted (InitialPunctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^$/ ), q{Don't match related (InitialPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^.$/, q{Match related negated (InitialPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^<-isPi>$/, q{Match related inverted (InitialPunctuation)} ); ok("\x[3A35]\c[EXCLAMATION MARK]\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m//, q{Match unanchored (InitialPunctuation)} ); ok("\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^<-isInitialPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[B84F]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B84F]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B84F]" ~~ m/^<-isInitialPunctuation>$/, q{Match unrelated inverted } ); ok("\x[B84F]\c[LEFT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m//, q{Match unanchored } ); # Pf FinalPunctuation ok("\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^$/, q{Match (FinalPunctuation)} ); ok(!( "\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^.$/ ), q{Don't match negated (FinalPunctuation)} ); ok(!( "\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^<-isPf>$/ ), q{Don't match inverted (FinalPunctuation)} ); ok(!( "\x[27CF]" ~~ m/^$/ ), q{Don't match unrelated (FinalPunctuation)} ); ok("\x[27CF]" ~~ m/^.$/, q{Match unrelated negated (FinalPunctuation)} ); ok("\x[27CF]" ~~ m/^<-isPf>$/, q{Match unrelated inverted (FinalPunctuation)} ); ok(!( "\c[MATHEMATICAL LEFT WHITE SQUARE BRACKET]" ~~ m/^$/ ), q{Don't match related (FinalPunctuation)} ); ok("\c[MATHEMATICAL LEFT WHITE SQUARE BRACKET]" ~~ m/^.$/, q{Match related negated (FinalPunctuation)} ); ok("\c[MATHEMATICAL LEFT WHITE SQUARE BRACKET]" ~~ m/^<-isPf>$/, q{Match related inverted (FinalPunctuation)} ); ok("\x[27CF]\c[MATHEMATICAL LEFT WHITE SQUARE BRACKET]\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m//, q{Match unanchored (FinalPunctuation)} ); ok("\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m/^<-isFinalPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[4F65]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[4F65]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[4F65]" ~~ m/^<-isFinalPunctuation>$/, q{Match unrelated inverted } ); ok("\x[4F65]\c[RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK]" ~~ m//, q{Match unanchored } ); # Po OtherPunctuation ok("\c[EXCLAMATION MARK]" ~~ m/^$/, q{Match (OtherPunctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^.$/ ), q{Don't match negated (OtherPunctuation)} ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^<-isPo>$/ ), q{Don't match inverted (OtherPunctuation)} ); ok(!( "\x[AA74]" ~~ m/^$/ ), q{Don't match unrelated (OtherPunctuation)} ); ok("\x[AA74]" ~~ m/^.$/, q{Match unrelated negated (OtherPunctuation)} ); ok("\x[AA74]" ~~ m/^<-isPo>$/, q{Match unrelated inverted (OtherPunctuation)} ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^$/ ), q{Don't match related (OtherPunctuation)} ); ok("\c[LEFT PARENTHESIS]" ~~ m/^.$/, q{Match related negated (OtherPunctuation)} ); ok("\c[LEFT PARENTHESIS]" ~~ m/^<-isPo>$/, q{Match related inverted (OtherPunctuation)} ); ok("\x[AA74]\c[LEFT PARENTHESIS]\c[EXCLAMATION MARK]" ~~ m//, q{Match unanchored (OtherPunctuation)} ); ok("\c[EXCLAMATION MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^<-isOtherPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[7DD2]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7DD2]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7DD2]" ~~ m/^<-isOtherPunctuation>$/, q{Match unrelated inverted } ); ok("\x[7DD2]\c[EXCLAMATION MARK]" ~~ m//, q{Match unanchored } ); # S Symbol ok("\c[YI RADICAL QOT]" ~~ m/^$/, q{Match (Symbol)} ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^.$/ ), q{Don't match negated (Symbol)} ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^<-isS>$/ ), q{Don't match inverted (Symbol)} ); ok(!( "\x[8839]" ~~ m/^$/ ), q{Don't match unrelated (Symbol)} ); ok("\x[8839]" ~~ m/^.$/, q{Match unrelated negated (Symbol)} ); ok("\x[8839]" ~~ m/^<-isS>$/, q{Match unrelated inverted (Symbol)} ); ok("\x[8839]\c[YI RADICAL QOT]" ~~ m//, q{Match unanchored (Symbol)} ); ok("\c[HEXAGRAM FOR THE CREATIVE HEAVEN]" ~~ m/^$/, q{Match } ); ok(!( "\c[HEXAGRAM FOR THE CREATIVE HEAVEN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HEXAGRAM FOR THE CREATIVE HEAVEN]" ~~ m/^<-isSymbol>$/ ), q{Don't match inverted } ); ok(!( "\x[4A1C]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[4A1C]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[4A1C]" ~~ m/^<-isSymbol>$/, q{Match unrelated inverted } ); ok("\x[4A1C]\c[HEXAGRAM FOR THE CREATIVE HEAVEN]" ~~ m//, q{Match unanchored } ); # Sm MathSymbol ok("\c[PLUS SIGN]" ~~ m/^$/, q{Match (MathSymbol)} ); ok(!( "\c[PLUS SIGN]" ~~ m/^.$/ ), q{Don't match negated (MathSymbol)} ); ok(!( "\c[PLUS SIGN]" ~~ m/^<-isSm>$/ ), q{Don't match inverted (MathSymbol)} ); ok(!( "\x[B258]" ~~ m/^$/ ), q{Don't match unrelated (MathSymbol)} ); ok("\x[B258]" ~~ m/^.$/, q{Match unrelated negated (MathSymbol)} ); ok("\x[B258]" ~~ m/^<-isSm>$/, q{Match unrelated inverted (MathSymbol)} ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^$/ ), q{Don't match related (MathSymbol)} ); ok("\c[DOLLAR SIGN]" ~~ m/^.$/, q{Match related negated (MathSymbol)} ); ok("\c[DOLLAR SIGN]" ~~ m/^<-isSm>$/, q{Match related inverted (MathSymbol)} ); ok("\x[B258]\c[DOLLAR SIGN]\c[PLUS SIGN]" ~~ m//, q{Match unanchored (MathSymbol)} ); ok("\c[PLUS SIGN]" ~~ m/^$/, q{Match } ); ok(!( "\c[PLUS SIGN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[PLUS SIGN]" ~~ m/^<-isMathSymbol>$/ ), q{Don't match inverted } ); ok(!( "\x[98FF]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[98FF]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[98FF]" ~~ m/^<-isMathSymbol>$/, q{Match unrelated inverted } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMathSymbol>$/, q{Match related inverted } ); ok("\x[98FF]\c[COMBINING GRAVE ACCENT]\c[PLUS SIGN]" ~~ m//, q{Match unanchored } ); # Sc CurrencySymbol ok("\c[DOLLAR SIGN]" ~~ m/^$/, q{Match (CurrencySymbol)} ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^.$/ ), q{Don't match negated (CurrencySymbol)} ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^<-isSc>$/ ), q{Don't match inverted (CurrencySymbol)} ); ok(!( "\x[994C]" ~~ m/^$/ ), q{Don't match unrelated (CurrencySymbol)} ); ok("\x[994C]" ~~ m/^.$/, q{Match unrelated negated (CurrencySymbol)} ); ok("\x[994C]" ~~ m/^<-isSc>$/, q{Match unrelated inverted (CurrencySymbol)} ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^$/ ), q{Don't match related (CurrencySymbol)} ); ok("\c[YI RADICAL QOT]" ~~ m/^.$/, q{Match related negated (CurrencySymbol)} ); ok("\c[YI RADICAL QOT]" ~~ m/^<-isSc>$/, q{Match related inverted (CurrencySymbol)} ); ok("\x[994C]\c[YI RADICAL QOT]\c[DOLLAR SIGN]" ~~ m//, q{Match unanchored (CurrencySymbol)} ); ok("\c[DOLLAR SIGN]" ~~ m/^$/, q{Match } ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^<-isCurrencySymbol>$/ ), q{Don't match inverted } ); ok(!( "\x[37C0]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[37C0]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[37C0]" ~~ m/^<-isCurrencySymbol>$/, q{Match unrelated inverted } ); ok("\x[37C0]\c[DOLLAR SIGN]" ~~ m//, q{Match unanchored } ); # Sk ModifierSymbol ok("\c[CIRCUMFLEX ACCENT]" ~~ m/^$/, q{Match (ModifierSymbol)} ); ok(!( "\c[CIRCUMFLEX ACCENT]" ~~ m/^.$/ ), q{Don't match negated (ModifierSymbol)} ); ok(!( "\c[CIRCUMFLEX ACCENT]" ~~ m/^<-isSk>$/ ), q{Don't match inverted (ModifierSymbol)} ); ok(!( "\x[4578]" ~~ m/^$/ ), q{Don't match unrelated (ModifierSymbol)} ); ok("\x[4578]" ~~ m/^.$/, q{Match unrelated negated (ModifierSymbol)} ); ok("\x[4578]" ~~ m/^<-isSk>$/, q{Match unrelated inverted (ModifierSymbol)} ); ok(!( "\c[HEXAGRAM FOR THE CREATIVE HEAVEN]" ~~ m/^$/ ), q{Don't match related (ModifierSymbol)} ); ok("\c[HEXAGRAM FOR THE CREATIVE HEAVEN]" ~~ m/^.$/, q{Match related negated (ModifierSymbol)} ); ok("\c[HEXAGRAM FOR THE CREATIVE HEAVEN]" ~~ m/^<-isSk>$/, q{Match related inverted (ModifierSymbol)} ); ok("\x[4578]\c[HEXAGRAM FOR THE CREATIVE HEAVEN]\c[CIRCUMFLEX ACCENT]" ~~ m//, q{Match unanchored (ModifierSymbol)} ); ok("\c[CIRCUMFLEX ACCENT]" ~~ m/^$/, q{Match } ); ok(!( "\c[CIRCUMFLEX ACCENT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CIRCUMFLEX ACCENT]" ~~ m/^<-isModifierSymbol>$/ ), q{Don't match inverted } ); ok(!( "\x[42F1]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[42F1]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[42F1]" ~~ m/^<-isModifierSymbol>$/, q{Match unrelated inverted } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isModifierSymbol>$/, q{Match related inverted } ); ok("\x[42F1]\c[COMBINING GRAVE ACCENT]\c[CIRCUMFLEX ACCENT]" ~~ m//, q{Match unanchored } ); # So OtherSymbol ok("\c[YI RADICAL QOT]" ~~ m/^$/, q{Match (OtherSymbol)} ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^.$/ ), q{Don't match negated (OtherSymbol)} ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^<-isSo>$/ ), q{Don't match inverted (OtherSymbol)} ); ok(!( "\x[83DE]" ~~ m/^$/ ), q{Don't match unrelated (OtherSymbol)} ); ok("\x[83DE]" ~~ m/^.$/, q{Match unrelated negated (OtherSymbol)} ); ok("\x[83DE]" ~~ m/^<-isSo>$/, q{Match unrelated inverted (OtherSymbol)} ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^$/ ), q{Don't match related (OtherSymbol)} ); ok("\c[DOLLAR SIGN]" ~~ m/^.$/, q{Match related negated (OtherSymbol)} ); ok("\c[DOLLAR SIGN]" ~~ m/^<-isSo>$/, q{Match related inverted (OtherSymbol)} ); ok("\x[83DE]\c[DOLLAR SIGN]\c[YI RADICAL QOT]" ~~ m//, q{Match unanchored (OtherSymbol)} ); ok("\c[YI RADICAL QOT]" ~~ m/^$/, q{Match } ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^<-isOtherSymbol>$/ ), q{Don't match inverted } ); ok(!( "\x[9B2C]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9B2C]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9B2C]" ~~ m/^<-isOtherSymbol>$/, q{Match unrelated inverted } ); ok("\x[9B2C]\c[YI RADICAL QOT]" ~~ m//, q{Match unanchored } ); # Z Separator ok("\c[IDEOGRAPHIC SPACE]" ~~ m/^$/, q{Match (Separator)} ); ok(!( "\c[IDEOGRAPHIC SPACE]" ~~ m/^.$/ ), q{Don't match negated (Separator)} ); ok(!( "\c[IDEOGRAPHIC SPACE]" ~~ m/^<-isZ>$/ ), q{Don't match inverted (Separator)} ); ok(!( "\x[2C08]" ~~ m/^$/ ), q{Don't match unrelated (Separator)} ); ok("\x[2C08]" ~~ m/^.$/, q{Match unrelated negated (Separator)} ); ok("\x[2C08]" ~~ m/^<-isZ>$/, q{Match unrelated inverted (Separator)} ); ok("\x[2C08]\c[IDEOGRAPHIC SPACE]" ~~ m//, q{Match unanchored (Separator)} ); ok("\c[SPACE]" ~~ m/^$/, q{Match } ); ok(!( "\c[SPACE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SPACE]" ~~ m/^<-isSeparator>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE SOX]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE SOX]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE SOX]" ~~ m/^<-isSeparator>$/, q{Match unrelated inverted } ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[YI RADICAL QOT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[YI RADICAL QOT]" ~~ m/^<-isSeparator>$/, q{Match related inverted } ); ok("\c[YI SYLLABLE SOX]\c[YI RADICAL QOT]\c[SPACE]" ~~ m//, q{Match unanchored } ); # Zs SpaceSeparator ok("\c[SPACE]" ~~ m/^$/, q{Match (SpaceSeparator)} ); ok(!( "\c[SPACE]" ~~ m/^.$/ ), q{Don't match negated (SpaceSeparator)} ); ok(!( "\c[SPACE]" ~~ m/^<-isZs>$/ ), q{Don't match inverted (SpaceSeparator)} ); ok(!( "\x[88DD]" ~~ m/^$/ ), q{Don't match unrelated (SpaceSeparator)} ); ok("\x[88DD]" ~~ m/^.$/, q{Match unrelated negated (SpaceSeparator)} ); ok("\x[88DD]" ~~ m/^<-isZs>$/, q{Match unrelated inverted (SpaceSeparator)} ); ok(!( "\c[LINE SEPARATOR]" ~~ m/^$/ ), q{Don't match related (SpaceSeparator)} ); ok("\c[LINE SEPARATOR]" ~~ m/^.$/, q{Match related negated (SpaceSeparator)} ); ok("\c[LINE SEPARATOR]" ~~ m/^<-isZs>$/, q{Match related inverted (SpaceSeparator)} ); ok("\x[88DD]\c[LINE SEPARATOR]\c[SPACE]" ~~ m//, q{Match unanchored (SpaceSeparator)} ); ok("\c[SPACE]" ~~ m/^$/, q{Match } ); ok(!( "\c[SPACE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SPACE]" ~~ m/^<-isSpaceSeparator>$/ ), q{Don't match inverted } ); ok(!( "\x[C808]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C808]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C808]" ~~ m/^<-isSpaceSeparator>$/, q{Match unrelated inverted } ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[DOLLAR SIGN]" ~~ m/^.$/, q{Match related negated } ); ok("\c[DOLLAR SIGN]" ~~ m/^<-isSpaceSeparator>$/, q{Match related inverted } ); ok("\x[C808]\c[DOLLAR SIGN]\c[SPACE]" ~~ m//, q{Match unanchored } ); # Zl LineSeparator ok("\c[LINE SEPARATOR]" ~~ m/^$/, q{Match (LineSeparator)} ); ok(!( "\c[LINE SEPARATOR]" ~~ m/^.$/ ), q{Don't match negated (LineSeparator)} ); ok(!( "\c[LINE SEPARATOR]" ~~ m/^<-isZl>$/ ), q{Don't match inverted (LineSeparator)} ); ok(!( "\x[B822]" ~~ m/^$/ ), q{Don't match unrelated (LineSeparator)} ); ok("\x[B822]" ~~ m/^.$/, q{Match unrelated negated (LineSeparator)} ); ok("\x[B822]" ~~ m/^<-isZl>$/, q{Match unrelated inverted (LineSeparator)} ); ok(!( "\c[SPACE]" ~~ m/^$/ ), q{Don't match related (LineSeparator)} ); ok("\c[SPACE]" ~~ m/^.$/, q{Match related negated (LineSeparator)} ); ok("\c[SPACE]" ~~ m/^<-isZl>$/, q{Match related inverted (LineSeparator)} ); ok("\x[B822]\c[SPACE]\c[LINE SEPARATOR]" ~~ m//, q{Match unanchored (LineSeparator)} ); ok("\c[LINE SEPARATOR]" ~~ m/^$/, q{Match } ); ok(!( "\c[LINE SEPARATOR]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LINE SEPARATOR]" ~~ m/^<-isLineSeparator>$/ ), q{Don't match inverted } ); ok(!( "\x[1390]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[1390]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[1390]" ~~ m/^<-isLineSeparator>$/, q{Match unrelated inverted } ); ok(!( "\c[CHEROKEE LETTER A]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[CHEROKEE LETTER A]" ~~ m/^.$/, q{Match related negated } ); ok("\c[CHEROKEE LETTER A]" ~~ m/^<-isLineSeparator>$/, q{Match related inverted } ); ok("\x[1390]\c[CHEROKEE LETTER A]\c[LINE SEPARATOR]" ~~ m//, q{Match unanchored } ); # Zp ParagraphSeparator ok("\c[PARAGRAPH SEPARATOR]" ~~ m/^$/, q{Match (ParagraphSeparator)} ); ok(!( "\c[PARAGRAPH SEPARATOR]" ~~ m/^.$/ ), q{Don't match negated (ParagraphSeparator)} ); ok(!( "\c[PARAGRAPH SEPARATOR]" ~~ m/^<-isZp>$/ ), q{Don't match inverted (ParagraphSeparator)} ); ok(!( "\x[5FDE]" ~~ m/^$/ ), q{Don't match unrelated (ParagraphSeparator)} ); ok("\x[5FDE]" ~~ m/^.$/, q{Match unrelated negated (ParagraphSeparator)} ); ok("\x[5FDE]" ~~ m/^<-isZp>$/, q{Match unrelated inverted (ParagraphSeparator)} ); ok(!( "\c[SPACE]" ~~ m/^$/ ), q{Don't match related (ParagraphSeparator)} ); ok("\c[SPACE]" ~~ m/^.$/, q{Match related negated (ParagraphSeparator)} ); ok("\c[SPACE]" ~~ m/^<-isZp>$/, q{Match related inverted (ParagraphSeparator)} ); ok("\x[5FDE]\c[SPACE]\c[PARAGRAPH SEPARATOR]" ~~ m//, q{Match unanchored (ParagraphSeparator)} ); ok("\c[PARAGRAPH SEPARATOR]" ~~ m/^$/, q{Match } ); ok(!( "\c[PARAGRAPH SEPARATOR]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[PARAGRAPH SEPARATOR]" ~~ m/^<-isParagraphSeparator>$/ ), q{Don't match inverted } ); ok(!( "\x[345B]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[345B]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[345B]" ~~ m/^<-isParagraphSeparator>$/, q{Match unrelated inverted } ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[EXCLAMATION MARK]" ~~ m/^.$/, q{Match related negated } ); ok("\c[EXCLAMATION MARK]" ~~ m/^<-isParagraphSeparator>$/, q{Match related inverted } ); ok("\x[345B]\c[EXCLAMATION MARK]\c[PARAGRAPH SEPARATOR]" ~~ m//, q{Match unanchored } ); # C Other ok("\x[9FA6]" ~~ m/^$/, q{Match (Other)} ); ok(!( "\x[9FA6]" ~~ m/^.$/ ), q{Don't match negated (Other)} ); ok(!( "\x[9FA6]" ~~ m/^<-isC>$/ ), q{Don't match inverted (Other)} ); ok(!( "\x[6A3F]" ~~ m/^$/ ), q{Don't match unrelated (Other)} ); ok("\x[6A3F]" ~~ m/^.$/, q{Match unrelated negated (Other)} ); ok("\x[6A3F]" ~~ m/^<-isC>$/, q{Match unrelated inverted (Other)} ); ok("\x[6A3F]\x[9FA6]" ~~ m//, q{Match unanchored (Other)} ); ok("\x[A679]" ~~ m/^$/, q{Match } ); ok(!( "\x[A679]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[A679]" ~~ m/^<-isOther>$/ ), q{Don't match inverted } ); ok(!( "\x[AC00]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[AC00]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[AC00]" ~~ m/^<-isOther>$/, q{Match unrelated inverted } ); ok("\x[AC00]\x[A679]" ~~ m//, q{Match unanchored } ); # Cc Control ok("\c[NULL]" ~~ m/^$/, q{Match (Control)} ); ok(!( "\c[NULL]" ~~ m/^.$/ ), q{Don't match negated (Control)} ); ok(!( "\c[NULL]" ~~ m/^<-isCc>$/ ), q{Don't match inverted (Control)} ); ok(!( "\x[0A7A]" ~~ m/^$/ ), q{Don't match unrelated (Control)} ); ok("\x[0A7A]" ~~ m/^.$/, q{Match unrelated negated (Control)} ); ok("\x[0A7A]" ~~ m/^<-isCc>$/, q{Match unrelated inverted (Control)} ); ok(!( "\x[0A7A]" ~~ m/^$/ ), q{Don't match related (Control)} ); ok("\x[0A7A]" ~~ m/^.$/, q{Match related negated (Control)} ); ok("\x[0A7A]" ~~ m/^<-isCc>$/, q{Match related inverted (Control)} ); ok("\x[0A7A]\x[0A7A]\c[NULL]" ~~ m//, q{Match unanchored (Control)} ); ok("\c[NULL]" ~~ m/^$/, q{Match } ); ok(!( "\c[NULL]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[NULL]" ~~ m/^<-isControl>$/ ), q{Don't match inverted } ); ok(!( "\x[4886]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[4886]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[4886]" ~~ m/^<-isControl>$/, q{Match unrelated inverted } ); ok(!( "\x[4DB6]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[4DB6]" ~~ m/^.$/, q{Match related negated } ); ok("\x[4DB6]" ~~ m/^<-isControl>$/, q{Match related inverted } ); ok("\x[4886]\x[4DB6]\c[NULL]" ~~ m//, q{Match unanchored } ); # Cf Format ok("\c[SOFT HYPHEN]" ~~ m/^$/, q{Match (Format)} ); ok(!( "\c[SOFT HYPHEN]" ~~ m/^.$/ ), q{Don't match negated (Format)} ); ok(!( "\c[SOFT HYPHEN]" ~~ m/^<-isCf>$/ ), q{Don't match inverted (Format)} ); ok(!( "\x[77B8]" ~~ m/^$/ ), q{Don't match unrelated (Format)} ); ok("\x[77B8]" ~~ m/^.$/, q{Match unrelated negated (Format)} ); ok("\x[77B8]" ~~ m/^<-isCf>$/, q{Match unrelated inverted (Format)} ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match related (Format)} ); ok("\x[9FA6]" ~~ m/^.$/, q{Match related negated (Format)} ); ok("\x[9FA6]" ~~ m/^<-isCf>$/, q{Match related inverted (Format)} ); ok("\x[77B8]\x[9FA6]\c[SOFT HYPHEN]" ~~ m//, q{Match unanchored (Format)} ); ok("\c[KHMER VOWEL INHERENT AQ]" ~~ m/^$/, q{Match } ); ok(!( "\c[KHMER VOWEL INHERENT AQ]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KHMER VOWEL INHERENT AQ]" ~~ m/^<-isFormat>$/ ), q{Don't match inverted } ); ok(!( "\c[DEVANAGARI VOWEL SIGN AU]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[DEVANAGARI VOWEL SIGN AU]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[DEVANAGARI VOWEL SIGN AU]" ~~ m/^<-isFormat>$/, q{Match unrelated inverted } ); ok("\c[DEVANAGARI VOWEL SIGN AU]\c[KHMER VOWEL INHERENT AQ]" ~~ m//, q{Match unanchored } ); # BidiL # Left-to-Right ok("\c[YI SYLLABLE IT]" ~~ m/^$/, q{Match (Left-to-Right)} ); ok(!( "\c[YI SYLLABLE IT]" ~~ m/^.$/ ), q{Don't match negated (Left-to-Right)} ); ok(!( "\c[YI SYLLABLE IT]" ~~ m/^<-isBidiL>$/ ), q{Don't match inverted (Left-to-Right)} ); ok(!( "\x[5A87]" ~~ m/^$/ ), q{Don't match unrelated (Left-to-Right)} ); ok("\x[5A87]" ~~ m/^.$/, q{Match unrelated negated (Left-to-Right)} ); ok("\x[5A87]" ~~ m/^<-isBidiL>$/, q{Match unrelated inverted (Left-to-Right)} ); ok("\x[5A87]\c[YI SYLLABLE IT]" ~~ m//, q{Match unanchored (Left-to-Right)} ); # BidiEN # European Number ok("\c[DIGIT ZERO]" ~~ m/^$/, q{Match (European Number)} ); ok(!( "\c[DIGIT ZERO]" ~~ m/^.$/ ), q{Don't match negated (European Number)} ); ok(!( "\c[DIGIT ZERO]" ~~ m/^<-isBidiEN>$/ ), q{Don't match inverted (European Number)} ); ok(!( "\x[AFFB]" ~~ m/^$/ ), q{Don't match unrelated (European Number)} ); ok("\x[AFFB]" ~~ m/^.$/, q{Match unrelated negated (European Number)} ); ok("\x[AFFB]" ~~ m/^<-isBidiEN>$/, q{Match unrelated inverted (European Number)} ); ok("\x[AFFB]\c[DIGIT ZERO]" ~~ m//, q{Match unanchored (European Number)} ); # BidiES # European Number Separator ok("\c[SOLIDUS]" ~~ m/^$/, q{Match (European Number Separator)} ); ok(!( "\c[SOLIDUS]" ~~ m/^.$/ ), q{Don't match negated (European Number Separator)} ); ok(!( "\c[SOLIDUS]" ~~ m/^<-isBidiES>$/ ), q{Don't match inverted (European Number Separator)} ); ok(!( "\x[7B89]" ~~ m/^$/ ), q{Don't match unrelated (European Number Separator)} ); ok("\x[7B89]" ~~ m/^.$/, q{Match unrelated negated (European Number Separator)} ); ok("\x[7B89]" ~~ m/^<-isBidiES>$/, q{Match unrelated inverted (European Number Separator)} ); ok("\x[7B89]\c[SOLIDUS]" ~~ m//, q{Match unanchored (European Number Separator)} ); # BidiET # European Number Terminator ok("\c[NUMBER SIGN]" ~~ m/^$/, q{Match (European Number Terminator)} ); ok(!( "\c[NUMBER SIGN]" ~~ m/^.$/ ), q{Don't match negated (European Number Terminator)} ); ok(!( "\c[NUMBER SIGN]" ~~ m/^<-isBidiET>$/ ), q{Don't match inverted (European Number Terminator)} ); ok(!( "\x[6780]" ~~ m/^$/ ), q{Don't match unrelated (European Number Terminator)} ); ok("\x[6780]" ~~ m/^.$/, q{Match unrelated negated (European Number Terminator)} ); ok("\x[6780]" ~~ m/^<-isBidiET>$/, q{Match unrelated inverted (European Number Terminator)} ); ok("\x[6780]\c[NUMBER SIGN]" ~~ m//, q{Match unanchored (European Number Terminator)} ); # BidiWS # Whitespace ok("\c[FORM FEED (FF)]" ~~ m/^$/, q{Match (Whitespace)} ); ok(!( "\c[FORM FEED (FF)]" ~~ m/^.$/ ), q{Don't match negated (Whitespace)} ); ok(!( "\c[FORM FEED (FF)]" ~~ m/^<-isBidiWS>$/ ), q{Don't match inverted (Whitespace)} ); ok(!( "\x[6CF9]" ~~ m/^$/ ), q{Don't match unrelated (Whitespace)} ); ok("\x[6CF9]" ~~ m/^.$/, q{Match unrelated negated (Whitespace)} ); ok("\x[6CF9]" ~~ m/^<-isBidiWS>$/, q{Match unrelated inverted (Whitespace)} ); ok("\x[6CF9]\c[FORM FEED (FF)]" ~~ m//, q{Match unanchored (Whitespace)} ); # Arabic ok("\c[ARABIC LETTER HAMZA]" ~~ m/^$/, q{Match } ); ok(!( "\c[ARABIC LETTER HAMZA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ARABIC LETTER HAMZA]" ~~ m/^<-isArabic>$/ ), q{Don't match inverted } ); ok(!( "\x[A649]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[A649]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[A649]" ~~ m/^<-isArabic>$/, q{Match unrelated inverted } ); ok("\x[A649]\c[ARABIC LETTER HAMZA]" ~~ m//, q{Match unanchored } ); # Armenian ok("\c[ARMENIAN CAPITAL LETTER AYB]" ~~ m/^$/, q{Match } ); ok(!( "\c[ARMENIAN CAPITAL LETTER AYB]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ARMENIAN CAPITAL LETTER AYB]" ~~ m/^<-isArmenian>$/ ), q{Don't match inverted } ); ok(!( "\x[CBFF]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[CBFF]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[CBFF]" ~~ m/^<-isArmenian>$/, q{Match unrelated inverted } ); ok("\x[CBFF]\c[ARMENIAN CAPITAL LETTER AYB]" ~~ m//, q{Match unanchored } ); # Bengali ok("\c[BENGALI SIGN CANDRABINDU]" ~~ m/^$/, q{Match } ); ok(!( "\c[BENGALI SIGN CANDRABINDU]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BENGALI SIGN CANDRABINDU]" ~~ m/^<-isBengali>$/ ), q{Don't match inverted } ); ok(!( "\x[D1E8]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D1E8]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D1E8]" ~~ m/^<-isBengali>$/, q{Match unrelated inverted } ); ok("\x[D1E8]\c[BENGALI SIGN CANDRABINDU]" ~~ m//, q{Match unanchored } ); # Bopomofo ok("\c[BOPOMOFO LETTER B]" ~~ m/^$/, q{Match } ); ok(!( "\c[BOPOMOFO LETTER B]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BOPOMOFO LETTER B]" ~~ m/^<-isBopomofo>$/ ), q{Don't match inverted } ); ok(!( "\x[B093]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B093]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B093]" ~~ m/^<-isBopomofo>$/, q{Match unrelated inverted } ); ok("\x[B093]\c[BOPOMOFO LETTER B]" ~~ m//, q{Match unanchored } ); # Buhid ok("\c[BUHID LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[BUHID LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BUHID LETTER A]" ~~ m/^<-isBuhid>$/ ), q{Don't match inverted } ); ok(!( "\x[C682]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C682]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C682]" ~~ m/^<-isBuhid>$/, q{Match unrelated inverted } ); ok("\x[C682]\c[BUHID LETTER A]" ~~ m//, q{Match unanchored } ); # CanadianAboriginal ok("\c[CANADIAN SYLLABICS E]" ~~ m/^$/, q{Match } ); ok(!( "\c[CANADIAN SYLLABICS E]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CANADIAN SYLLABICS E]" ~~ m/^<-isCanadianAboriginal>$/ ), q{Don't match inverted } ); ok(!( "\x[888B]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[888B]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[888B]" ~~ m/^<-isCanadianAboriginal>$/, q{Match unrelated inverted } ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[9FA6]" ~~ m/^.$/, q{Match related negated } ); ok("\x[9FA6]" ~~ m/^<-isCanadianAboriginal>$/, q{Match related inverted } ); ok("\x[888B]\x[9FA6]\c[CANADIAN SYLLABICS E]" ~~ m//, q{Match unanchored } ); # Cherokee ok("\c[CHEROKEE LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[CHEROKEE LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CHEROKEE LETTER A]" ~~ m/^<-isCherokee>$/ ), q{Don't match inverted } ); ok(!( "\x[8260]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8260]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8260]" ~~ m/^<-isCherokee>$/, q{Match unrelated inverted } ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[9FA6]" ~~ m/^.$/, q{Match related negated } ); ok("\x[9FA6]" ~~ m/^<-isCherokee>$/, q{Match related inverted } ); ok("\x[8260]\x[9FA6]\c[CHEROKEE LETTER A]" ~~ m//, q{Match unanchored } ); # Cyrillic ok("\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m/^$/, q{Match } ); ok(!( "\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m/^<-isCyrillic>$/ ), q{Don't match inverted } ); ok(!( "\x[B7DF]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B7DF]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B7DF]" ~~ m/^<-isCyrillic>$/, q{Match unrelated inverted } ); ok(!( "\x[D7A4]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[D7A4]" ~~ m/^.$/, q{Match related negated } ); ok("\x[D7A4]" ~~ m/^<-isCyrillic>$/, q{Match related inverted } ); ok("\x[B7DF]\x[D7A4]\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m//, q{Match unanchored } ); # Deseret ok(!( "\x[A8A0]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[A8A0]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[A8A0]" ~~ m/^<-isDeseret>$/, q{Match unrelated inverted } ); # Devanagari ok("\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m/^$/, q{Match } ); ok(!( "\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m/^<-isDevanagari>$/ ), q{Don't match inverted } ); ok(!( "\x[D291]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D291]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D291]" ~~ m/^<-isDevanagari>$/, q{Match unrelated inverted } ); ok("\x[D291]\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m//, q{Match unanchored } ); # Ethiopic ok("\c[ETHIOPIC SYLLABLE HA]" ~~ m/^$/, q{Match } ); ok(!( "\c[ETHIOPIC SYLLABLE HA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ETHIOPIC SYLLABLE HA]" ~~ m/^<-isEthiopic>$/ ), q{Don't match inverted } ); ok(!( "\x[A9FA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[A9FA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[A9FA]" ~~ m/^<-isEthiopic>$/, q{Match unrelated inverted } ); ok("\x[A9FA]\c[ETHIOPIC SYLLABLE HA]" ~~ m//, q{Match unanchored } ); # Georgian ok("\c[GEORGIAN CAPITAL LETTER AN]" ~~ m/^$/, q{Match } ); ok(!( "\c[GEORGIAN CAPITAL LETTER AN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[GEORGIAN CAPITAL LETTER AN]" ~~ m/^<-isGeorgian>$/ ), q{Don't match inverted } ); ok(!( "\x[BBC9]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BBC9]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BBC9]" ~~ m/^<-isGeorgian>$/, q{Match unrelated inverted } ); ok("\x[BBC9]\c[GEORGIAN CAPITAL LETTER AN]" ~~ m//, q{Match unanchored } ); # Gothic ok(!( "\x[5888]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5888]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5888]" ~~ m/^<-isGothic>$/, q{Match unrelated inverted } ); # Greek ok("\c[GREEK LETTER SMALL CAPITAL GAMMA]" ~~ m/^$/, q{Match } ); ok(!( "\c[GREEK LETTER SMALL CAPITAL GAMMA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[GREEK LETTER SMALL CAPITAL GAMMA]" ~~ m/^<-isGreek>$/ ), q{Don't match inverted } ); ok(!( "\c[ETHIOPIC SYLLABLE KEE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[ETHIOPIC SYLLABLE KEE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[ETHIOPIC SYLLABLE KEE]" ~~ m/^<-isGreek>$/, q{Match unrelated inverted } ); ok("\c[ETHIOPIC SYLLABLE KEE]\c[GREEK LETTER SMALL CAPITAL GAMMA]" ~~ m//, q{Match unanchored } ); # Gujarati ok("\c[GUJARATI SIGN CANDRABINDU]" ~~ m/^$/, q{Match } ); ok(!( "\c[GUJARATI SIGN CANDRABINDU]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[GUJARATI SIGN CANDRABINDU]" ~~ m/^<-isGujarati>$/ ), q{Don't match inverted } ); ok(!( "\x[D108]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D108]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D108]" ~~ m/^<-isGujarati>$/, q{Match unrelated inverted } ); ok("\x[D108]\c[GUJARATI SIGN CANDRABINDU]" ~~ m//, q{Match unanchored } ); # Gurmukhi ok("\c[GURMUKHI SIGN BINDI]" ~~ m/^$/, q{Match } ); ok(!( "\c[GURMUKHI SIGN BINDI]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[GURMUKHI SIGN BINDI]" ~~ m/^<-isGurmukhi>$/ ), q{Don't match inverted } ); ok(!( "\x[5E05]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5E05]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5E05]" ~~ m/^<-isGurmukhi>$/, q{Match unrelated inverted } ); ok("\x[5E05]\c[GURMUKHI SIGN BINDI]" ~~ m//, q{Match unanchored } ); # Han ok("\c[CJK RADICAL REPEAT]" ~~ m/^$/, q{Match } ); ok(!( "\c[CJK RADICAL REPEAT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CJK RADICAL REPEAT]" ~~ m/^<-isHan>$/ ), q{Don't match inverted } ); ok(!( "\c[CANADIAN SYLLABICS KAA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[CANADIAN SYLLABICS KAA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[CANADIAN SYLLABICS KAA]" ~~ m/^<-isHan>$/, q{Match unrelated inverted } ); ok("\c[CANADIAN SYLLABICS KAA]\c[CJK RADICAL REPEAT]" ~~ m//, q{Match unanchored } ); # Hangul ok("\x[AC00]" ~~ m/^$/, q{Match } ); ok(!( "\x[AC00]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[AC00]" ~~ m/^<-isHangul>$/ ), q{Don't match inverted } ); ok(!( "\x[9583]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9583]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9583]" ~~ m/^<-isHangul>$/, q{Match unrelated inverted } ); ok("\x[9583]\x[AC00]" ~~ m//, q{Match unanchored } ); # Hanunoo ok("\c[HANUNOO LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[HANUNOO LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HANUNOO LETTER A]" ~~ m/^<-isHanunoo>$/ ), q{Don't match inverted } ); ok(!( "\x[7625]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7625]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7625]" ~~ m/^<-isHanunoo>$/, q{Match unrelated inverted } ); ok("\x[7625]\c[HANUNOO LETTER A]" ~~ m//, q{Match unanchored } ); # Hebrew ok("\c[HEBREW LETTER ALEF]" ~~ m/^$/, q{Match } ); ok(!( "\c[HEBREW LETTER ALEF]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HEBREW LETTER ALEF]" ~~ m/^<-isHebrew>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE SSIT]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE SSIT]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE SSIT]" ~~ m/^<-isHebrew>$/, q{Match unrelated inverted } ); ok("\c[YI SYLLABLE SSIT]\c[HEBREW LETTER ALEF]" ~~ m//, q{Match unanchored } ); # Hiragana ok("\c[HIRAGANA LETTER SMALL A]" ~~ m/^$/, q{Match } ); ok(!( "\c[HIRAGANA LETTER SMALL A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HIRAGANA LETTER SMALL A]" ~~ m/^<-isHiragana>$/ ), q{Don't match inverted } ); ok(!( "\c[CANADIAN SYLLABICS Y]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[CANADIAN SYLLABICS Y]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[CANADIAN SYLLABICS Y]" ~~ m/^<-isHiragana>$/, q{Match unrelated inverted } ); ok("\c[CANADIAN SYLLABICS Y]\c[HIRAGANA LETTER SMALL A]" ~~ m//, q{Match unanchored } ); # Inherited ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^$/, q{Match } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isInherited>$/ ), q{Don't match inverted } ); ok(!( "\x[75FA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[75FA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[75FA]" ~~ m/^<-isInherited>$/, q{Match unrelated inverted } ); ok("\x[75FA]\c[COMBINING GRAVE ACCENT]" ~~ m//, q{Match unanchored } ); # Kannada ok("\c[KANNADA SIGN ANUSVARA]" ~~ m/^$/, q{Match } ); ok(!( "\c[KANNADA SIGN ANUSVARA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KANNADA SIGN ANUSVARA]" ~~ m/^<-isKannada>$/ ), q{Don't match inverted } ); ok(!( "\x[C1DF]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C1DF]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C1DF]" ~~ m/^<-isKannada>$/, q{Match unrelated inverted } ); ok("\x[C1DF]\c[KANNADA SIGN ANUSVARA]" ~~ m//, q{Match unanchored } ); # Katakana ok("\c[KATAKANA LETTER SMALL A]" ~~ m/^$/, q{Match } ); ok(!( "\c[KATAKANA LETTER SMALL A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KATAKANA LETTER SMALL A]" ~~ m/^<-isKatakana>$/ ), q{Don't match inverted } ); ok(!( "\x[177A]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[177A]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[177A]" ~~ m/^<-isKatakana>$/, q{Match unrelated inverted } ); ok("\x[177A]\c[KATAKANA LETTER SMALL A]" ~~ m//, q{Match unanchored } ); # Khmer ok("\c[KHMER LETTER KA]" ~~ m/^$/, q{Match } ); ok(!( "\c[KHMER LETTER KA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KHMER LETTER KA]" ~~ m/^<-isKhmer>$/ ), q{Don't match inverted } ); ok(!( "\c[GEORGIAN LETTER QAR]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[GEORGIAN LETTER QAR]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[GEORGIAN LETTER QAR]" ~~ m/^<-isKhmer>$/, q{Match unrelated inverted } ); ok("\c[GEORGIAN LETTER QAR]\c[KHMER LETTER KA]" ~~ m//, q{Match unanchored } ); # Lao ok("\c[LAO LETTER KO]" ~~ m/^$/, q{Match } ); ok(!( "\c[LAO LETTER KO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LAO LETTER KO]" ~~ m/^<-isLao>$/ ), q{Don't match inverted } ); ok(!( "\x[3DA9]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3DA9]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3DA9]" ~~ m/^<-isLao>$/, q{Match unrelated inverted } ); ok(!( "\x[3DA9]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[3DA9]" ~~ m/^.$/, q{Match related negated } ); ok("\x[3DA9]" ~~ m/^<-isLao>$/, q{Match related inverted } ); ok("\x[3DA9]\x[3DA9]\c[LAO LETTER KO]" ~~ m//, q{Match unanchored } ); # Latin ok("\c[LATIN CAPITAL LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^<-isLatin>$/ ), q{Don't match inverted } ); ok(!( "\x[C549]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C549]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C549]" ~~ m/^<-isLatin>$/, q{Match unrelated inverted } ); ok(!( "\x[C549]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[C549]" ~~ m/^.$/, q{Match related negated } ); ok("\x[C549]" ~~ m/^<-isLatin>$/, q{Match related inverted } ); ok("\x[C549]\x[C549]\c[LATIN CAPITAL LETTER A]" ~~ m//, q{Match unanchored } ); # Malayalam ok("\c[MALAYALAM SIGN ANUSVARA]" ~~ m/^$/, q{Match } ); ok(!( "\c[MALAYALAM SIGN ANUSVARA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MALAYALAM SIGN ANUSVARA]" ~~ m/^<-isMalayalam>$/ ), q{Don't match inverted } ); ok(!( "\x[625C]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[625C]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[625C]" ~~ m/^<-isMalayalam>$/, q{Match unrelated inverted } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMalayalam>$/, q{Match related inverted } ); ok("\x[625C]\c[COMBINING GRAVE ACCENT]\c[MALAYALAM SIGN ANUSVARA]" ~~ m//, q{Match unanchored } ); # Mongolian ok("\c[MONGOLIAN DIGIT ZERO]" ~~ m/^$/, q{Match } ); ok(!( "\c[MONGOLIAN DIGIT ZERO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MONGOLIAN DIGIT ZERO]" ~~ m/^<-isMongolian>$/ ), q{Don't match inverted } ); ok(!( "\x[5F93]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5F93]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5F93]" ~~ m/^<-isMongolian>$/, q{Match unrelated inverted } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMongolian>$/, q{Match related inverted } ); ok("\x[5F93]\c[COMBINING GRAVE ACCENT]\c[MONGOLIAN DIGIT ZERO]" ~~ m//, q{Match unanchored } ); # Myanmar ok("\c[MYANMAR LETTER KA]" ~~ m/^$/, q{Match } ); ok(!( "\c[MYANMAR LETTER KA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MYANMAR LETTER KA]" ~~ m/^<-isMyanmar>$/ ), q{Don't match inverted } ); ok(!( "\x[649A]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[649A]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[649A]" ~~ m/^<-isMyanmar>$/, q{Match unrelated inverted } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMyanmar>$/, q{Match related inverted } ); ok("\x[649A]\c[COMBINING GRAVE ACCENT]\c[MYANMAR LETTER KA]" ~~ m//, q{Match unanchored } ); # Ogham ok("\c[OGHAM LETTER BEITH]" ~~ m/^$/, q{Match } ); ok(!( "\c[OGHAM LETTER BEITH]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[OGHAM LETTER BEITH]" ~~ m/^<-isOgham>$/ ), q{Don't match inverted } ); ok(!( "\c[KATAKANA LETTER KA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[KATAKANA LETTER KA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[KATAKANA LETTER KA]" ~~ m/^<-isOgham>$/, q{Match unrelated inverted } ); ok("\c[KATAKANA LETTER KA]\c[OGHAM LETTER BEITH]" ~~ m//, q{Match unanchored } ); # OldItalic ok(!( "\x[8BB7]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8BB7]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8BB7]" ~~ m/^<-isOldItalic>$/, q{Match unrelated inverted } ); # Oriya ok("\c[ORIYA SIGN CANDRABINDU]" ~~ m/^$/, q{Match } ); ok(!( "\c[ORIYA SIGN CANDRABINDU]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ORIYA SIGN CANDRABINDU]" ~~ m/^<-isOriya>$/ ), q{Don't match inverted } ); ok(!( "\x[4292]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[4292]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[4292]" ~~ m/^<-isOriya>$/, q{Match unrelated inverted } ); ok("\x[4292]\c[ORIYA SIGN CANDRABINDU]" ~~ m//, q{Match unanchored } ); # Runic ok("\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m/^$/, q{Match } ); ok(!( "\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m/^<-isRunic>$/ ), q{Don't match inverted } ); ok(!( "\x[9857]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9857]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9857]" ~~ m/^<-isRunic>$/, q{Match unrelated inverted } ); ok("\x[9857]\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m//, q{Match unanchored } ); # Sinhala ok("\c[SINHALA SIGN ANUSVARAYA]" ~~ m/^$/, q{Match } ); ok(!( "\c[SINHALA SIGN ANUSVARAYA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SINHALA SIGN ANUSVARAYA]" ~~ m/^<-isSinhala>$/ ), q{Don't match inverted } ); ok(!( "\x[5DF5]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5DF5]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5DF5]" ~~ m/^<-isSinhala>$/, q{Match unrelated inverted } ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[YI RADICAL QOT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[YI RADICAL QOT]" ~~ m/^<-isSinhala>$/, q{Match related inverted } ); ok("\x[5DF5]\c[YI RADICAL QOT]\c[SINHALA SIGN ANUSVARAYA]" ~~ m//, q{Match unanchored } ); # Syriac ok("\c[SYRIAC LETTER ALAPH]" ~~ m/^$/, q{Match } ); ok(!( "\c[SYRIAC LETTER ALAPH]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SYRIAC LETTER ALAPH]" ~~ m/^<-isSyriac>$/ ), q{Don't match inverted } ); ok(!( "\x[57F0]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[57F0]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[57F0]" ~~ m/^<-isSyriac>$/, q{Match unrelated inverted } ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[YI RADICAL QOT]" ~~ m/^.$/, q{Match related negated } ); ok("\c[YI RADICAL QOT]" ~~ m/^<-isSyriac>$/, q{Match related inverted } ); ok("\x[57F0]\c[YI RADICAL QOT]\c[SYRIAC LETTER ALAPH]" ~~ m//, q{Match unanchored } ); # Tagalog ok("\c[TAGALOG LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[TAGALOG LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TAGALOG LETTER A]" ~~ m/^<-isTagalog>$/ ), q{Don't match inverted } ); ok(!( "\x[3DE8]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3DE8]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3DE8]" ~~ m/^<-isTagalog>$/, q{Match unrelated inverted } ); ok("\x[3DE8]\c[TAGALOG LETTER A]" ~~ m//, q{Match unanchored } ); # Tagbanwa ok("\c[TAGBANWA LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[TAGBANWA LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TAGBANWA LETTER A]" ~~ m/^<-isTagbanwa>$/ ), q{Don't match inverted } ); ok(!( "\c[CHEROKEE LETTER TLV]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[CHEROKEE LETTER TLV]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[CHEROKEE LETTER TLV]" ~~ m/^<-isTagbanwa>$/, q{Match unrelated inverted } ); ok("\c[CHEROKEE LETTER TLV]\c[TAGBANWA LETTER A]" ~~ m//, q{Match unanchored } ); # Tamil ok("\c[TAMIL SIGN ANUSVARA]" ~~ m/^$/, q{Match } ); ok(!( "\c[TAMIL SIGN ANUSVARA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TAMIL SIGN ANUSVARA]" ~~ m/^<-isTamil>$/ ), q{Don't match inverted } ); ok(!( "\x[8DF2]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8DF2]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8DF2]" ~~ m/^<-isTamil>$/, q{Match unrelated inverted } ); ok("\x[8DF2]\c[TAMIL SIGN ANUSVARA]" ~~ m//, q{Match unanchored } ); # Telugu ok("\c[TELUGU SIGN CANDRABINDU]" ~~ m/^$/, q{Match } ); ok(!( "\c[TELUGU SIGN CANDRABINDU]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TELUGU SIGN CANDRABINDU]" ~~ m/^<-isTelugu>$/ ), q{Don't match inverted } ); ok(!( "\x[8088]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8088]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8088]" ~~ m/^<-isTelugu>$/, q{Match unrelated inverted } ); ok("\x[8088]\c[TELUGU SIGN CANDRABINDU]" ~~ m//, q{Match unanchored } ); # Thaana ok("\c[THAANA LETTER HAA]" ~~ m/^$/, q{Match } ); ok(!( "\c[THAANA LETTER HAA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[THAANA LETTER HAA]" ~~ m/^<-isThaana>$/ ), q{Don't match inverted } ); ok(!( "\x[5240]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5240]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5240]" ~~ m/^<-isThaana>$/, q{Match unrelated inverted } ); ok("\x[5240]\c[THAANA LETTER HAA]" ~~ m//, q{Match unanchored } ); # Thai ok("\c[THAI CHARACTER KO KAI]" ~~ m/^$/, q{Match } ); ok(!( "\c[THAI CHARACTER KO KAI]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[THAI CHARACTER KO KAI]" ~~ m/^<-isThai>$/ ), q{Don't match inverted } ); ok(!( "\x[CAD3]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[CAD3]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[CAD3]" ~~ m/^<-isThai>$/, q{Match unrelated inverted } ); ok("\x[CAD3]\c[THAI CHARACTER KO KAI]" ~~ m//, q{Match unanchored } ); # Tibetan ok("\c[TIBETAN SYLLABLE OM]" ~~ m/^$/, q{Match } ); ok(!( "\c[TIBETAN SYLLABLE OM]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TIBETAN SYLLABLE OM]" ~~ m/^<-isTibetan>$/ ), q{Don't match inverted } ); ok(!( "\x[8557]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8557]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8557]" ~~ m/^<-isTibetan>$/, q{Match unrelated inverted } ); ok("\x[8557]\c[TIBETAN SYLLABLE OM]" ~~ m//, q{Match unanchored } ); # Yi ok("\c[YI SYLLABLE IT]" ~~ m/^$/, q{Match } ); ok(!( "\c[YI SYLLABLE IT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[YI SYLLABLE IT]" ~~ m/^<-isYi>$/ ), q{Don't match inverted } ); ok(!( "\x[BCD0]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BCD0]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BCD0]" ~~ m/^<-isYi>$/, q{Match unrelated inverted } ); ok("\x[BCD0]\c[YI SYLLABLE IT]" ~~ m//, q{Match unanchored } ); # ASCIIHexDigit ok("\c[DIGIT ZERO]" ~~ m/^$/, q{Match } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^<-isASCIIHexDigit>$/ ), q{Don't match inverted } ); ok(!( "\x[53BA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[53BA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[53BA]" ~~ m/^<-isASCIIHexDigit>$/, q{Match unrelated inverted } ); ok("\x[53BA]\c[DIGIT ZERO]" ~~ m//, q{Match unanchored } ); # Dash ok("\c[HYPHEN-MINUS]" ~~ m/^$/, q{Match } ); ok(!( "\c[HYPHEN-MINUS]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HYPHEN-MINUS]" ~~ m/^<-isDash>$/ ), q{Don't match inverted } ); ok(!( "\x[53F7]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[53F7]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[53F7]" ~~ m/^<-isDash>$/, q{Match unrelated inverted } ); ok("\x[53F7]\c[HYPHEN-MINUS]" ~~ m//, q{Match unanchored } ); # Diacritic ok("\c[MODIFIER LETTER CAPITAL A]" ~~ m/^$/, q{Match } ); ok(!( "\c[MODIFIER LETTER CAPITAL A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MODIFIER LETTER CAPITAL A]" ~~ m/^<-isDiacritic>$/ ), q{Don't match inverted } ); ok(!( "\x[1BCD]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[1BCD]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[1BCD]" ~~ m/^<-isDiacritic>$/, q{Match unrelated inverted } ); ok("\x[1BCD]\c[MODIFIER LETTER CAPITAL A]" ~~ m//, q{Match unanchored } ); # Extender ok("\c[MIDDLE DOT]" ~~ m/^$/, q{Match } ); ok(!( "\c[MIDDLE DOT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MIDDLE DOT]" ~~ m/^<-isExtender>$/ ), q{Don't match inverted } ); ok(!( "\x[3A18]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3A18]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3A18]" ~~ m/^<-isExtender>$/, q{Match unrelated inverted } ); ok("\x[3A18]\c[MIDDLE DOT]" ~~ m//, q{Match unanchored } ); # GraphemeLink ok("\c[COMBINING GRAPHEME JOINER]" ~~ m/^$/, q{Match } ); ok(!( "\c[COMBINING GRAPHEME JOINER]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[COMBINING GRAPHEME JOINER]" ~~ m/^<-isGraphemeLink>$/ ), q{Don't match inverted } ); ok(!( "\x[4989]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[4989]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[4989]" ~~ m/^<-isGraphemeLink>$/, q{Match unrelated inverted } ); ok("\x[4989]\c[COMBINING GRAPHEME JOINER]" ~~ m//, q{Match unanchored } ); # HexDigit ok("\c[DIGIT ZERO]" ~~ m/^$/, q{Match } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DIGIT ZERO]" ~~ m/^<-isHexDigit>$/ ), q{Don't match inverted } ); ok(!( "\x[6292]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[6292]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[6292]" ~~ m/^<-isHexDigit>$/, q{Match unrelated inverted } ); ok("\x[6292]\c[DIGIT ZERO]" ~~ m//, q{Match unanchored } ); # Hyphen ok("\c[KATAKANA MIDDLE DOT]" ~~ m/^$/, q{Match } ); ok(!( "\c[KATAKANA MIDDLE DOT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KATAKANA MIDDLE DOT]" ~~ m/^<-isHyphen>$/ ), q{Don't match inverted } ); ok(!( "\c[BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE]" ~~ m/^<-isHyphen>$/, q{Match unrelated inverted } ); ok("\c[BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE]\c[KATAKANA MIDDLE DOT]" ~~ m//, q{Match unanchored } ); # Ideographic ok("\x[8AB0]" ~~ m/^$/, q{Match } ); ok(!( "\x[8AB0]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[8AB0]" ~~ m/^<-isIdeographic>$/ ), q{Don't match inverted } ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9FA6]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9FA6]" ~~ m/^<-isIdeographic>$/, q{Match unrelated inverted } ); ok("\x[9FA6]\x[8AB0]" ~~ m//, q{Match unanchored } ); # IDSBinaryOperator ok("\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m/^$/, q{Match } ); ok(!( "\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m/^<-isIDSBinaryOperator>$/ ), q{Don't match inverted } ); ok(!( "\x[59E9]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[59E9]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[59E9]" ~~ m/^<-isIDSBinaryOperator>$/, q{Match unrelated inverted } ); ok("\x[59E9]\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m//, q{Match unanchored } ); # IDSTrinaryOperator ok("\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT]" ~~ m/^$/, q{Match } ); ok(!( "\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT]" ~~ m/^<-isIDSTrinaryOperator>$/ ), q{Don't match inverted } ); ok(!( "\x[9224]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9224]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9224]" ~~ m/^<-isIDSTrinaryOperator>$/, q{Match unrelated inverted } ); ok("\x[9224]\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT]" ~~ m//, q{Match unanchored } ); # JoinControl ok("\c[ZERO WIDTH NON-JOINER]" ~~ m/^$/, q{Match } ); ok(!( "\c[ZERO WIDTH NON-JOINER]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ZERO WIDTH NON-JOINER]" ~~ m/^<-isJoinControl>$/ ), q{Don't match inverted } ); ok(!( "\c[BENGALI LETTER DDHA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[BENGALI LETTER DDHA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[BENGALI LETTER DDHA]" ~~ m/^<-isJoinControl>$/, q{Match unrelated inverted } ); ok("\c[BENGALI LETTER DDHA]\c[ZERO WIDTH NON-JOINER]" ~~ m//, q{Match unanchored } ); # LogicalOrderException ok("\c[THAI CHARACTER SARA E]" ~~ m/^$/, q{Match } ); ok(!( "\c[THAI CHARACTER SARA E]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[THAI CHARACTER SARA E]" ~~ m/^<-isLogicalOrderException>$/ ), q{Don't match inverted } ); ok(!( "\x[857B]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[857B]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[857B]" ~~ m/^<-isLogicalOrderException>$/, q{Match unrelated inverted } ); ok(!( "\x[857B]" ~~ m/^$/ ), q{Don't match related } ); ok("\x[857B]" ~~ m/^.$/, q{Match related negated } ); ok("\x[857B]" ~~ m/^<-isLogicalOrderException>$/, q{Match related inverted } ); ok("\x[857B]\x[857B]\c[THAI CHARACTER SARA E]" ~~ m//, q{Match unanchored } ); # NoncharacterCodePoint ok(!( "\c[LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE]" ~~ m/^<-isNoncharacterCodePoint>$/, q{Match unrelated inverted } ); ok(!( "\c[ARABIC-INDIC DIGIT ZERO]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[ARABIC-INDIC DIGIT ZERO]" ~~ m/^.$/, q{Match related negated } ); ok("\c[ARABIC-INDIC DIGIT ZERO]" ~~ m/^<-isNoncharacterCodePoint>$/, q{Match related inverted } ); # OtherAlphabetic ok("\c[COMBINING GREEK YPOGEGRAMMENI]" ~~ m/^$/, q{Match } ); ok(!( "\c[COMBINING GREEK YPOGEGRAMMENI]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[COMBINING GREEK YPOGEGRAMMENI]" ~~ m/^<-isOtherAlphabetic>$/ ), q{Don't match inverted } ); ok(!( "\x[413C]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[413C]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[413C]" ~~ m/^<-isOtherAlphabetic>$/, q{Match unrelated inverted } ); ok("\x[413C]\c[COMBINING GREEK YPOGEGRAMMENI]" ~~ m//, q{Match unanchored } ); # OtherDefaultIgnorableCodePoint ok("\c[HANGUL FILLER]" ~~ m/^$/, q{Match } ); ok(!( "\c[HANGUL FILLER]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HANGUL FILLER]" ~~ m/^<-isOtherDefaultIgnorableCodePoint>$/ ), q{Don't match inverted } ); ok(!( "\c[VERTICAL BAR DOUBLE LEFT TURNSTILE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[VERTICAL BAR DOUBLE LEFT TURNSTILE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[VERTICAL BAR DOUBLE LEFT TURNSTILE]" ~~ m/^<-isOtherDefaultIgnorableCodePoint>$/, q{Match unrelated inverted } ); ok("\c[VERTICAL BAR DOUBLE LEFT TURNSTILE]\c[HANGUL FILLER]" ~~ m//, q{Match unanchored } ); # OtherGraphemeExtend ok("\c[BENGALI VOWEL SIGN AA]" ~~ m/^$/, q{Match } ); ok(!( "\c[BENGALI VOWEL SIGN AA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BENGALI VOWEL SIGN AA]" ~~ m/^<-isOtherGraphemeExtend>$/ ), q{Don't match inverted } ); ok(!( "\c[APL FUNCTIONAL SYMBOL EPSILON UNDERBAR]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[APL FUNCTIONAL SYMBOL EPSILON UNDERBAR]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[APL FUNCTIONAL SYMBOL EPSILON UNDERBAR]" ~~ m/^<-isOtherGraphemeExtend>$/, q{Match unrelated inverted } ); ok("\c[APL FUNCTIONAL SYMBOL EPSILON UNDERBAR]\c[BENGALI VOWEL SIGN AA]" ~~ m//, q{Match unanchored } ); # OtherLowercase ok("\c[MODIFIER LETTER SMALL H]" ~~ m/^$/, q{Match } ); ok(!( "\c[MODIFIER LETTER SMALL H]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MODIFIER LETTER SMALL H]" ~~ m/^<-isOtherLowercase>$/ ), q{Don't match inverted } ); ok(!( "\c[HANGUL LETTER NIEUN-CIEUC]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[HANGUL LETTER NIEUN-CIEUC]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[HANGUL LETTER NIEUN-CIEUC]" ~~ m/^<-isOtherLowercase>$/, q{Match unrelated inverted } ); ok("\c[HANGUL LETTER NIEUN-CIEUC]\c[MODIFIER LETTER SMALL H]" ~~ m//, q{Match unanchored } ); # OtherMath ok("\c[LEFT PARENTHESIS]" ~~ m/^$/, q{Match } ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^<-isOtherMath>$/ ), q{Don't match inverted } ); ok(!( "\x[B43A]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B43A]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B43A]" ~~ m/^<-isOtherMath>$/, q{Match unrelated inverted } ); ok("\x[B43A]\c[LEFT PARENTHESIS]" ~~ m//, q{Match unanchored } ); # OtherUppercase ok("\c[ROMAN NUMERAL ONE]" ~~ m/^$/, q{Match } ); ok(!( "\c[ROMAN NUMERAL ONE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ROMAN NUMERAL ONE]" ~~ m/^<-isOtherUppercase>$/ ), q{Don't match inverted } ); ok(!( "\x[D246]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D246]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D246]" ~~ m/^<-isOtherUppercase>$/, q{Match unrelated inverted } ); ok("\x[D246]\c[ROMAN NUMERAL ONE]" ~~ m//, q{Match unanchored } ); # QuotationMark ok("\c[QUOTATION MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[QUOTATION MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[QUOTATION MARK]" ~~ m/^<-isQuotationMark>$/ ), q{Don't match inverted } ); ok(!( "\x[C890]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C890]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C890]" ~~ m/^<-isQuotationMark>$/, q{Match unrelated inverted } ); ok("\x[C890]\c[QUOTATION MARK]" ~~ m//, q{Match unanchored } ); # Radical ok("\c[CJK RADICAL REPEAT]" ~~ m/^$/, q{Match } ); ok(!( "\c[CJK RADICAL REPEAT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CJK RADICAL REPEAT]" ~~ m/^<-isRadical>$/ ), q{Don't match inverted } ); ok(!( "\c[HANGUL JONGSEONG CHIEUCH]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[HANGUL JONGSEONG CHIEUCH]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[HANGUL JONGSEONG CHIEUCH]" ~~ m/^<-isRadical>$/, q{Match unrelated inverted } ); ok("\c[HANGUL JONGSEONG CHIEUCH]\c[CJK RADICAL REPEAT]" ~~ m//, q{Match unanchored } ); # SoftDotted ok("\c[LATIN SMALL LETTER I]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN SMALL LETTER I]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN SMALL LETTER I]" ~~ m/^<-isSoftDotted>$/ ), q{Don't match inverted } ); ok(!( "\x[ADEF]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[ADEF]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[ADEF]" ~~ m/^<-isSoftDotted>$/, q{Match unrelated inverted } ); ok(!( "\c[DOLLAR SIGN]" ~~ m/^$/ ), q{Don't match related } ); ok("\c[DOLLAR SIGN]" ~~ m/^.$/, q{Match related negated } ); ok("\c[DOLLAR SIGN]" ~~ m/^<-isSoftDotted>$/, q{Match related inverted } ); ok("\x[ADEF]\c[DOLLAR SIGN]\c[LATIN SMALL LETTER I]" ~~ m//, q{Match unanchored } ); # TerminalPunctuation ok("\c[EXCLAMATION MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[EXCLAMATION MARK]" ~~ m/^<-isTerminalPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[3C9D]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3C9D]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3C9D]" ~~ m/^<-isTerminalPunctuation>$/, q{Match unrelated inverted } ); ok("\x[3C9D]\c[EXCLAMATION MARK]" ~~ m//, q{Match unanchored } ); # UnifiedIdeograph ok("\x[7896]" ~~ m/^$/, q{Match } ); ok(!( "\x[7896]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[7896]" ~~ m/^<-isUnifiedIdeograph>$/ ), q{Don't match inverted } ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9FA6]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9FA6]" ~~ m/^<-isUnifiedIdeograph>$/, q{Match unrelated inverted } ); ok("\x[9FA6]\x[7896]" ~~ m//, q{Match unanchored } ); # WhiteSpace ok("\c[CHARACTER TABULATION]" ~~ m/^$/, q{Match } ); ok(!( "\c[CHARACTER TABULATION]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CHARACTER TABULATION]" ~~ m/^<-isWhiteSpace>$/ ), q{Don't match inverted } ); ok(!( "\x[6358]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[6358]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[6358]" ~~ m/^<-isWhiteSpace>$/, q{Match unrelated inverted } ); ok("\x[6358]\c[CHARACTER TABULATION]" ~~ m//, q{Match unanchored } ); # Alphabetic # Lu + Ll + Lt + Lm + Lo + OtherAlphabetic ok("\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m/^$/, q{Match (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok(!( "\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m/^.$/ ), q{Don't match negated (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok(!( "\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m/^<-isAlphabetic>$/ ), q{Don't match inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok(!( "\x[0855]" ~~ m/^$/ ), q{Don't match unrelated (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok("\x[0855]" ~~ m/^.$/, q{Match unrelated negated (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok("\x[0855]" ~~ m/^<-isAlphabetic>$/, q{Match unrelated inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok("\x[0855]\c[DEVANAGARI SIGN CANDRABINDU]" ~~ m//, q{Match unanchored (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); # Lowercase # Ll + OtherLowercase ok("\c[LATIN SMALL LETTER A]" ~~ m/^$/, q{Match (Ll + OtherLowercase)} ); ok(!( "\c[LATIN SMALL LETTER A]" ~~ m/^.$/ ), q{Don't match negated (Ll + OtherLowercase)} ); ok(!( "\c[LATIN SMALL LETTER A]" ~~ m/^<-isLowercase>$/ ), q{Don't match inverted (Ll + OtherLowercase)} ); ok(!( "\x[6220]" ~~ m/^$/ ), q{Don't match unrelated (Ll + OtherLowercase)} ); ok("\x[6220]" ~~ m/^.$/, q{Match unrelated negated (Ll + OtherLowercase)} ); ok("\x[6220]" ~~ m/^<-isLowercase>$/, q{Match unrelated inverted (Ll + OtherLowercase)} ); ok(!( "\x[6220]" ~~ m/^$/ ), q{Don't match related (Ll + OtherLowercase)} ); ok("\x[6220]" ~~ m/^.$/, q{Match related negated (Ll + OtherLowercase)} ); ok("\x[6220]" ~~ m/^<-isLowercase>$/, q{Match related inverted (Ll + OtherLowercase)} ); ok("\x[6220]\x[6220]\c[LATIN SMALL LETTER A]" ~~ m//, q{Match unanchored (Ll + OtherLowercase)} ); # Uppercase # Lu + OtherUppercase ok("\c[LATIN CAPITAL LETTER A]" ~~ m/^$/, q{Match (Lu + OtherUppercase)} ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^.$/ ), q{Don't match negated (Lu + OtherUppercase)} ); ok(!( "\c[LATIN CAPITAL LETTER A]" ~~ m/^<-isUppercase>$/ ), q{Don't match inverted (Lu + OtherUppercase)} ); ok(!( "\x[C080]" ~~ m/^$/ ), q{Don't match unrelated (Lu + OtherUppercase)} ); ok("\x[C080]" ~~ m/^.$/, q{Match unrelated negated (Lu + OtherUppercase)} ); ok("\x[C080]" ~~ m/^<-isUppercase>$/, q{Match unrelated inverted (Lu + OtherUppercase)} ); ok("\x[C080]\c[LATIN CAPITAL LETTER A]" ~~ m//, q{Match unanchored (Lu + OtherUppercase)} ); # Math # Sm + OtherMath ok("\c[LEFT PARENTHESIS]" ~~ m/^$/, q{Match (Sm + OtherMath)} ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^.$/ ), q{Don't match negated (Sm + OtherMath)} ); ok(!( "\c[LEFT PARENTHESIS]" ~~ m/^<-isMath>$/ ), q{Don't match inverted (Sm + OtherMath)} ); ok(!( "\x[D4D2]" ~~ m/^$/ ), q{Don't match unrelated (Sm + OtherMath)} ); ok("\x[D4D2]" ~~ m/^.$/, q{Match unrelated negated (Sm + OtherMath)} ); ok("\x[D4D2]" ~~ m/^<-isMath>$/, q{Match unrelated inverted (Sm + OtherMath)} ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^$/ ), q{Don't match related (Sm + OtherMath)} ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/, q{Match related negated (Sm + OtherMath)} ); ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isMath>$/, q{Match related inverted (Sm + OtherMath)} ); ok("\x[D4D2]\c[COMBINING GRAVE ACCENT]\c[LEFT PARENTHESIS]" ~~ m//, q{Match unanchored (Sm + OtherMath)} ); # ID_Start # Lu + Ll + Lt + Lm + Lo + Nl ok("\x[C276]" ~~ m/^$/, q{Match (Lu + Ll + Lt + Lm + Lo + Nl)} ); ok(!( "\x[C276]" ~~ m/^.$/ ), q{Don't match negated (Lu + Ll + Lt + Lm + Lo + Nl)} ); ok(!( "\x[C276]" ~~ m/^<-isID_Start>$/ ), q{Don't match inverted (Lu + Ll + Lt + Lm + Lo + Nl)} ); ok(!( "\x[D7A4]" ~~ m/^$/ ), q{Don't match unrelated (Lu + Ll + Lt + Lm + Lo + Nl)} ); ok("\x[D7A4]" ~~ m/^.$/, q{Match unrelated negated (Lu + Ll + Lt + Lm + Lo + Nl)} ); ok("\x[D7A4]" ~~ m/^<-isID_Start>$/, q{Match unrelated inverted (Lu + Ll + Lt + Lm + Lo + Nl)} ); ok("\x[D7A4]\x[C276]" ~~ m//, q{Match unanchored (Lu + Ll + Lt + Lm + Lo + Nl)} ); # ID_Continue # ID_Start + Mn + Mc + Nd + Pc ok("\x[949B]" ~~ m/^$/, q{Match (ID_Start + Mn + Mc + Nd + Pc)} ); ok(!( "\x[949B]" ~~ m/^.$/ ), q{Don't match negated (ID_Start + Mn + Mc + Nd + Pc)} ); ok(!( "\x[949B]" ~~ m/^<-isID_Continue>$/ ), q{Don't match inverted (ID_Start + Mn + Mc + Nd + Pc)} ); ok(!( "\x[9FA6]" ~~ m/^$/ ), q{Don't match unrelated (ID_Start + Mn + Mc + Nd + Pc)} ); ok("\x[9FA6]" ~~ m/^.$/, q{Match unrelated negated (ID_Start + Mn + Mc + Nd + Pc)} ); ok("\x[9FA6]" ~~ m/^<-isID_Continue>$/, q{Match unrelated inverted (ID_Start + Mn + Mc + Nd + Pc)} ); ok("\x[9FA6]\x[949B]" ~~ m//, q{Match unanchored (ID_Start + Mn + Mc + Nd + Pc)} ); # Any # Any character ok("\x[C709]" ~~ m/^$/, q{Match (Any character)} ); ok(!( "\x[C709]" ~~ m/^.$/ ), q{Don't match negated (Any character)} ); ok(!( "\x[C709]" ~~ m/^<-isAny>$/ ), q{Don't match inverted (Any character)} ); ok("\x[C709]" ~~ m//, q{Match unanchored (Any character)} ); # Assigned # Any non-Cn character (i.e. synonym for \P{Cn}) ok("\x[C99D]" ~~ m/^$/, q{Match (Any non-Cn character (i.e. synonym for \P{Cn}))} ); ok(!( "\x[C99D]" ~~ m/^.$/ ), q{Don't match negated (Any non-Cn character (i.e. synonym for \P{Cn}))} ); ok(!( "\x[C99D]" ~~ m/^<-isAssigned>$/ ), q{Don't match inverted (Any non-Cn character (i.e. synonym for \P{Cn}))} ); ok(!( "\x[D7A4]" ~~ m/^$/ ), q{Don't match unrelated (Any non-Cn character (i.e. synonym for \P{Cn}))} ); ok("\x[D7A4]" ~~ m/^.$/, q{Match unrelated negated (Any non-Cn character (i.e. synonym for \P{Cn}))} ); ok("\x[D7A4]" ~~ m/^<-isAssigned>$/, q{Match unrelated inverted (Any non-Cn character (i.e. synonym for \P{Cn}))} ); ok("\x[D7A4]\x[C99D]" ~~ m//, q{Match unanchored (Any non-Cn character (i.e. synonym for \P{Cn}))} ); # Unassigned # Synonym for \p{Cn} ok("\x[27EC]" ~~ m/^$/, q{Match (Synonym for \p{Cn})} ); ok(!( "\x[27EC]" ~~ m/^.$/ ), q{Don't match negated (Synonym for \p{Cn})} ); ok(!( "\x[27EC]" ~~ m/^<-isUnassigned>$/ ), q{Don't match inverted (Synonym for \p{Cn})} ); ok(!( "\c[RIGHT OUTER JOIN]" ~~ m/^$/ ), q{Don't match unrelated (Synonym for \p{Cn})} ); ok("\c[RIGHT OUTER JOIN]" ~~ m/^.$/, q{Match unrelated negated (Synonym for \p{Cn})} ); ok("\c[RIGHT OUTER JOIN]" ~~ m/^<-isUnassigned>$/, q{Match unrelated inverted (Synonym for \p{Cn})} ); ok("\c[RIGHT OUTER JOIN]\x[27EC]" ~~ m//, q{Match unanchored (Synonym for \p{Cn})} ); # Common # Codepoint not explicitly assigned to a script ok("\x[0C7E]" ~~ m/^$/, q{Match (Codepoint not explicitly assigned to a script)} ); ok(!( "\x[0C7E]" ~~ m/^.$/ ), q{Don't match negated (Codepoint not explicitly assigned to a script)} ); ok(!( "\x[0C7E]" ~~ m/^<-isCommon>$/ ), q{Don't match inverted (Codepoint not explicitly assigned to a script)} ); ok(!( "\c[KANNADA SIGN ANUSVARA]" ~~ m/^$/ ), q{Don't match unrelated (Codepoint not explicitly assigned to a script)} ); ok("\c[KANNADA SIGN ANUSVARA]" ~~ m/^.$/, q{Match unrelated negated (Codepoint not explicitly assigned to a script)} ); ok("\c[KANNADA SIGN ANUSVARA]" ~~ m/^<-isCommon>$/, q{Match unrelated inverted (Codepoint not explicitly assigned to a script)} ); ok(!( "\c[KHMER VOWEL INHERENT AQ]" ~~ m/^$/ ), q{Don't match related (Codepoint not explicitly assigned to a script)} ); ok("\c[KHMER VOWEL INHERENT AQ]" ~~ m/^.$/, q{Match related negated (Codepoint not explicitly assigned to a script)} ); ok("\c[KHMER VOWEL INHERENT AQ]" ~~ m/^<-isCommon>$/, q{Match related inverted (Codepoint not explicitly assigned to a script)} ); ok("\c[KANNADA SIGN ANUSVARA]\c[KHMER VOWEL INHERENT AQ]\x[0C7E]" ~~ m//, q{Match unanchored (Codepoint not explicitly assigned to a script)} ); # InAlphabeticPresentationForms ok(!( "\x[531A]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[531A]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[531A]" ~~ m/^<-isInAlphabeticPresentationForms>$/, q{Match unrelated inverted } ); # InArabic ok("\c[ARABIC NUMBER SIGN]" ~~ m/^$/, q{Match } ); ok(!( "\c[ARABIC NUMBER SIGN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ARABIC NUMBER SIGN]" ~~ m/^<-isInArabic>$/ ), q{Don't match inverted } ); ok(!( "\x[7315]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7315]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7315]" ~~ m/^<-isInArabic>$/, q{Match unrelated inverted } ); ok("\x[7315]\c[ARABIC NUMBER SIGN]" ~~ m//, q{Match unanchored } ); # InArabicPresentationFormsA ok(!( "\x[8340]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8340]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8340]" ~~ m/^<-isInArabicPresentationFormsA>$/, q{Match unrelated inverted } ); # InArabicPresentationFormsB ok(!( "\x[BEEC]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BEEC]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BEEC]" ~~ m/^<-isInArabicPresentationFormsB>$/, q{Match unrelated inverted } ); # InArmenian ok("\x[0530]" ~~ m/^$/, q{Match } ); ok(!( "\x[0530]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0530]" ~~ m/^<-isInArmenian>$/ ), q{Don't match inverted } ); ok(!( "\x[3B0D]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3B0D]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3B0D]" ~~ m/^<-isInArmenian>$/, q{Match unrelated inverted } ); ok("\x[3B0D]\x[0530]" ~~ m//, q{Match unanchored } ); # InArrows ok("\c[LEFTWARDS ARROW]" ~~ m/^$/, q{Match } ); ok(!( "\c[LEFTWARDS ARROW]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LEFTWARDS ARROW]" ~~ m/^<-isInArrows>$/ ), q{Don't match inverted } ); ok(!( "\x[C401]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C401]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C401]" ~~ m/^<-isInArrows>$/, q{Match unrelated inverted } ); ok("\x[C401]\c[LEFTWARDS ARROW]" ~~ m//, q{Match unanchored } ); # InBasicLatin ok("\c[NULL]" ~~ m/^$/, q{Match } ); ok(!( "\c[NULL]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[NULL]" ~~ m/^<-isInBasicLatin>$/ ), q{Don't match inverted } ); ok(!( "\x[46EA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[46EA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[46EA]" ~~ m/^<-isInBasicLatin>$/, q{Match unrelated inverted } ); ok("\x[46EA]\c[NULL]" ~~ m//, q{Match unanchored } ); # InBengali ok("\x[0980]" ~~ m/^$/, q{Match } ); ok(!( "\x[0980]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0980]" ~~ m/^<-isInBengali>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE HMY]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE HMY]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE HMY]" ~~ m/^<-isInBengali>$/, q{Match unrelated inverted } ); ok("\c[YI SYLLABLE HMY]\x[0980]" ~~ m//, q{Match unanchored } ); # InBlockElements ok("\c[UPPER HALF BLOCK]" ~~ m/^$/, q{Match } ); ok(!( "\c[UPPER HALF BLOCK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[UPPER HALF BLOCK]" ~~ m/^<-isInBlockElements>$/ ), q{Don't match inverted } ); ok(!( "\x[5F41]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5F41]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5F41]" ~~ m/^<-isInBlockElements>$/, q{Match unrelated inverted } ); ok("\x[5F41]\c[UPPER HALF BLOCK]" ~~ m//, q{Match unanchored } ); # InBopomofo ok("\x[3100]" ~~ m/^$/, q{Match } ); ok(!( "\x[3100]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[3100]" ~~ m/^<-isInBopomofo>$/ ), q{Don't match inverted } ); ok(!( "\x[9F8E]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9F8E]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9F8E]" ~~ m/^<-isInBopomofo>$/, q{Match unrelated inverted } ); ok("\x[9F8E]\x[3100]" ~~ m//, q{Match unanchored } ); # InBopomofoExtended ok("\c[BOPOMOFO LETTER BU]" ~~ m/^$/, q{Match } ); ok(!( "\c[BOPOMOFO LETTER BU]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BOPOMOFO LETTER BU]" ~~ m/^<-isInBopomofoExtended>$/ ), q{Don't match inverted } ); ok(!( "\x[43A6]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[43A6]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[43A6]" ~~ m/^<-isInBopomofoExtended>$/, q{Match unrelated inverted } ); ok("\x[43A6]\c[BOPOMOFO LETTER BU]" ~~ m//, q{Match unanchored } ); # InBoxDrawing ok("\c[BOX DRAWINGS LIGHT HORIZONTAL]" ~~ m/^$/, q{Match } ); ok(!( "\c[BOX DRAWINGS LIGHT HORIZONTAL]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BOX DRAWINGS LIGHT HORIZONTAL]" ~~ m/^<-isInBoxDrawing>$/ ), q{Don't match inverted } ); ok(!( "\x[7865]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7865]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7865]" ~~ m/^<-isInBoxDrawing>$/, q{Match unrelated inverted } ); ok("\x[7865]\c[BOX DRAWINGS LIGHT HORIZONTAL]" ~~ m//, q{Match unanchored } ); # InBraillePatterns ok("\c[BRAILLE PATTERN BLANK]" ~~ m/^$/, q{Match } ); ok(!( "\c[BRAILLE PATTERN BLANK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BRAILLE PATTERN BLANK]" ~~ m/^<-isInBraillePatterns>$/ ), q{Don't match inverted } ); ok(!( "\c[THAI CHARACTER KHO KHAI]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[THAI CHARACTER KHO KHAI]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[THAI CHARACTER KHO KHAI]" ~~ m/^<-isInBraillePatterns>$/, q{Match unrelated inverted } ); ok("\c[THAI CHARACTER KHO KHAI]\c[BRAILLE PATTERN BLANK]" ~~ m//, q{Match unanchored } ); # InBuhid ok("\c[BUHID LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[BUHID LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BUHID LETTER A]" ~~ m/^<-isInBuhid>$/ ), q{Don't match inverted } ); ok(!( "\x[D208]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D208]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D208]" ~~ m/^<-isInBuhid>$/, q{Match unrelated inverted } ); ok("\x[D208]\c[BUHID LETTER A]" ~~ m//, q{Match unanchored } ); # InByzantineMusicalSymbols ok(!( "\x[9B1D]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9B1D]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9B1D]" ~~ m/^<-isInByzantineMusicalSymbols>$/, q{Match unrelated inverted } ); # InCJKCompatibility ok("\c[SQUARE APAATO]" ~~ m/^$/, q{Match } ); ok(!( "\c[SQUARE APAATO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SQUARE APAATO]" ~~ m/^<-isInCJKCompatibility>$/ ), q{Don't match inverted } ); ok(!( "\x[B8A5]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B8A5]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B8A5]" ~~ m/^<-isInCJKCompatibility>$/, q{Match unrelated inverted } ); ok("\x[B8A5]\c[SQUARE APAATO]" ~~ m//, q{Match unanchored } ); # InCJKCompatibilityForms ok(!( "\x[3528]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3528]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3528]" ~~ m/^<-isInCJKCompatibilityForms>$/, q{Match unrelated inverted } ); # InCJKCompatibilityIdeographs ok(!( "\x[69F7]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[69F7]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[69F7]" ~~ m/^<-isInCJKCompatibilityIdeographs>$/, q{Match unrelated inverted } ); # InCJKCompatibilityIdeographsSupplement ok(!( "\c[CANADIAN SYLLABICS NUNAVIK HO]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[CANADIAN SYLLABICS NUNAVIK HO]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[CANADIAN SYLLABICS NUNAVIK HO]" ~~ m/^<-isInCJKCompatibilityIdeographsSupplement>$/, q{Match unrelated inverted } ); # InCJKRadicalsSupplement ok("\c[CJK RADICAL REPEAT]" ~~ m/^$/, q{Match } ); ok(!( "\c[CJK RADICAL REPEAT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CJK RADICAL REPEAT]" ~~ m/^<-isInCJKRadicalsSupplement>$/ ), q{Don't match inverted } ); ok(!( "\x[37B4]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[37B4]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[37B4]" ~~ m/^<-isInCJKRadicalsSupplement>$/, q{Match unrelated inverted } ); ok("\x[37B4]\c[CJK RADICAL REPEAT]" ~~ m//, q{Match unanchored } ); # InCJKSymbolsAndPunctuation ok("\c[IDEOGRAPHIC SPACE]" ~~ m/^$/, q{Match } ); ok(!( "\c[IDEOGRAPHIC SPACE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[IDEOGRAPHIC SPACE]" ~~ m/^<-isInCJKSymbolsAndPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\x[80AA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[80AA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[80AA]" ~~ m/^<-isInCJKSymbolsAndPunctuation>$/, q{Match unrelated inverted } ); ok("\x[80AA]\c[IDEOGRAPHIC SPACE]" ~~ m//, q{Match unanchored } ); # InCJKUnifiedIdeographs ok("\x[4E00]" ~~ m/^$/, q{Match } ); ok(!( "\x[4E00]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[4E00]" ~~ m/^<-isInCJKUnifiedIdeographs>$/ ), q{Don't match inverted } ); ok(!( "\x[3613]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3613]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3613]" ~~ m/^<-isInCJKUnifiedIdeographs>$/, q{Match unrelated inverted } ); ok("\x[3613]\x[4E00]" ~~ m//, q{Match unanchored } ); # InCJKUnifiedIdeographsExtensionA ok("\x[3400]" ~~ m/^$/, q{Match } ); ok(!( "\x[3400]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[3400]" ~~ m/^<-isInCJKUnifiedIdeographsExtensionA>$/ ), q{Don't match inverted } ); ok(!( "\c[SQUARE HOORU]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[SQUARE HOORU]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[SQUARE HOORU]" ~~ m/^<-isInCJKUnifiedIdeographsExtensionA>$/, q{Match unrelated inverted } ); ok("\c[SQUARE HOORU]\x[3400]" ~~ m//, q{Match unanchored } ); # InCJKUnifiedIdeographsExtensionB ok(!( "\x[AC3B]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[AC3B]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[AC3B]" ~~ m/^<-isInCJKUnifiedIdeographsExtensionB>$/, q{Match unrelated inverted } ); # InCherokee ok("\c[CHEROKEE LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[CHEROKEE LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CHEROKEE LETTER A]" ~~ m/^<-isInCherokee>$/ ), q{Don't match inverted } ); ok(!( "\x[985F]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[985F]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[985F]" ~~ m/^<-isInCherokee>$/, q{Match unrelated inverted } ); ok("\x[985F]\c[CHEROKEE LETTER A]" ~~ m//, q{Match unanchored } ); # InCombiningDiacriticalMarks ok("\c[COMBINING GRAVE ACCENT]" ~~ m/^$/, q{Match } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[COMBINING GRAVE ACCENT]" ~~ m/^<-isInCombiningDiacriticalMarks>$/ ), q{Don't match inverted } ); ok(!( "\x[76DA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[76DA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[76DA]" ~~ m/^<-isInCombiningDiacriticalMarks>$/, q{Match unrelated inverted } ); ok("\x[76DA]\c[COMBINING GRAVE ACCENT]" ~~ m//, q{Match unanchored } ); # InCombiningDiacriticalMarksforSymbols ok("\c[COMBINING LEFT HARPOON ABOVE]" ~~ m/^$/, q{Match } ); ok(!( "\c[COMBINING LEFT HARPOON ABOVE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[COMBINING LEFT HARPOON ABOVE]" ~~ m/^<-isInCombiningDiacriticalMarksforSymbols>$/ ), q{Don't match inverted } ); ok(!( "\x[7345]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7345]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7345]" ~~ m/^<-isInCombiningDiacriticalMarksforSymbols>$/, q{Match unrelated inverted } ); ok("\x[7345]\c[COMBINING LEFT HARPOON ABOVE]" ~~ m//, q{Match unanchored } ); # InCombiningHalfMarks ok(!( "\x[6C2E]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[6C2E]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[6C2E]" ~~ m/^<-isInCombiningHalfMarks>$/, q{Match unrelated inverted } ); # InControlPictures ok("\c[SYMBOL FOR NULL]" ~~ m/^$/, q{Match } ); ok(!( "\c[SYMBOL FOR NULL]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SYMBOL FOR NULL]" ~~ m/^<-isInControlPictures>$/ ), q{Don't match inverted } ); ok(!( "\x[BCE2]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BCE2]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BCE2]" ~~ m/^<-isInControlPictures>$/, q{Match unrelated inverted } ); ok("\x[BCE2]\c[SYMBOL FOR NULL]" ~~ m//, q{Match unanchored } ); # InCurrencySymbols ok("\c[EURO-CURRENCY SIGN]" ~~ m/^$/, q{Match } ); ok(!( "\c[EURO-CURRENCY SIGN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[EURO-CURRENCY SIGN]" ~~ m/^<-isInCurrencySymbols>$/ ), q{Don't match inverted } ); ok(!( "\x[8596]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8596]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8596]" ~~ m/^<-isInCurrencySymbols>$/, q{Match unrelated inverted } ); ok("\x[8596]\c[EURO-CURRENCY SIGN]" ~~ m//, q{Match unanchored } ); # InCyrillic ok("\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m/^$/, q{Match } ); ok(!( "\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m/^<-isInCyrillic>$/ ), q{Don't match inverted } ); ok(!( "\x[51B2]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[51B2]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[51B2]" ~~ m/^<-isInCyrillic>$/, q{Match unrelated inverted } ); ok("\x[51B2]\c[CYRILLIC CAPITAL LETTER IE WITH GRAVE]" ~~ m//, q{Match unanchored } ); # InCyrillicSupplementary ok("\c[CYRILLIC CAPITAL LETTER KOMI DE]" ~~ m/^$/, q{Match } ); ok(!( "\c[CYRILLIC CAPITAL LETTER KOMI DE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CYRILLIC CAPITAL LETTER KOMI DE]" ~~ m/^<-isInCyrillicSupplementary>$/ ), q{Don't match inverted } ); ok(!( "\x[7BD9]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7BD9]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7BD9]" ~~ m/^<-isInCyrillicSupplementary>$/, q{Match unrelated inverted } ); ok("\x[7BD9]\c[CYRILLIC CAPITAL LETTER KOMI DE]" ~~ m//, q{Match unanchored } ); # InDeseret ok(!( "\c[TAMIL DIGIT FOUR]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[TAMIL DIGIT FOUR]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[TAMIL DIGIT FOUR]" ~~ m/^<-isInDeseret>$/, q{Match unrelated inverted } ); # InDevanagari ok("\x[0900]" ~~ m/^$/, q{Match } ); ok(!( "\x[0900]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0900]" ~~ m/^<-isInDevanagari>$/ ), q{Don't match inverted } ); ok(!( "\x[BB12]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BB12]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BB12]" ~~ m/^<-isInDevanagari>$/, q{Match unrelated inverted } ); ok("\x[BB12]\x[0900]" ~~ m//, q{Match unanchored } ); # InDingbats ok("\x[2700]" ~~ m/^$/, q{Match } ); ok(!( "\x[2700]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[2700]" ~~ m/^<-isInDingbats>$/ ), q{Don't match inverted } ); ok(!( "\x[D7A8]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D7A8]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D7A8]" ~~ m/^<-isInDingbats>$/, q{Match unrelated inverted } ); ok("\x[D7A8]\x[2700]" ~~ m//, q{Match unanchored } ); # InEnclosedAlphanumerics ok("\c[CIRCLED DIGIT ONE]" ~~ m/^$/, q{Match } ); ok(!( "\c[CIRCLED DIGIT ONE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[CIRCLED DIGIT ONE]" ~~ m/^<-isInEnclosedAlphanumerics>$/ ), q{Don't match inverted } ); ok(!( "\x[C3A2]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C3A2]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C3A2]" ~~ m/^<-isInEnclosedAlphanumerics>$/, q{Match unrelated inverted } ); ok("\x[C3A2]\c[CIRCLED DIGIT ONE]" ~~ m//, q{Match unanchored } ); # InEnclosedCJKLettersAndMonths ok("\c[PARENTHESIZED HANGUL KIYEOK]" ~~ m/^$/, q{Match } ); ok(!( "\c[PARENTHESIZED HANGUL KIYEOK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[PARENTHESIZED HANGUL KIYEOK]" ~~ m/^<-isInEnclosedCJKLettersAndMonths>$/ ), q{Don't match inverted } ); ok(!( "\x[5B44]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5B44]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5B44]" ~~ m/^<-isInEnclosedCJKLettersAndMonths>$/, q{Match unrelated inverted } ); ok("\x[5B44]\c[PARENTHESIZED HANGUL KIYEOK]" ~~ m//, q{Match unanchored } ); # InEthiopic ok("\c[ETHIOPIC SYLLABLE HA]" ~~ m/^$/, q{Match } ); ok(!( "\c[ETHIOPIC SYLLABLE HA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ETHIOPIC SYLLABLE HA]" ~~ m/^<-isInEthiopic>$/ ), q{Don't match inverted } ); ok(!( "\x[BBAE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BBAE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BBAE]" ~~ m/^<-isInEthiopic>$/, q{Match unrelated inverted } ); ok("\x[BBAE]\c[ETHIOPIC SYLLABLE HA]" ~~ m//, q{Match unanchored } ); # InGeneralPunctuation ok("\c[EN QUAD]" ~~ m/^$/, q{Match } ); ok(!( "\c[EN QUAD]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[EN QUAD]" ~~ m/^<-isInGeneralPunctuation>$/ ), q{Don't match inverted } ); ok(!( "\c[MEDIUM RIGHT PARENTHESIS ORNAMENT]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[MEDIUM RIGHT PARENTHESIS ORNAMENT]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[MEDIUM RIGHT PARENTHESIS ORNAMENT]" ~~ m/^<-isInGeneralPunctuation>$/, q{Match unrelated inverted } ); ok("\c[MEDIUM RIGHT PARENTHESIS ORNAMENT]\c[EN QUAD]" ~~ m//, q{Match unanchored } ); # InGeometricShapes ok("\c[BLACK SQUARE]" ~~ m/^$/, q{Match } ); ok(!( "\c[BLACK SQUARE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BLACK SQUARE]" ~~ m/^<-isInGeometricShapes>$/ ), q{Don't match inverted } ); ok(!( "\x[B700]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B700]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B700]" ~~ m/^<-isInGeometricShapes>$/, q{Match unrelated inverted } ); ok("\x[B700]\c[BLACK SQUARE]" ~~ m//, q{Match unanchored } ); # InGeorgian ok("\c[GEORGIAN CAPITAL LETTER AN]" ~~ m/^$/, q{Match } ); ok(!( "\c[GEORGIAN CAPITAL LETTER AN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[GEORGIAN CAPITAL LETTER AN]" ~~ m/^<-isInGeorgian>$/ ), q{Don't match inverted } ); ok(!( "\c[IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE]" ~~ m/^<-isInGeorgian>$/, q{Match unrelated inverted } ); ok("\c[IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE]\c[GEORGIAN CAPITAL LETTER AN]" ~~ m//, q{Match unanchored } ); # InGothic ok(!( "\x[4825]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[4825]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[4825]" ~~ m/^<-isInGothic>$/, q{Match unrelated inverted } ); # InGreekExtended ok("\c[GREEK SMALL LETTER ALPHA WITH PSILI]" ~~ m/^$/, q{Match } ); ok(!( "\c[GREEK SMALL LETTER ALPHA WITH PSILI]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[GREEK SMALL LETTER ALPHA WITH PSILI]" ~~ m/^<-isInGreekExtended>$/ ), q{Don't match inverted } ); ok(!( "\x[B9B7]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B9B7]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B9B7]" ~~ m/^<-isInGreekExtended>$/, q{Match unrelated inverted } ); ok("\x[B9B7]\c[GREEK SMALL LETTER ALPHA WITH PSILI]" ~~ m//, q{Match unanchored } ); # InGreekAndCoptic ok("\x[0370]" ~~ m/^$/, q{Match } ); ok(!( "\x[0370]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0370]" ~~ m/^<-isInGreekAndCoptic>$/ ), q{Don't match inverted } ); ok(!( "\x[7197]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7197]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7197]" ~~ m/^<-isInGreekAndCoptic>$/, q{Match unrelated inverted } ); ok("\x[7197]\x[0370]" ~~ m//, q{Match unanchored } ); # InGujarati ok("\x[0A80]" ~~ m/^$/, q{Match } ); ok(!( "\x[0A80]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0A80]" ~~ m/^<-isInGujarati>$/ ), q{Don't match inverted } ); ok(!( "\x[3B63]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3B63]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3B63]" ~~ m/^<-isInGujarati>$/, q{Match unrelated inverted } ); ok("\x[3B63]\x[0A80]" ~~ m//, q{Match unanchored } ); # InGurmukhi ok("\x[0A00]" ~~ m/^$/, q{Match } ); ok(!( "\x[0A00]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0A00]" ~~ m/^<-isInGurmukhi>$/ ), q{Don't match inverted } ); ok(!( "\x[10C8]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[10C8]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[10C8]" ~~ m/^<-isInGurmukhi>$/, q{Match unrelated inverted } ); ok("\x[10C8]\x[0A00]" ~~ m//, q{Match unanchored } ); # InHalfwidthAndFullwidthForms ok(!( "\x[CA55]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[CA55]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[CA55]" ~~ m/^<-isInHalfwidthAndFullwidthForms>$/, q{Match unrelated inverted } ); # InHangulCompatibilityJamo ok("\x[3130]" ~~ m/^$/, q{Match } ); ok(!( "\x[3130]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[3130]" ~~ m/^<-isInHangulCompatibilityJamo>$/ ), q{Don't match inverted } ); ok(!( "\c[MEASURED BY]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[MEASURED BY]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[MEASURED BY]" ~~ m/^<-isInHangulCompatibilityJamo>$/, q{Match unrelated inverted } ); ok("\c[MEASURED BY]\x[3130]" ~~ m//, q{Match unanchored } ); # InHangulJamo ok("\c[HANGUL CHOSEONG KIYEOK]" ~~ m/^$/, q{Match } ); ok(!( "\c[HANGUL CHOSEONG KIYEOK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HANGUL CHOSEONG KIYEOK]" ~~ m/^<-isInHangulJamo>$/ ), q{Don't match inverted } ); ok(!( "\x[3B72]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3B72]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3B72]" ~~ m/^<-isInHangulJamo>$/, q{Match unrelated inverted } ); ok("\x[3B72]\c[HANGUL CHOSEONG KIYEOK]" ~~ m//, q{Match unanchored } ); # InHangulSyllables ok("\x[CD95]" ~~ m/^$/, q{Match } ); ok(!( "\x[CD95]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[CD95]" ~~ m/^<-isInHangulSyllables>$/ ), q{Don't match inverted } ); ok(!( "\x[D7B0]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D7B0]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D7B0]" ~~ m/^<-isInHangulSyllables>$/, q{Match unrelated inverted } ); ok("\x[D7B0]\x[CD95]" ~~ m//, q{Match unanchored } ); # InHanunoo ok("\c[HANUNOO LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[HANUNOO LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[HANUNOO LETTER A]" ~~ m/^<-isInHanunoo>$/ ), q{Don't match inverted } ); ok(!( "\x[6F4F]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[6F4F]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[6F4F]" ~~ m/^<-isInHanunoo>$/, q{Match unrelated inverted } ); ok("\x[6F4F]\c[HANUNOO LETTER A]" ~~ m//, q{Match unanchored } ); # InHebrew ok("\x[0590]" ~~ m/^$/, q{Match } ); ok(!( "\x[0590]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0590]" ~~ m/^<-isInHebrew>$/ ), q{Don't match inverted } ); ok(!( "\x[0777]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[0777]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[0777]" ~~ m/^<-isInHebrew>$/, q{Match unrelated inverted } ); ok("\x[0777]\x[0590]" ~~ m//, q{Match unanchored } ); # InHighPrivateUseSurrogates ok(!( "\x[D04F]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D04F]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D04F]" ~~ m/^<-isInHighPrivateUseSurrogates>$/, q{Match unrelated inverted } ); # InHighSurrogates ok(!( "\x[D085]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D085]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D085]" ~~ m/^<-isInHighSurrogates>$/, q{Match unrelated inverted } ); # InHiragana ok("\x[3040]" ~~ m/^$/, q{Match } ); ok(!( "\x[3040]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[3040]" ~~ m/^<-isInHiragana>$/ ), q{Don't match inverted } ); ok(!( "\x[AC7C]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[AC7C]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[AC7C]" ~~ m/^<-isInHiragana>$/, q{Match unrelated inverted } ); ok("\x[AC7C]\x[3040]" ~~ m//, q{Match unanchored } ); # InIPAExtensions ok("\c[LATIN SMALL LETTER TURNED A]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN SMALL LETTER TURNED A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN SMALL LETTER TURNED A]" ~~ m/^<-isInIPAExtensions>$/ ), q{Don't match inverted } ); ok(!( "\c[HANGUL LETTER SSANGIEUNG]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[HANGUL LETTER SSANGIEUNG]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[HANGUL LETTER SSANGIEUNG]" ~~ m/^<-isInIPAExtensions>$/, q{Match unrelated inverted } ); ok("\c[HANGUL LETTER SSANGIEUNG]\c[LATIN SMALL LETTER TURNED A]" ~~ m//, q{Match unanchored } ); # InIdeographicDescriptionCharacters ok("\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m/^$/, q{Match } ); ok(!( "\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m/^<-isInIdeographicDescriptionCharacters>$/ ), q{Don't match inverted } ); ok(!( "\x[9160]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9160]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9160]" ~~ m/^<-isInIdeographicDescriptionCharacters>$/, q{Match unrelated inverted } ); ok("\x[9160]\c[IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT]" ~~ m//, q{Match unanchored } ); # InKanbun ok("\c[IDEOGRAPHIC ANNOTATION LINKING MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[IDEOGRAPHIC ANNOTATION LINKING MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[IDEOGRAPHIC ANNOTATION LINKING MARK]" ~~ m/^<-isInKanbun>$/ ), q{Don't match inverted } ); ok(!( "\x[A80C]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[A80C]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[A80C]" ~~ m/^<-isInKanbun>$/, q{Match unrelated inverted } ); ok("\x[A80C]\c[IDEOGRAPHIC ANNOTATION LINKING MARK]" ~~ m//, q{Match unanchored } ); # InKangxiRadicals ok("\c[KANGXI RADICAL ONE]" ~~ m/^$/, q{Match } ); ok(!( "\c[KANGXI RADICAL ONE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KANGXI RADICAL ONE]" ~~ m/^<-isInKangxiRadicals>$/ ), q{Don't match inverted } ); ok(!( "\x[891A]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[891A]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[891A]" ~~ m/^<-isInKangxiRadicals>$/, q{Match unrelated inverted } ); ok("\x[891A]\c[KANGXI RADICAL ONE]" ~~ m//, q{Match unanchored } ); # InKannada ok("\x[0C80]" ~~ m/^$/, q{Match } ); ok(!( "\x[0C80]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0C80]" ~~ m/^<-isInKannada>$/ ), q{Don't match inverted } ); ok(!( "\x[B614]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B614]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B614]" ~~ m/^<-isInKannada>$/, q{Match unrelated inverted } ); ok("\x[B614]\x[0C80]" ~~ m//, q{Match unanchored } ); # InKatakana ok("\c[KATAKANA-HIRAGANA DOUBLE HYPHEN]" ~~ m/^$/, q{Match } ); ok(!( "\c[KATAKANA-HIRAGANA DOUBLE HYPHEN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KATAKANA-HIRAGANA DOUBLE HYPHEN]" ~~ m/^<-isInKatakana>$/ ), q{Don't match inverted } ); ok(!( "\x[7EB8]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7EB8]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7EB8]" ~~ m/^<-isInKatakana>$/, q{Match unrelated inverted } ); ok("\x[7EB8]\c[KATAKANA-HIRAGANA DOUBLE HYPHEN]" ~~ m//, q{Match unanchored } ); # InKatakanaPhoneticExtensions ok("\c[KATAKANA LETTER SMALL KU]" ~~ m/^$/, q{Match } ); ok(!( "\c[KATAKANA LETTER SMALL KU]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KATAKANA LETTER SMALL KU]" ~~ m/^<-isInKatakanaPhoneticExtensions>$/ ), q{Don't match inverted } ); ok(!( "\x[97C2]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[97C2]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[97C2]" ~~ m/^<-isInKatakanaPhoneticExtensions>$/, q{Match unrelated inverted } ); ok("\x[97C2]\c[KATAKANA LETTER SMALL KU]" ~~ m//, q{Match unanchored } ); # InKhmer ok("\c[KHMER LETTER KA]" ~~ m/^$/, q{Match } ); ok(!( "\c[KHMER LETTER KA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[KHMER LETTER KA]" ~~ m/^<-isInKhmer>$/ ), q{Don't match inverted } ); ok(!( "\x[CAFA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[CAFA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[CAFA]" ~~ m/^<-isInKhmer>$/, q{Match unrelated inverted } ); ok("\x[CAFA]\c[KHMER LETTER KA]" ~~ m//, q{Match unanchored } ); # InLao ok("\x[0E80]" ~~ m/^$/, q{Match } ); ok(!( "\x[0E80]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0E80]" ~~ m/^<-isInLao>$/ ), q{Don't match inverted } ); ok(!( "\x[07BF]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[07BF]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[07BF]" ~~ m/^<-isInLao>$/, q{Match unrelated inverted } ); ok("\x[07BF]\x[0E80]" ~~ m//, q{Match unanchored } ); # InLatin1Supplement ok("\x[0080]" ~~ m/^$/, q{Match } ); ok(!( "\x[0080]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0080]" ~~ m/^<-isInLatin1Supplement>$/ ), q{Don't match inverted } ); ok(!( "\x[D062]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[D062]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[D062]" ~~ m/^<-isInLatin1Supplement>$/, q{Match unrelated inverted } ); ok("\x[D062]\x[0080]" ~~ m//, q{Match unanchored } ); # InLatinExtendedA ok("\c[LATIN CAPITAL LETTER A WITH MACRON]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN CAPITAL LETTER A WITH MACRON]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN CAPITAL LETTER A WITH MACRON]" ~~ m/^<-isInLatinExtendedA>$/ ), q{Don't match inverted } ); ok(!( "\c[IDEOGRAPHIC ANNOTATION EARTH MARK]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[IDEOGRAPHIC ANNOTATION EARTH MARK]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[IDEOGRAPHIC ANNOTATION EARTH MARK]" ~~ m/^<-isInLatinExtendedA>$/, q{Match unrelated inverted } ); ok("\c[IDEOGRAPHIC ANNOTATION EARTH MARK]\c[LATIN CAPITAL LETTER A WITH MACRON]" ~~ m//, q{Match unanchored } ); # InLatinExtendedAdditional ok("\c[LATIN CAPITAL LETTER A WITH RING BELOW]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN CAPITAL LETTER A WITH RING BELOW]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN CAPITAL LETTER A WITH RING BELOW]" ~~ m/^<-isInLatinExtendedAdditional>$/ ), q{Don't match inverted } ); ok(!( "\x[9A44]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9A44]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9A44]" ~~ m/^<-isInLatinExtendedAdditional>$/, q{Match unrelated inverted } ); ok("\x[9A44]\c[LATIN CAPITAL LETTER A WITH RING BELOW]" ~~ m//, q{Match unanchored } ); # InLatinExtendedB ok("\c[LATIN SMALL LETTER B WITH STROKE]" ~~ m/^$/, q{Match } ); ok(!( "\c[LATIN SMALL LETTER B WITH STROKE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[LATIN SMALL LETTER B WITH STROKE]" ~~ m/^<-isInLatinExtendedB>$/ ), q{Don't match inverted } ); ok(!( "\x[7544]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[7544]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[7544]" ~~ m/^<-isInLatinExtendedB>$/, q{Match unrelated inverted } ); ok("\x[7544]\c[LATIN SMALL LETTER B WITH STROKE]" ~~ m//, q{Match unanchored } ); # InLetterlikeSymbols ok("\c[ACCOUNT OF]" ~~ m/^$/, q{Match } ); ok(!( "\c[ACCOUNT OF]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[ACCOUNT OF]" ~~ m/^<-isInLetterlikeSymbols>$/ ), q{Don't match inverted } ); ok(!( "\c[LATIN CAPITAL LETTER X WITH DOT ABOVE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[LATIN CAPITAL LETTER X WITH DOT ABOVE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[LATIN CAPITAL LETTER X WITH DOT ABOVE]" ~~ m/^<-isInLetterlikeSymbols>$/, q{Match unrelated inverted } ); ok("\c[LATIN CAPITAL LETTER X WITH DOT ABOVE]\c[ACCOUNT OF]" ~~ m//, q{Match unanchored } ); # InLowSurrogates ok(!( "\x[5ECC]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5ECC]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5ECC]" ~~ m/^<-isInLowSurrogates>$/, q{Match unrelated inverted } ); # InMalayalam ok("\x[0D00]" ~~ m/^$/, q{Match } ); ok(!( "\x[0D00]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0D00]" ~~ m/^<-isInMalayalam>$/ ), q{Don't match inverted } ); ok(!( "\x[3457]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3457]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3457]" ~~ m/^<-isInMalayalam>$/, q{Match unrelated inverted } ); ok("\x[3457]\x[0D00]" ~~ m//, q{Match unanchored } ); # InMathematicalAlphanumericSymbols ok(!( "\x[6B79]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[6B79]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[6B79]" ~~ m/^<-isInMathematicalAlphanumericSymbols>$/, q{Match unrelated inverted } ); # InMathematicalOperators ok("\c[FOR ALL]" ~~ m/^$/, q{Match } ); ok(!( "\c[FOR ALL]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[FOR ALL]" ~~ m/^<-isInMathematicalOperators>$/ ), q{Don't match inverted } ); ok(!( "\x[BBC6]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BBC6]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BBC6]" ~~ m/^<-isInMathematicalOperators>$/, q{Match unrelated inverted } ); ok("\x[BBC6]\c[FOR ALL]" ~~ m//, q{Match unanchored } ); # InMiscellaneousMathematicalSymbolsA ok("\x[27C0]" ~~ m/^$/, q{Match } ); ok(!( "\x[27C0]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[27C0]" ~~ m/^<-isInMiscellaneousMathematicalSymbolsA>$/ ), q{Don't match inverted } ); ok(!( "\x[065D]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[065D]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[065D]" ~~ m/^<-isInMiscellaneousMathematicalSymbolsA>$/, q{Match unrelated inverted } ); ok("\x[065D]\x[27C0]" ~~ m//, q{Match unanchored } ); # InMiscellaneousMathematicalSymbolsB ok("\c[TRIPLE VERTICAL BAR DELIMITER]" ~~ m/^$/, q{Match } ); ok(!( "\c[TRIPLE VERTICAL BAR DELIMITER]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TRIPLE VERTICAL BAR DELIMITER]" ~~ m/^<-isInMiscellaneousMathematicalSymbolsB>$/ ), q{Don't match inverted } ); ok(!( "\x[56A6]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[56A6]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[56A6]" ~~ m/^<-isInMiscellaneousMathematicalSymbolsB>$/, q{Match unrelated inverted } ); ok("\x[56A6]\c[TRIPLE VERTICAL BAR DELIMITER]" ~~ m//, q{Match unanchored } ); # InMiscellaneousSymbols ok("\c[BLACK SUN WITH RAYS]" ~~ m/^$/, q{Match } ); ok(!( "\c[BLACK SUN WITH RAYS]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[BLACK SUN WITH RAYS]" ~~ m/^<-isInMiscellaneousSymbols>$/ ), q{Don't match inverted } ); ok(!( "\x[3EE7]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3EE7]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3EE7]" ~~ m/^<-isInMiscellaneousSymbols>$/, q{Match unrelated inverted } ); ok("\x[3EE7]\c[BLACK SUN WITH RAYS]" ~~ m//, q{Match unanchored } ); # InMiscellaneousTechnical ok("\c[DIAMETER SIGN]" ~~ m/^$/, q{Match } ); ok(!( "\c[DIAMETER SIGN]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[DIAMETER SIGN]" ~~ m/^<-isInMiscellaneousTechnical>$/ ), q{Don't match inverted } ); ok(!( "\x[2EFC]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[2EFC]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[2EFC]" ~~ m/^<-isInMiscellaneousTechnical>$/, q{Match unrelated inverted } ); ok("\x[2EFC]\c[DIAMETER SIGN]" ~~ m//, q{Match unanchored } ); # InMongolian ok("\c[MONGOLIAN BIRGA]" ~~ m/^$/, q{Match } ); ok(!( "\c[MONGOLIAN BIRGA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MONGOLIAN BIRGA]" ~~ m/^<-isInMongolian>$/ ), q{Don't match inverted } ); ok(!( "\x[AFB4]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[AFB4]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[AFB4]" ~~ m/^<-isInMongolian>$/, q{Match unrelated inverted } ); ok("\x[AFB4]\c[MONGOLIAN BIRGA]" ~~ m//, q{Match unanchored } ); # InMusicalSymbols ok(!( "\x[0CE4]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[0CE4]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[0CE4]" ~~ m/^<-isInMusicalSymbols>$/, q{Match unrelated inverted } ); # InMyanmar ok("\c[MYANMAR LETTER KA]" ~~ m/^$/, q{Match } ); ok(!( "\c[MYANMAR LETTER KA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MYANMAR LETTER KA]" ~~ m/^<-isInMyanmar>$/ ), q{Don't match inverted } ); ok(!( "\x[1DDB]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[1DDB]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[1DDB]" ~~ m/^<-isInMyanmar>$/, q{Match unrelated inverted } ); ok("\x[1DDB]\c[MYANMAR LETTER KA]" ~~ m//, q{Match unanchored } ); # InNumberForms ok("\x[2150]" ~~ m/^$/, q{Match } ); ok(!( "\x[2150]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[2150]" ~~ m/^<-isInNumberForms>$/ ), q{Don't match inverted } ); ok(!( "\c[BLACK RIGHT-POINTING SMALL TRIANGLE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[BLACK RIGHT-POINTING SMALL TRIANGLE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[BLACK RIGHT-POINTING SMALL TRIANGLE]" ~~ m/^<-isInNumberForms>$/, q{Match unrelated inverted } ); ok("\c[BLACK RIGHT-POINTING SMALL TRIANGLE]\x[2150]" ~~ m//, q{Match unanchored } ); # InOgham ok("\c[OGHAM SPACE MARK]" ~~ m/^$/, q{Match } ); ok(!( "\c[OGHAM SPACE MARK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[OGHAM SPACE MARK]" ~~ m/^<-isInOgham>$/ ), q{Don't match inverted } ); ok(!( "\x[768C]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[768C]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[768C]" ~~ m/^<-isInOgham>$/, q{Match unrelated inverted } ); ok("\x[768C]\c[OGHAM SPACE MARK]" ~~ m//, q{Match unanchored } ); # InOldItalic ok(!( "\x[C597]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C597]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C597]" ~~ m/^<-isInOldItalic>$/, q{Match unrelated inverted } ); # InOpticalCharacterRecognition ok("\c[OCR HOOK]" ~~ m/^$/, q{Match } ); ok(!( "\c[OCR HOOK]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[OCR HOOK]" ~~ m/^<-isInOpticalCharacterRecognition>$/ ), q{Don't match inverted } ); ok(!( "\x[BE80]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BE80]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BE80]" ~~ m/^<-isInOpticalCharacterRecognition>$/, q{Match unrelated inverted } ); ok("\x[BE80]\c[OCR HOOK]" ~~ m//, q{Match unanchored } ); # InOriya ok("\x[0B00]" ~~ m/^$/, q{Match } ); ok(!( "\x[0B00]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0B00]" ~~ m/^<-isInOriya>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE GGEX]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE GGEX]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE GGEX]" ~~ m/^<-isInOriya>$/, q{Match unrelated inverted } ); ok("\c[YI SYLLABLE GGEX]\x[0B00]" ~~ m//, q{Match unanchored } ); # InPrivateUseArea ok(!( "\x[B6B1]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B6B1]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B6B1]" ~~ m/^<-isInPrivateUseArea>$/, q{Match unrelated inverted } ); # InRunic ok("\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m/^$/, q{Match } ); ok(!( "\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m/^<-isInRunic>$/ ), q{Don't match inverted } ); ok(!( "\c[SINHALA LETTER MAHAAPRAANA KAYANNA]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[SINHALA LETTER MAHAAPRAANA KAYANNA]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[SINHALA LETTER MAHAAPRAANA KAYANNA]" ~~ m/^<-isInRunic>$/, q{Match unrelated inverted } ); ok("\c[SINHALA LETTER MAHAAPRAANA KAYANNA]\c[RUNIC LETTER FEHU FEOH FE F]" ~~ m//, q{Match unanchored } ); # InSinhala ok("\x[0D80]" ~~ m/^$/, q{Match } ); ok(!( "\x[0D80]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0D80]" ~~ m/^<-isInSinhala>$/ ), q{Don't match inverted } ); ok(!( "\x[1060]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[1060]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[1060]" ~~ m/^<-isInSinhala>$/, q{Match unrelated inverted } ); ok("\x[1060]\x[0D80]" ~~ m//, q{Match unanchored } ); # InSmallFormVariants ok(!( "\x[5285]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5285]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5285]" ~~ m/^<-isInSmallFormVariants>$/, q{Match unrelated inverted } ); # InSpacingModifierLetters ok("\c[MODIFIER LETTER SMALL H]" ~~ m/^$/, q{Match } ); ok(!( "\c[MODIFIER LETTER SMALL H]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[MODIFIER LETTER SMALL H]" ~~ m/^<-isInSpacingModifierLetters>$/ ), q{Don't match inverted } ); ok(!( "\x[5326]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5326]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5326]" ~~ m/^<-isInSpacingModifierLetters>$/, q{Match unrelated inverted } ); ok("\x[5326]\c[MODIFIER LETTER SMALL H]" ~~ m//, q{Match unanchored } ); # InSpecials ok(!( "\x[3DF1]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3DF1]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3DF1]" ~~ m/^<-isInSpecials>$/, q{Match unrelated inverted } ); # InSuperscriptsAndSubscripts ok("\c[SUPERSCRIPT ZERO]" ~~ m/^$/, q{Match } ); ok(!( "\c[SUPERSCRIPT ZERO]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SUPERSCRIPT ZERO]" ~~ m/^<-isInSuperscriptsAndSubscripts>$/ ), q{Don't match inverted } ); ok(!( "\x[3E71]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3E71]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3E71]" ~~ m/^<-isInSuperscriptsAndSubscripts>$/, q{Match unrelated inverted } ); ok("\x[3E71]\c[SUPERSCRIPT ZERO]" ~~ m//, q{Match unanchored } ); # InSupplementalArrowsA ok("\c[UPWARDS QUADRUPLE ARROW]" ~~ m/^$/, q{Match } ); ok(!( "\c[UPWARDS QUADRUPLE ARROW]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[UPWARDS QUADRUPLE ARROW]" ~~ m/^<-isInSupplementalArrowsA>$/ ), q{Don't match inverted } ); ok(!( "\c[GREEK SMALL LETTER OMICRON WITH TONOS]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[GREEK SMALL LETTER OMICRON WITH TONOS]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[GREEK SMALL LETTER OMICRON WITH TONOS]" ~~ m/^<-isInSupplementalArrowsA>$/, q{Match unrelated inverted } ); ok("\c[GREEK SMALL LETTER OMICRON WITH TONOS]\c[UPWARDS QUADRUPLE ARROW]" ~~ m//, q{Match unanchored } ); # InSupplementalArrowsB ok("\c[RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE]" ~~ m/^$/, q{Match } ); ok(!( "\c[RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE]" ~~ m/^<-isInSupplementalArrowsB>$/ ), q{Don't match inverted } ); ok(!( "\x[C1A9]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[C1A9]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[C1A9]" ~~ m/^<-isInSupplementalArrowsB>$/, q{Match unrelated inverted } ); ok("\x[C1A9]\c[RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE]" ~~ m//, q{Match unanchored } ); # InSupplementalMathematicalOperators ok("\c[N-ARY CIRCLED DOT OPERATOR]" ~~ m/^$/, q{Match } ); ok(!( "\c[N-ARY CIRCLED DOT OPERATOR]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[N-ARY CIRCLED DOT OPERATOR]" ~~ m/^<-isInSupplementalMathematicalOperators>$/ ), q{Don't match inverted } ); ok(!( "\x[9EBD]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9EBD]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9EBD]" ~~ m/^<-isInSupplementalMathematicalOperators>$/, q{Match unrelated inverted } ); ok("\x[9EBD]\c[N-ARY CIRCLED DOT OPERATOR]" ~~ m//, q{Match unanchored } ); # InSupplementaryPrivateUseAreaA ok(!( "\x[07E3]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[07E3]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[07E3]" ~~ m/^<-isInSupplementaryPrivateUseAreaA>$/, q{Match unrelated inverted } ); # InSupplementaryPrivateUseAreaB ok(!( "\x[4C48]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[4C48]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[4C48]" ~~ m/^<-isInSupplementaryPrivateUseAreaB>$/, q{Match unrelated inverted } ); # InSyriac ok("\c[SYRIAC END OF PARAGRAPH]" ~~ m/^$/, q{Match } ); ok(!( "\c[SYRIAC END OF PARAGRAPH]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[SYRIAC END OF PARAGRAPH]" ~~ m/^<-isInSyriac>$/ ), q{Don't match inverted } ); ok(!( "\c[YI SYLLABLE NZIEP]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[YI SYLLABLE NZIEP]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[YI SYLLABLE NZIEP]" ~~ m/^<-isInSyriac>$/, q{Match unrelated inverted } ); ok("\c[YI SYLLABLE NZIEP]\c[SYRIAC END OF PARAGRAPH]" ~~ m//, q{Match unanchored } ); # InTagalog ok("\c[TAGALOG LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[TAGALOG LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TAGALOG LETTER A]" ~~ m/^<-isInTagalog>$/ ), q{Don't match inverted } ); ok(!( "\c[GEORGIAN LETTER BAN]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[GEORGIAN LETTER BAN]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[GEORGIAN LETTER BAN]" ~~ m/^<-isInTagalog>$/, q{Match unrelated inverted } ); ok("\c[GEORGIAN LETTER BAN]\c[TAGALOG LETTER A]" ~~ m//, q{Match unanchored } ); # InTagbanwa ok("\c[TAGBANWA LETTER A]" ~~ m/^$/, q{Match } ); ok(!( "\c[TAGBANWA LETTER A]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TAGBANWA LETTER A]" ~~ m/^<-isInTagbanwa>$/ ), q{Don't match inverted } ); ok(!( "\x[5776]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[5776]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[5776]" ~~ m/^<-isInTagbanwa>$/, q{Match unrelated inverted } ); ok("\x[5776]\c[TAGBANWA LETTER A]" ~~ m//, q{Match unanchored } ); # InTags ok(!( "\x[3674]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3674]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3674]" ~~ m/^<-isInTags>$/, q{Match unrelated inverted } ); # InTamil ok("\x[0B80]" ~~ m/^$/, q{Match } ); ok(!( "\x[0B80]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0B80]" ~~ m/^<-isInTamil>$/ ), q{Don't match inverted } ); ok(!( "\x[B58F]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[B58F]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[B58F]" ~~ m/^<-isInTamil>$/, q{Match unrelated inverted } ); ok("\x[B58F]\x[0B80]" ~~ m//, q{Match unanchored } ); # InTelugu ok("\x[0C00]" ~~ m/^$/, q{Match } ); ok(!( "\x[0C00]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0C00]" ~~ m/^<-isInTelugu>$/ ), q{Don't match inverted } ); ok(!( "\x[8AC5]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[8AC5]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[8AC5]" ~~ m/^<-isInTelugu>$/, q{Match unrelated inverted } ); ok("\x[8AC5]\x[0C00]" ~~ m//, q{Match unanchored } ); # InThaana ok("\c[THAANA LETTER HAA]" ~~ m/^$/, q{Match } ); ok(!( "\c[THAANA LETTER HAA]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[THAANA LETTER HAA]" ~~ m/^<-isInThaana>$/ ), q{Don't match inverted } ); ok(!( "\x[BB8F]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[BB8F]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[BB8F]" ~~ m/^<-isInThaana>$/, q{Match unrelated inverted } ); ok("\x[BB8F]\c[THAANA LETTER HAA]" ~~ m//, q{Match unanchored } ); # InThai ok("\x[0E00]" ~~ m/^$/, q{Match } ); ok(!( "\x[0E00]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[0E00]" ~~ m/^<-isInThai>$/ ), q{Don't match inverted } ); ok(!( "\x[9395]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9395]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9395]" ~~ m/^<-isInThai>$/, q{Match unrelated inverted } ); ok("\x[9395]\x[0E00]" ~~ m//, q{Match unanchored } ); # InTibetan ok("\c[TIBETAN SYLLABLE OM]" ~~ m/^$/, q{Match } ); ok(!( "\c[TIBETAN SYLLABLE OM]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[TIBETAN SYLLABLE OM]" ~~ m/^<-isInTibetan>$/ ), q{Don't match inverted } ); ok(!( "\x[957A]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[957A]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[957A]" ~~ m/^<-isInTibetan>$/, q{Match unrelated inverted } ); ok("\x[957A]\c[TIBETAN SYLLABLE OM]" ~~ m//, q{Match unanchored } ); # InUnifiedCanadianAboriginalSyllabics ok("\x[1400]" ~~ m/^$/, q{Match } ); ok(!( "\x[1400]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\x[1400]" ~~ m/^<-isInUnifiedCanadianAboriginalSyllabics>$/ ), q{Don't match inverted } ); ok(!( "\x[9470]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[9470]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[9470]" ~~ m/^<-isInUnifiedCanadianAboriginalSyllabics>$/, q{Match unrelated inverted } ); ok("\x[9470]\x[1400]" ~~ m//, q{Match unanchored } ); # InVariationSelectors ok(!( "\x[764D]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[764D]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[764D]" ~~ m/^<-isInVariationSelectors>$/, q{Match unrelated inverted } ); # InYiRadicals ok("\c[YI RADICAL QOT]" ~~ m/^$/, q{Match } ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[YI RADICAL QOT]" ~~ m/^<-isInYiRadicals>$/ ), q{Don't match inverted } ); ok(!( "\x[3A4E]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\x[3A4E]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\x[3A4E]" ~~ m/^<-isInYiRadicals>$/, q{Match unrelated inverted } ); ok("\x[3A4E]\c[YI RADICAL QOT]" ~~ m//, q{Match unanchored } ); # InYiSyllables ok("\c[YI SYLLABLE IT]" ~~ m/^$/, q{Match } ); ok(!( "\c[YI SYLLABLE IT]" ~~ m/^.$/ ), q{Don't match negated } ); ok(!( "\c[YI SYLLABLE IT]" ~~ m/^<-isInYiSyllables>$/ ), q{Don't match inverted } ); ok(!( "\c[PARALLEL WITH HORIZONTAL STROKE]" ~~ m/^$/ ), q{Don't match unrelated } ); ok("\c[PARALLEL WITH HORIZONTAL STROKE]" ~~ m/^.$/, q{Match unrelated negated } ); ok("\c[PARALLEL WITH HORIZONTAL STROKE]" ~~ m/^<-isInYiSyllables>$/, q{Match unrelated inverted } ); ok("\c[PARALLEL WITH HORIZONTAL STROKE]\c[YI SYLLABLE IT]" ~~ m//, q{Match unanchored } ); }