use Perl6::Rules; use Test::Simple "no_plan"; use charnames ":full"; # L Letter ok( "\x{846D}" =~ m/^$/, q{Match (Letter)} ); ok( "\x{846D}" !~ m/^.$/, q{Don't match negated (Letter)} ); ok( "\x{846D}" !~ m/^<-L>$/, 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/^<-L>$/, 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/^<-Letter>$/, 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/^<-Letter>$/, q{Match unrelated inverted } ); ok( "\x{9FA6}\x{6DF7}" =~ m//, q{Match unanchored } ); # Lu UppercaseLetter ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^$/, q{Match (UppercaseLetter)} ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^.$/, q{Don't match negated (UppercaseLetter)} ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-Lu>$/, 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/^<-Lu>$/, 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/^<-Lu>$/, q{Match related inverted (UppercaseLetter)} ); ok( "\x{C767}\x{C767}\N{LATIN CAPITAL LETTER A}" =~ m//, q{Match unanchored (UppercaseLetter)} ); ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-UppercaseLetter>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE NBA}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE NBA}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE NBA}" =~ m/^<-UppercaseLetter>$/, q{Match unrelated inverted } ); ok( "\N{YI SYLLABLE NBA}\N{LATIN CAPITAL LETTER A}" =~ m//, q{Match unanchored } ); # Ll LowercaseLetter ok( "\N{LATIN SMALL LETTER A}" =~ m/^$/, q{Match (LowercaseLetter)} ); ok( "\N{LATIN SMALL LETTER A}" !~ m/^.$/, q{Don't match negated (LowercaseLetter)} ); ok( "\N{LATIN SMALL LETTER A}" !~ m/^<-Ll>$/, q{Don't match inverted (LowercaseLetter)} ); ok( "\N{BOPOMOFO FINAL LETTER H}" !~ m/^$/, q{Don't match unrelated (LowercaseLetter)} ); ok( "\N{BOPOMOFO FINAL LETTER H}" =~ m/^.$/, q{Match unrelated negated (LowercaseLetter)} ); ok( "\N{BOPOMOFO FINAL LETTER H}" =~ m/^<-Ll>$/, q{Match unrelated inverted (LowercaseLetter)} ); ok( "\N{BOPOMOFO FINAL LETTER H}" !~ m/^$/, q{Don't match related (LowercaseLetter)} ); ok( "\N{BOPOMOFO FINAL LETTER H}" =~ m/^.$/, q{Match related negated (LowercaseLetter)} ); ok( "\N{BOPOMOFO FINAL LETTER H}" =~ m/^<-Ll>$/, q{Match related inverted (LowercaseLetter)} ); ok( "\N{BOPOMOFO FINAL LETTER H}\N{BOPOMOFO FINAL LETTER H}\N{LATIN SMALL LETTER A}" =~ m//, q{Match unanchored (LowercaseLetter)} ); ok( "\N{LATIN SMALL LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{LATIN SMALL LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN SMALL LETTER A}" !~ m/^<-LowercaseLetter>$/, 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/^<-LowercaseLetter>$/, 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/^<-LowercaseLetter>$/, q{Match related inverted } ); ok( "\x{86CA}\x{86CA}\N{LATIN SMALL LETTER A}" =~ m//, q{Match unanchored } ); # Lt TitlecaseLetter ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m/^$/, q{Match (TitlecaseLetter)} ); ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^.$/, q{Don't match negated (TitlecaseLetter)} ); ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^<-Lt>$/, 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/^<-Lt>$/, 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/^<-Lt>$/, q{Match related inverted (TitlecaseLetter)} ); ok( "\x{6DC8}\x{6DC8}\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m//, q{Match unanchored (TitlecaseLetter)} ); ok( "\N{GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI}" =~ m/^$/, q{Match } ); ok( "\N{GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI}" !~ m/^<-TitlecaseLetter>$/, 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/^<-TitlecaseLetter>$/, q{Match unrelated inverted } ); ok( "\x{0C4E}\N{GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI}" =~ m//, q{Match unanchored } ); # Lm ModifierLetter ok( "\N{IDEOGRAPHIC ITERATION MARK}" =~ m/^$/, q{Match (ModifierLetter)} ); ok( "\N{IDEOGRAPHIC ITERATION MARK}" !~ m/^.$/, q{Don't match negated (ModifierLetter)} ); ok( "\N{IDEOGRAPHIC ITERATION MARK}" !~ m/^<-Lm>$/, 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/^<-Lm>$/, q{Match unrelated inverted (ModifierLetter)} ); ok( "\N{IDEOGRAPHIC CLOSING MARK}" !~ m/^$/, q{Don't match related (ModifierLetter)} ); ok( "\N{IDEOGRAPHIC CLOSING MARK}" =~ m/^.$/, q{Match related negated (ModifierLetter)} ); ok( "\N{IDEOGRAPHIC CLOSING MARK}" =~ m/^<-Lm>$/, q{Match related inverted (ModifierLetter)} ); ok( "\x{2B61}\N{IDEOGRAPHIC CLOSING MARK}\N{IDEOGRAPHIC ITERATION MARK}" =~ m//, q{Match unanchored (ModifierLetter)} ); ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^$/, q{Match } ); ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<-ModifierLetter>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE HA}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE HA}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE HA}" =~ m/^<-ModifierLetter>$/, q{Match unrelated inverted } ); ok( "\N{YI SYLLABLE HA}\N{MODIFIER LETTER SMALL H}" =~ m//, q{Match unanchored } ); # Lo OtherLetter ok( "\N{LATIN LETTER TWO WITH STROKE}" =~ m/^$/, q{Match (OtherLetter)} ); ok( "\N{LATIN LETTER TWO WITH STROKE}" !~ m/^.$/, q{Don't match negated (OtherLetter)} ); ok( "\N{LATIN LETTER TWO WITH STROKE}" !~ m/^<-Lo>$/, q{Don't match inverted (OtherLetter)} ); ok( "\N{LATIN SMALL LETTER TURNED DELTA}" !~ m/^$/, q{Don't match unrelated (OtherLetter)} ); ok( "\N{LATIN SMALL LETTER TURNED DELTA}" =~ m/^.$/, q{Match unrelated negated (OtherLetter)} ); ok( "\N{LATIN SMALL LETTER TURNED DELTA}" =~ m/^<-Lo>$/, q{Match unrelated inverted (OtherLetter)} ); ok( "\N{LATIN SMALL LETTER TURNED DELTA}" !~ m/^$/, q{Don't match related (OtherLetter)} ); ok( "\N{LATIN SMALL LETTER TURNED DELTA}" =~ m/^.$/, q{Match related negated (OtherLetter)} ); ok( "\N{LATIN SMALL LETTER TURNED DELTA}" =~ m/^<-Lo>$/, q{Match related inverted (OtherLetter)} ); ok( "\N{LATIN SMALL LETTER TURNED DELTA}\N{LATIN SMALL LETTER TURNED DELTA}\N{LATIN LETTER TWO WITH STROKE}" =~ m//, q{Match unanchored (OtherLetter)} ); ok( "\N{ETHIOPIC SYLLABLE GLOTTAL A}" =~ m/^$/, q{Match } ); ok( "\N{ETHIOPIC SYLLABLE GLOTTAL A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ETHIOPIC SYLLABLE GLOTTAL A}" !~ m/^<-OtherLetter>$/, 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/^<-OtherLetter>$/, q{Match unrelated inverted } ); ok( "\x{12AF}\N{ETHIOPIC SYLLABLE GLOTTAL A}" =~ m//, q{Match unanchored } ); # Lr # Alias for "Ll", "Lu", and "Lt". ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^$/, q{Match (Alias for "Ll", "Lu", and "Lt".)} ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^.$/, q{Don't match negated (Alias for "Ll", "Lu", and "Lt".)} ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-Lr>$/, 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/^<-Lr>$/, 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/^<-Lr>$/, q{Match related inverted (Alias for "Ll", "Lu", and "Lt".)} ); ok( "\x{87B5}\x{87B5}\N{LATIN CAPITAL LETTER A}" =~ m//, q{Match unanchored (Alias for "Ll", "Lu", and "Lt".)} ); # M Mark ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^$/, q{Match (Mark)} ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^.$/, q{Don't match negated (Mark)} ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-M>$/, 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/^<-M>$/, q{Match unrelated inverted (Mark)} ); ok( "\x{D0AA}\N{COMBINING GRAVE ACCENT}" =~ m//, q{Match unanchored (Mark)} ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^$/, q{Match } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-Mark>$/, 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/^<-Mark>$/, q{Match unrelated inverted } ); ok( "\x{BE64}\N{COMBINING GRAVE ACCENT}" =~ m//, q{Match unanchored } ); # Mn NonspacingMark ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^$/, q{Match (NonspacingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^.$/, q{Don't match negated (NonspacingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-Mn>$/, 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/^<-Mn>$/, q{Match unrelated inverted (NonspacingMark)} ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^$/, q{Don't match related (NonspacingMark)} ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^.$/, q{Match related negated (NonspacingMark)} ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^<-Mn>$/, q{Match related inverted (NonspacingMark)} ); ok( "\x{47A5}\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}\N{COMBINING GRAVE ACCENT}" =~ m//, q{Match unanchored (NonspacingMark)} ); ok( "\N{TAGALOG VOWEL SIGN I}" =~ m/^$/, q{Match } ); ok( "\N{TAGALOG VOWEL SIGN I}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TAGALOG VOWEL SIGN I}" !~ m/^<-NonspacingMark>$/, q{Don't match inverted } ); ok( "\N{CANADIAN SYLLABICS TYA}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{CANADIAN SYLLABICS TYA}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{CANADIAN SYLLABICS TYA}" =~ m/^<-NonspacingMark>$/, q{Match unrelated inverted } ); ok( "\N{CANADIAN SYLLABICS TYA}\N{TAGALOG VOWEL SIGN I}" =~ m//, q{Match unanchored } ); # Mc SpacingMark ok( "\N{DEVANAGARI SIGN VISARGA}" =~ m/^$/, q{Match (SpacingMark)} ); ok( "\N{DEVANAGARI SIGN VISARGA}" !~ m/^.$/, q{Don't match negated (SpacingMark)} ); ok( "\N{DEVANAGARI SIGN VISARGA}" !~ m/^<-Mc>$/, 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/^<-Mc>$/, q{Match unrelated inverted (SpacingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related (SpacingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated (SpacingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-Mc>$/, q{Match related inverted (SpacingMark)} ); ok( "\x{9981}\N{COMBINING GRAVE ACCENT}\N{DEVANAGARI SIGN VISARGA}" =~ m//, q{Match unanchored (SpacingMark)} ); ok( "\N{DEVANAGARI SIGN VISARGA}" =~ m/^$/, q{Match } ); ok( "\N{DEVANAGARI SIGN VISARGA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DEVANAGARI SIGN VISARGA}" !~ m/^<-SpacingMark>$/, 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/^<-SpacingMark>$/, q{Match unrelated inverted } ); ok( "\x{35E3}\N{DEVANAGARI SIGN VISARGA}" =~ m//, q{Match unanchored } ); # Me EnclosingMark ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^$/, q{Match (EnclosingMark)} ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^.$/, q{Don't match negated (EnclosingMark)} ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<-Me>$/, 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/^<-Me>$/, q{Match unrelated inverted (EnclosingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related (EnclosingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated (EnclosingMark)} ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-Me>$/, q{Match related inverted (EnclosingMark)} ); ok( "\x{9400}\N{COMBINING GRAVE ACCENT}\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m//, q{Match unanchored (EnclosingMark)} ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^$/, q{Match } ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<-EnclosingMark>$/, 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/^<-EnclosingMark>$/, q{Match unrelated inverted } ); ok( "\x{7C68}\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m//, q{Match unanchored } ); # N Number ok( "\N{SUPERSCRIPT ZERO}" =~ m/^$/, q{Match (Number)} ); ok( "\N{SUPERSCRIPT ZERO}" !~ m/^.$/, q{Don't match negated (Number)} ); ok( "\N{SUPERSCRIPT ZERO}" !~ m/^<-N>$/, q{Don't match inverted (Number)} ); ok( "\N{LATIN LETTER SMALL CAPITAL E}" !~ m/^$/, q{Don't match unrelated (Number)} ); ok( "\N{LATIN LETTER SMALL CAPITAL E}" =~ m/^.$/, q{Match unrelated negated (Number)} ); ok( "\N{LATIN LETTER SMALL CAPITAL E}" =~ m/^<-N>$/, q{Match unrelated inverted (Number)} ); ok( "\N{LATIN LETTER SMALL CAPITAL E}\N{SUPERSCRIPT ZERO}" =~ m//, q{Match unanchored (Number)} ); ok( "\N{DIGIT ZERO}" =~ m/^$/, q{Match } ); ok( "\N{DIGIT ZERO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DIGIT ZERO}" !~ m/^<-Number>$/, 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/^<-Number>$/, q{Match unrelated inverted } ); ok( "\x{A994}\N{DIGIT ZERO}" =~ m//, q{Match unanchored } ); # Nd DecimalNumber ok( "\N{DIGIT ZERO}" =~ m/^$/, q{Match (DecimalNumber)} ); ok( "\N{DIGIT ZERO}" !~ m/^.$/, q{Don't match negated (DecimalNumber)} ); ok( "\N{DIGIT ZERO}" !~ m/^<-Nd>$/, 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/^<-Nd>$/, q{Match unrelated inverted (DecimalNumber)} ); ok( "\N{SUPERSCRIPT TWO}" !~ m/^$/, q{Don't match related (DecimalNumber)} ); ok( "\N{SUPERSCRIPT TWO}" =~ m/^.$/, q{Match related negated (DecimalNumber)} ); ok( "\N{SUPERSCRIPT TWO}" =~ m/^<-Nd>$/, q{Match related inverted (DecimalNumber)} ); ok( "\x{4E2C}\N{SUPERSCRIPT TWO}\N{DIGIT ZERO}" =~ m//, q{Match unanchored (DecimalNumber)} ); ok( "\N{DIGIT ZERO}" =~ m/^$/, q{Match } ); ok( "\N{DIGIT ZERO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DIGIT ZERO}" !~ m/^<-DecimalNumber>$/, 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/^<-DecimalNumber>$/, q{Match unrelated inverted } ); ok( "\x{A652}\N{DIGIT ZERO}" =~ m//, q{Match unanchored } ); # Nl LetterNumber ok( "\N{RUNIC ARLAUG SYMBOL}" =~ m/^$/, q{Match (LetterNumber)} ); ok( "\N{RUNIC ARLAUG SYMBOL}" !~ m/^.$/, q{Don't match negated (LetterNumber)} ); ok( "\N{RUNIC ARLAUG SYMBOL}" !~ m/^<-Nl>$/, 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/^<-Nl>$/, q{Match unrelated inverted (LetterNumber)} ); ok( "\N{DIGIT ZERO}" !~ m/^$/, q{Don't match related (LetterNumber)} ); ok( "\N{DIGIT ZERO}" =~ m/^.$/, q{Match related negated (LetterNumber)} ); ok( "\N{DIGIT ZERO}" =~ m/^<-Nl>$/, q{Match related inverted (LetterNumber)} ); ok( "\x{6C2F}\N{DIGIT ZERO}\N{RUNIC ARLAUG SYMBOL}" =~ m//, q{Match unanchored (LetterNumber)} ); ok( "\N{RUNIC ARLAUG SYMBOL}" =~ m/^$/, q{Match } ); ok( "\N{RUNIC ARLAUG SYMBOL}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{RUNIC ARLAUG SYMBOL}" !~ m/^<-LetterNumber>$/, 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/^<-LetterNumber>$/, 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/^<-LetterNumber>$/, q{Match related inverted } ); ok( "\x{80A5}\x{80A5}\N{RUNIC ARLAUG SYMBOL}" =~ m//, q{Match unanchored } ); # No OtherNumber ok( "\N{SUPERSCRIPT TWO}" =~ m/^$/, q{Match (OtherNumber)} ); ok( "\N{SUPERSCRIPT TWO}" !~ m/^.$/, q{Don't match negated (OtherNumber)} ); ok( "\N{SUPERSCRIPT TWO}" !~ m/^<-No>$/, 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/^<-No>$/, q{Match unrelated inverted (OtherNumber)} ); ok( "\N{DIGIT ZERO}" !~ m/^$/, q{Don't match related (OtherNumber)} ); ok( "\N{DIGIT ZERO}" =~ m/^.$/, q{Match related negated (OtherNumber)} ); ok( "\N{DIGIT ZERO}" =~ m/^<-No>$/, q{Match related inverted (OtherNumber)} ); ok( "\x{92F3}\N{DIGIT ZERO}\N{SUPERSCRIPT TWO}" =~ m//, q{Match unanchored (OtherNumber)} ); ok( "\N{SUPERSCRIPT TWO}" =~ m/^$/, q{Match } ); ok( "\N{SUPERSCRIPT TWO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SUPERSCRIPT TWO}" !~ m/^<-OtherNumber>$/, 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/^<-OtherNumber>$/, q{Match unrelated inverted } ); ok( "\x{5363}\N{SUPERSCRIPT TWO}" =~ m//, q{Match unanchored } ); # P Punctuation ok( "\N{EXCLAMATION MARK}" =~ m/^

$/, q{Match

(Punctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^.$/, q{Don't match negated

(Punctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^<-P>$/, 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/^<-P>$/, q{Match unrelated inverted

(Punctuation)} ); ok( "\x{A918}\N{EXCLAMATION MARK}" =~ m/

/, q{Match unanchored

(Punctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^$/, q{Match } ); ok( "\N{EXCLAMATION MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{EXCLAMATION MARK}" !~ m/^<-Punctuation>$/, 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/^<-Punctuation>$/, q{Match unrelated inverted } ); ok( "\x{CE60}\N{EXCLAMATION MARK}" =~ m//, q{Match unanchored } ); # Pc ConnectorPunctuation ok( "\N{LOW LINE}" =~ m/^$/, q{Match (ConnectorPunctuation)} ); ok( "\N{LOW LINE}" !~ m/^.$/, q{Don't match negated (ConnectorPunctuation)} ); ok( "\N{LOW LINE}" !~ m/^<-Pc>$/, 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/^<-Pc>$/, q{Match unrelated inverted (ConnectorPunctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^$/, q{Don't match related (ConnectorPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^.$/, q{Match related negated (ConnectorPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^<-Pc>$/, q{Match related inverted (ConnectorPunctuation)} ); ok( "\x{5F19}\N{EXCLAMATION MARK}\N{LOW LINE}" =~ m//, q{Match unanchored (ConnectorPunctuation)} ); ok( "\N{LOW LINE}" =~ m/^$/, q{Match } ); ok( "\N{LOW LINE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LOW LINE}" !~ m/^<-ConnectorPunctuation>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE MGOX}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE MGOX}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE MGOX}" =~ m/^<-ConnectorPunctuation>$/, q{Match unrelated inverted } ); ok( "\N{YI SYLLABLE MGOX}\N{LOW LINE}" =~ m//, q{Match unanchored } ); # Pd DashPunctuation ok( "\N{HYPHEN-MINUS}" =~ m/^$/, q{Match (DashPunctuation)} ); ok( "\N{HYPHEN-MINUS}" !~ m/^.$/, q{Don't match negated (DashPunctuation)} ); ok( "\N{HYPHEN-MINUS}" !~ m/^<-Pd>$/, 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/^<-Pd>$/, q{Match unrelated inverted (DashPunctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^$/, q{Don't match related (DashPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^.$/, q{Match related negated (DashPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^<-Pd>$/, q{Match related inverted (DashPunctuation)} ); ok( "\x{49A1}\N{EXCLAMATION MARK}\N{HYPHEN-MINUS}" =~ m//, q{Match unanchored (DashPunctuation)} ); ok( "\N{HYPHEN-MINUS}" =~ m/^$/, q{Match } ); ok( "\N{HYPHEN-MINUS}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HYPHEN-MINUS}" !~ m/^<-DashPunctuation>$/, 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/^<-DashPunctuation>$/, q{Match unrelated inverted } ); ok( "\x{3C6E}\N{HYPHEN-MINUS}" =~ m//, q{Match unanchored } ); # Ps OpenPunctuation ok( "\N{LEFT PARENTHESIS}" =~ m/^$/, q{Match (OpenPunctuation)} ); ok( "\N{LEFT PARENTHESIS}" !~ m/^.$/, q{Don't match negated (OpenPunctuation)} ); ok( "\N{LEFT PARENTHESIS}" !~ m/^<-Ps>$/, 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/^<-Ps>$/, q{Match unrelated inverted (OpenPunctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^$/, q{Don't match related (OpenPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^.$/, q{Match related negated (OpenPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^<-Ps>$/, q{Match related inverted (OpenPunctuation)} ); ok( "\x{C8A5}\N{EXCLAMATION MARK}\N{LEFT PARENTHESIS}" =~ m//, q{Match unanchored (OpenPunctuation)} ); ok( "\N{LEFT PARENTHESIS}" =~ m/^$/, q{Match } ); ok( "\N{LEFT PARENTHESIS}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LEFT PARENTHESIS}" !~ m/^<-OpenPunctuation>$/, 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/^<-OpenPunctuation>$/, q{Match unrelated inverted } ); ok( "\x{84B8}\N{LEFT PARENTHESIS}" =~ m//, q{Match unanchored } ); # Pe ClosePunctuation ok( "\N{RIGHT PARENTHESIS}" =~ m/^$/, q{Match (ClosePunctuation)} ); ok( "\N{RIGHT PARENTHESIS}" !~ m/^.$/, q{Don't match negated (ClosePunctuation)} ); ok( "\N{RIGHT PARENTHESIS}" !~ m/^<-Pe>$/, 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/^<-Pe>$/, q{Match unrelated inverted (ClosePunctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^$/, q{Don't match related (ClosePunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^.$/, q{Match related negated (ClosePunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^<-Pe>$/, q{Match related inverted (ClosePunctuation)} ); ok( "\x{BB92}\N{EXCLAMATION MARK}\N{RIGHT PARENTHESIS}" =~ m//, q{Match unanchored (ClosePunctuation)} ); ok( "\N{RIGHT PARENTHESIS}" =~ m/^$/, q{Match } ); ok( "\N{RIGHT PARENTHESIS}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{RIGHT PARENTHESIS}" !~ m/^<-ClosePunctuation>$/, 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/^<-ClosePunctuation>$/, q{Match unrelated inverted } ); ok( "\x{D55D}\N{RIGHT PARENTHESIS}" =~ m//, q{Match unanchored } ); # Pi InitialPunctuation ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^$/, q{Match (InitialPunctuation)} ); ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^.$/, q{Don't match negated (InitialPunctuation)} ); ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<-Pi>$/, 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/^<-Pi>$/, q{Match unrelated inverted (InitialPunctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^$/, q{Don't match related (InitialPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^.$/, q{Match related negated (InitialPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^<-Pi>$/, q{Match related inverted (InitialPunctuation)} ); ok( "\x{3A35}\N{EXCLAMATION MARK}\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m//, q{Match unanchored (InitialPunctuation)} ); ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^$/, q{Match } ); ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<-InitialPunctuation>$/, 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/^<-InitialPunctuation>$/, q{Match unrelated inverted } ); ok( "\x{B84F}\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m//, q{Match unanchored } ); # Pf FinalPunctuation ok( "\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^$/, q{Match (FinalPunctuation)} ); ok( "\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^.$/, q{Don't match negated (FinalPunctuation)} ); ok( "\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<-Pf>$/, 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/^<-Pf>$/, q{Match unrelated inverted (FinalPunctuation)} ); ok( "\N{MATHEMATICAL LEFT WHITE SQUARE BRACKET}" !~ m/^$/, q{Don't match related (FinalPunctuation)} ); ok( "\N{MATHEMATICAL LEFT WHITE SQUARE BRACKET}" =~ m/^.$/, q{Match related negated (FinalPunctuation)} ); ok( "\N{MATHEMATICAL LEFT WHITE SQUARE BRACKET}" =~ m/^<-Pf>$/, q{Match related inverted (FinalPunctuation)} ); ok( "\x{27CF}\N{MATHEMATICAL LEFT WHITE SQUARE BRACKET}\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m//, q{Match unanchored (FinalPunctuation)} ); ok( "\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^$/, q{Match } ); ok( "\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<-FinalPunctuation>$/, 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/^<-FinalPunctuation>$/, q{Match unrelated inverted } ); ok( "\x{4F65}\N{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m//, q{Match unanchored } ); # Po OtherPunctuation ok( "\N{EXCLAMATION MARK}" =~ m/^$/, q{Match (OtherPunctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^.$/, q{Don't match negated (OtherPunctuation)} ); ok( "\N{EXCLAMATION MARK}" !~ m/^<-Po>$/, 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/^<-Po>$/, q{Match unrelated inverted (OtherPunctuation)} ); ok( "\N{LEFT PARENTHESIS}" !~ m/^$/, q{Don't match related (OtherPunctuation)} ); ok( "\N{LEFT PARENTHESIS}" =~ m/^.$/, q{Match related negated (OtherPunctuation)} ); ok( "\N{LEFT PARENTHESIS}" =~ m/^<-Po>$/, q{Match related inverted (OtherPunctuation)} ); ok( "\x{AA74}\N{LEFT PARENTHESIS}\N{EXCLAMATION MARK}" =~ m//, q{Match unanchored (OtherPunctuation)} ); ok( "\N{EXCLAMATION MARK}" =~ m/^$/, q{Match } ); ok( "\N{EXCLAMATION MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{EXCLAMATION MARK}" !~ m/^<-OtherPunctuation>$/, 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/^<-OtherPunctuation>$/, q{Match unrelated inverted } ); ok( "\x{7DD2}\N{EXCLAMATION MARK}" =~ m//, q{Match unanchored } ); # S Symbol ok( "\N{YI RADICAL QOT}" =~ m/^$/, q{Match (Symbol)} ); ok( "\N{YI RADICAL QOT}" !~ m/^.$/, q{Don't match negated (Symbol)} ); ok( "\N{YI RADICAL QOT}" !~ m/^<-S>$/, 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/^<-S>$/, q{Match unrelated inverted (Symbol)} ); ok( "\x{8839}\N{YI RADICAL QOT}" =~ m//, q{Match unanchored (Symbol)} ); ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m/^$/, q{Match } ); ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" !~ m/^<-Symbol>$/, 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/^<-Symbol>$/, q{Match unrelated inverted } ); ok( "\x{4A1C}\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m//, q{Match unanchored } ); # Sm MathSymbol ok( "\N{PLUS SIGN}" =~ m/^$/, q{Match (MathSymbol)} ); ok( "\N{PLUS SIGN}" !~ m/^.$/, q{Don't match negated (MathSymbol)} ); ok( "\N{PLUS SIGN}" !~ m/^<-Sm>$/, 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/^<-Sm>$/, q{Match unrelated inverted (MathSymbol)} ); ok( "\N{DOLLAR SIGN}" !~ m/^$/, q{Don't match related (MathSymbol)} ); ok( "\N{DOLLAR SIGN}" =~ m/^.$/, q{Match related negated (MathSymbol)} ); ok( "\N{DOLLAR SIGN}" =~ m/^<-Sm>$/, q{Match related inverted (MathSymbol)} ); ok( "\x{B258}\N{DOLLAR SIGN}\N{PLUS SIGN}" =~ m//, q{Match unanchored (MathSymbol)} ); ok( "\N{PLUS SIGN}" =~ m/^$/, q{Match } ); ok( "\N{PLUS SIGN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{PLUS SIGN}" !~ m/^<-MathSymbol>$/, 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/^<-MathSymbol>$/, q{Match unrelated inverted } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-MathSymbol>$/, q{Match related inverted } ); ok( "\x{98FF}\N{COMBINING GRAVE ACCENT}\N{PLUS SIGN}" =~ m//, q{Match unanchored } ); # Sc CurrencySymbol ok( "\N{DOLLAR SIGN}" =~ m/^$/, q{Match (CurrencySymbol)} ); ok( "\N{DOLLAR SIGN}" !~ m/^.$/, q{Don't match negated (CurrencySymbol)} ); ok( "\N{DOLLAR SIGN}" !~ m/^<-Sc>$/, 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/^<-Sc>$/, q{Match unrelated inverted (CurrencySymbol)} ); ok( "\N{YI RADICAL QOT}" !~ m/^$/, q{Don't match related (CurrencySymbol)} ); ok( "\N{YI RADICAL QOT}" =~ m/^.$/, q{Match related negated (CurrencySymbol)} ); ok( "\N{YI RADICAL QOT}" =~ m/^<-Sc>$/, q{Match related inverted (CurrencySymbol)} ); ok( "\x{994C}\N{YI RADICAL QOT}\N{DOLLAR SIGN}" =~ m//, q{Match unanchored (CurrencySymbol)} ); ok( "\N{DOLLAR SIGN}" =~ m/^$/, q{Match } ); ok( "\N{DOLLAR SIGN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DOLLAR SIGN}" !~ m/^<-CurrencySymbol>$/, 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/^<-CurrencySymbol>$/, q{Match unrelated inverted } ); ok( "\x{37C0}\N{DOLLAR SIGN}" =~ m//, q{Match unanchored } ); # Sk ModifierSymbol ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^$/, q{Match (ModifierSymbol)} ); ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^.$/, q{Don't match negated (ModifierSymbol)} ); ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<-Sk>$/, 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/^<-Sk>$/, q{Match unrelated inverted (ModifierSymbol)} ); ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" !~ m/^$/, q{Don't match related (ModifierSymbol)} ); ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m/^.$/, q{Match related negated (ModifierSymbol)} ); ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m/^<-Sk>$/, q{Match related inverted (ModifierSymbol)} ); ok( "\x{4578}\N{HEXAGRAM FOR THE CREATIVE HEAVEN}\N{CIRCUMFLEX ACCENT}" =~ m//, q{Match unanchored (ModifierSymbol)} ); ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^$/, q{Match } ); ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<-ModifierSymbol>$/, 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/^<-ModifierSymbol>$/, q{Match unrelated inverted } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-ModifierSymbol>$/, q{Match related inverted } ); ok( "\x{42F1}\N{COMBINING GRAVE ACCENT}\N{CIRCUMFLEX ACCENT}" =~ m//, q{Match unanchored } ); # So OtherSymbol ok( "\N{YI RADICAL QOT}" =~ m/^$/, q{Match (OtherSymbol)} ); ok( "\N{YI RADICAL QOT}" !~ m/^.$/, q{Don't match negated (OtherSymbol)} ); ok( "\N{YI RADICAL QOT}" !~ m/^<-So>$/, 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/^<-So>$/, q{Match unrelated inverted (OtherSymbol)} ); ok( "\N{DOLLAR SIGN}" !~ m/^$/, q{Don't match related (OtherSymbol)} ); ok( "\N{DOLLAR SIGN}" =~ m/^.$/, q{Match related negated (OtherSymbol)} ); ok( "\N{DOLLAR SIGN}" =~ m/^<-So>$/, q{Match related inverted (OtherSymbol)} ); ok( "\x{83DE}\N{DOLLAR SIGN}\N{YI RADICAL QOT}" =~ m//, q{Match unanchored (OtherSymbol)} ); ok( "\N{YI RADICAL QOT}" =~ m/^$/, q{Match } ); ok( "\N{YI RADICAL QOT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{YI RADICAL QOT}" !~ m/^<-OtherSymbol>$/, 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/^<-OtherSymbol>$/, q{Match unrelated inverted } ); ok( "\x{9B2C}\N{YI RADICAL QOT}" =~ m//, q{Match unanchored } ); # Z Separator ok( "\N{IDEOGRAPHIC SPACE}" =~ m/^$/, q{Match (Separator)} ); ok( "\N{IDEOGRAPHIC SPACE}" !~ m/^.$/, q{Don't match negated (Separator)} ); ok( "\N{IDEOGRAPHIC SPACE}" !~ m/^<-Z>$/, 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/^<-Z>$/, q{Match unrelated inverted (Separator)} ); ok( "\x{2C08}\N{IDEOGRAPHIC SPACE}" =~ m//, q{Match unanchored (Separator)} ); ok( "\N{SPACE}" =~ m/^$/, q{Match } ); ok( "\N{SPACE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SPACE}" !~ m/^<-Separator>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE SOX}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE SOX}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE SOX}" =~ m/^<-Separator>$/, q{Match unrelated inverted } ); ok( "\N{YI RADICAL QOT}" !~ m/^$/, q{Don't match related } ); ok( "\N{YI RADICAL QOT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{YI RADICAL QOT}" =~ m/^<-Separator>$/, q{Match related inverted } ); ok( "\N{YI SYLLABLE SOX}\N{YI RADICAL QOT}\N{SPACE}" =~ m//, q{Match unanchored } ); # Zs SpaceSeparator ok( "\N{SPACE}" =~ m/^$/, q{Match (SpaceSeparator)} ); ok( "\N{SPACE}" !~ m/^.$/, q{Don't match negated (SpaceSeparator)} ); ok( "\N{SPACE}" !~ m/^<-Zs>$/, 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/^<-Zs>$/, q{Match unrelated inverted (SpaceSeparator)} ); ok( "\N{LINE SEPARATOR}" !~ m/^$/, q{Don't match related (SpaceSeparator)} ); ok( "\N{LINE SEPARATOR}" =~ m/^.$/, q{Match related negated (SpaceSeparator)} ); ok( "\N{LINE SEPARATOR}" =~ m/^<-Zs>$/, q{Match related inverted (SpaceSeparator)} ); ok( "\x{88DD}\N{LINE SEPARATOR}\N{SPACE}" =~ m//, q{Match unanchored (SpaceSeparator)} ); ok( "\N{SPACE}" =~ m/^$/, q{Match } ); ok( "\N{SPACE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SPACE}" !~ m/^<-SpaceSeparator>$/, 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/^<-SpaceSeparator>$/, q{Match unrelated inverted } ); ok( "\N{DOLLAR SIGN}" !~ m/^$/, q{Don't match related } ); ok( "\N{DOLLAR SIGN}" =~ m/^.$/, q{Match related negated } ); ok( "\N{DOLLAR SIGN}" =~ m/^<-SpaceSeparator>$/, q{Match related inverted } ); ok( "\x{C808}\N{DOLLAR SIGN}\N{SPACE}" =~ m//, q{Match unanchored } ); # Zl LineSeparator ok( "\N{LINE SEPARATOR}" =~ m/^$/, q{Match (LineSeparator)} ); ok( "\N{LINE SEPARATOR}" !~ m/^.$/, q{Don't match negated (LineSeparator)} ); ok( "\N{LINE SEPARATOR}" !~ m/^<-Zl>$/, 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/^<-Zl>$/, q{Match unrelated inverted (LineSeparator)} ); ok( "\N{SPACE}" !~ m/^$/, q{Don't match related (LineSeparator)} ); ok( "\N{SPACE}" =~ m/^.$/, q{Match related negated (LineSeparator)} ); ok( "\N{SPACE}" =~ m/^<-Zl>$/, q{Match related inverted (LineSeparator)} ); ok( "\x{B822}\N{SPACE}\N{LINE SEPARATOR}" =~ m//, q{Match unanchored (LineSeparator)} ); ok( "\N{LINE SEPARATOR}" =~ m/^$/, q{Match } ); ok( "\N{LINE SEPARATOR}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LINE SEPARATOR}" !~ m/^<-LineSeparator>$/, 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/^<-LineSeparator>$/, q{Match unrelated inverted } ); ok( "\N{CHEROKEE LETTER A}" !~ m/^$/, q{Don't match related } ); ok( "\N{CHEROKEE LETTER A}" =~ m/^.$/, q{Match related negated } ); ok( "\N{CHEROKEE LETTER A}" =~ m/^<-LineSeparator>$/, q{Match related inverted } ); ok( "\x{1390}\N{CHEROKEE LETTER A}\N{LINE SEPARATOR}" =~ m//, q{Match unanchored } ); # Zp ParagraphSeparator ok( "\N{PARAGRAPH SEPARATOR}" =~ m/^$/, q{Match (ParagraphSeparator)} ); ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^.$/, q{Don't match negated (ParagraphSeparator)} ); ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<-Zp>$/, 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/^<-Zp>$/, q{Match unrelated inverted (ParagraphSeparator)} ); ok( "\N{SPACE}" !~ m/^$/, q{Don't match related (ParagraphSeparator)} ); ok( "\N{SPACE}" =~ m/^.$/, q{Match related negated (ParagraphSeparator)} ); ok( "\N{SPACE}" =~ m/^<-Zp>$/, q{Match related inverted (ParagraphSeparator)} ); ok( "\x{5FDE}\N{SPACE}\N{PARAGRAPH SEPARATOR}" =~ m//, q{Match unanchored (ParagraphSeparator)} ); ok( "\N{PARAGRAPH SEPARATOR}" =~ m/^$/, q{Match } ); ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<-ParagraphSeparator>$/, 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/^<-ParagraphSeparator>$/, q{Match unrelated inverted } ); ok( "\N{EXCLAMATION MARK}" !~ m/^$/, q{Don't match related } ); ok( "\N{EXCLAMATION MARK}" =~ m/^.$/, q{Match related negated } ); ok( "\N{EXCLAMATION MARK}" =~ m/^<-ParagraphSeparator>$/, q{Match related inverted } ); ok( "\x{345B}\N{EXCLAMATION MARK}\N{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/^<-C>$/, 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/^<-C>$/, 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/^<-Other>$/, 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/^<-Other>$/, q{Match unrelated inverted } ); ok( "\x{AC00}\x{A679}" =~ m//, q{Match unanchored } ); # Cc Control ok( "\N{NULL}" =~ m/^$/, q{Match (Control)} ); ok( "\N{NULL}" !~ m/^.$/, q{Don't match negated (Control)} ); ok( "\N{NULL}" !~ m/^<-Cc>$/, 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/^<-Cc>$/, 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/^<-Cc>$/, q{Match related inverted (Control)} ); ok( "\x{0A7A}\x{0A7A}\N{NULL}" =~ m//, q{Match unanchored (Control)} ); ok( "\N{NULL}" =~ m/^$/, q{Match } ); ok( "\N{NULL}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{NULL}" !~ m/^<-Control>$/, 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/^<-Control>$/, 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/^<-Control>$/, q{Match related inverted } ); ok( "\x{4886}\x{4DB6}\N{NULL}" =~ m//, q{Match unanchored } ); # Cf Format ok( "\N{SOFT HYPHEN}" =~ m/^$/, q{Match (Format)} ); ok( "\N{SOFT HYPHEN}" !~ m/^.$/, q{Don't match negated (Format)} ); ok( "\N{SOFT HYPHEN}" !~ m/^<-Cf>$/, 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/^<-Cf>$/, 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/^<-Cf>$/, q{Match related inverted (Format)} ); ok( "\x{77B8}\x{9FA6}\N{SOFT HYPHEN}" =~ m//, q{Match unanchored (Format)} ); ok( "\N{KHMER VOWEL INHERENT AQ}" =~ m/^$/, q{Match } ); ok( "\N{KHMER VOWEL INHERENT AQ}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KHMER VOWEL INHERENT AQ}" !~ m/^<-Format>$/, q{Don't match inverted } ); ok( "\N{DEVANAGARI VOWEL SIGN AU}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{DEVANAGARI VOWEL SIGN AU}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{DEVANAGARI VOWEL SIGN AU}" =~ m/^<-Format>$/, q{Match unrelated inverted } ); ok( "\N{DEVANAGARI VOWEL SIGN AU}\N{KHMER VOWEL INHERENT AQ}" =~ m//, q{Match unanchored } ); # BidiL # Left-to-Right ok( "\N{YI SYLLABLE IT}" =~ m/^$/, q{Match (Left-to-Right)} ); ok( "\N{YI SYLLABLE IT}" !~ m/^.$/, q{Don't match negated (Left-to-Right)} ); ok( "\N{YI SYLLABLE IT}" !~ m/^<-BidiL>$/, 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/^<-BidiL>$/, q{Match unrelated inverted (Left-to-Right)} ); ok( "\x{5A87}\N{YI SYLLABLE IT}" =~ m//, q{Match unanchored (Left-to-Right)} ); # BidiEN # European Number ok( "\N{DIGIT ZERO}" =~ m/^$/, q{Match (European Number)} ); ok( "\N{DIGIT ZERO}" !~ m/^.$/, q{Don't match negated (European Number)} ); ok( "\N{DIGIT ZERO}" !~ m/^<-BidiEN>$/, 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/^<-BidiEN>$/, q{Match unrelated inverted (European Number)} ); ok( "\x{AFFB}\N{DIGIT ZERO}" =~ m//, q{Match unanchored (European Number)} ); # BidiES # European Number Separator ok( "\N{SOLIDUS}" =~ m/^$/, q{Match (European Number Separator)} ); ok( "\N{SOLIDUS}" !~ m/^.$/, q{Don't match negated (European Number Separator)} ); ok( "\N{SOLIDUS}" !~ m/^<-BidiES>$/, 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/^<-BidiES>$/, q{Match unrelated inverted (European Number Separator)} ); ok( "\x{7B89}\N{SOLIDUS}" =~ m//, q{Match unanchored (European Number Separator)} ); # BidiET # European Number Terminator ok( "\N{NUMBER SIGN}" =~ m/^$/, q{Match (European Number Terminator)} ); ok( "\N{NUMBER SIGN}" !~ m/^.$/, q{Don't match negated (European Number Terminator)} ); ok( "\N{NUMBER SIGN}" !~ m/^<-BidiET>$/, 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/^<-BidiET>$/, q{Match unrelated inverted (European Number Terminator)} ); ok( "\x{6780}\N{NUMBER SIGN}" =~ m//, q{Match unanchored (European Number Terminator)} ); # BidiWS # Whitespace ok( "\N{FORM FEED (FF)}" =~ m/^$/, q{Match (Whitespace)} ); ok( "\N{FORM FEED (FF)}" !~ m/^.$/, q{Don't match negated (Whitespace)} ); ok( "\N{FORM FEED (FF)}" !~ m/^<-BidiWS>$/, 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/^<-BidiWS>$/, q{Match unrelated inverted (Whitespace)} ); ok( "\x{6CF9}\N{FORM FEED (FF)}" =~ m//, q{Match unanchored (Whitespace)} ); # Arabic ok( "\N{ARABIC LETTER HAMZA}" =~ m/^$/, q{Match } ); ok( "\N{ARABIC LETTER HAMZA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ARABIC LETTER HAMZA}" !~ m/^<-Arabic>$/, 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/^<-Arabic>$/, q{Match unrelated inverted } ); ok( "\x{A649}\N{ARABIC LETTER HAMZA}" =~ m//, q{Match unanchored } ); # Armenian ok( "\N{ARMENIAN CAPITAL LETTER AYB}" =~ m/^$/, q{Match } ); ok( "\N{ARMENIAN CAPITAL LETTER AYB}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ARMENIAN CAPITAL LETTER AYB}" !~ m/^<-Armenian>$/, 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/^<-Armenian>$/, q{Match unrelated inverted } ); ok( "\x{CBFF}\N{ARMENIAN CAPITAL LETTER AYB}" =~ m//, q{Match unanchored } ); # Bengali ok( "\N{BENGALI SIGN CANDRABINDU}" =~ m/^$/, q{Match } ); ok( "\N{BENGALI SIGN CANDRABINDU}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BENGALI SIGN CANDRABINDU}" !~ m/^<-Bengali>$/, 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/^<-Bengali>$/, q{Match unrelated inverted } ); ok( "\x{D1E8}\N{BENGALI SIGN CANDRABINDU}" =~ m//, q{Match unanchored } ); # Bopomofo ok( "\N{BOPOMOFO LETTER B}" =~ m/^$/, q{Match } ); ok( "\N{BOPOMOFO LETTER B}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BOPOMOFO LETTER B}" !~ m/^<-Bopomofo>$/, 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/^<-Bopomofo>$/, q{Match unrelated inverted } ); ok( "\x{B093}\N{BOPOMOFO LETTER B}" =~ m//, q{Match unanchored } ); # Buhid ok( "\N{BUHID LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{BUHID LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BUHID LETTER A}" !~ m/^<-Buhid>$/, 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/^<-Buhid>$/, q{Match unrelated inverted } ); ok( "\x{C682}\N{BUHID LETTER A}" =~ m//, q{Match unanchored } ); # CanadianAboriginal ok( "\N{CANADIAN SYLLABICS E}" =~ m/^$/, q{Match } ); ok( "\N{CANADIAN SYLLABICS E}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CANADIAN SYLLABICS E}" !~ m/^<-CanadianAboriginal>$/, 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/^<-CanadianAboriginal>$/, 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/^<-CanadianAboriginal>$/, q{Match related inverted } ); ok( "\x{888B}\x{9FA6}\N{CANADIAN SYLLABICS E}" =~ m//, q{Match unanchored } ); # Cherokee ok( "\N{CHEROKEE LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{CHEROKEE LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CHEROKEE LETTER A}" !~ m/^<-Cherokee>$/, 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/^<-Cherokee>$/, 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/^<-Cherokee>$/, q{Match related inverted } ); ok( "\x{8260}\x{9FA6}\N{CHEROKEE LETTER A}" =~ m//, q{Match unanchored } ); # Cyrillic ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" =~ m/^$/, q{Match } ); ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" !~ m/^<-Cyrillic>$/, 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/^<-Cyrillic>$/, 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/^<-Cyrillic>$/, q{Match related inverted } ); ok( "\x{B7DF}\x{D7A4}\N{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/^<-Deseret>$/, q{Match unrelated inverted } ); # Devanagari ok( "\N{DEVANAGARI SIGN CANDRABINDU}" =~ m/^$/, q{Match } ); ok( "\N{DEVANAGARI SIGN CANDRABINDU}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DEVANAGARI SIGN CANDRABINDU}" !~ m/^<-Devanagari>$/, 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/^<-Devanagari>$/, q{Match unrelated inverted } ); ok( "\x{D291}\N{DEVANAGARI SIGN CANDRABINDU}" =~ m//, q{Match unanchored } ); # Ethiopic ok( "\N{ETHIOPIC SYLLABLE HA}" =~ m/^$/, q{Match } ); ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<-Ethiopic>$/, 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/^<-Ethiopic>$/, q{Match unrelated inverted } ); ok( "\x{A9FA}\N{ETHIOPIC SYLLABLE HA}" =~ m//, q{Match unanchored } ); # Georgian ok( "\N{GEORGIAN CAPITAL LETTER AN}" =~ m/^$/, q{Match } ); ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<-Georgian>$/, 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/^<-Georgian>$/, q{Match unrelated inverted } ); ok( "\x{BBC9}\N{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/^<-Gothic>$/, q{Match unrelated inverted } ); # Greek ok( "\N{GREEK LETTER SMALL CAPITAL GAMMA}" =~ m/^$/, q{Match } ); ok( "\N{GREEK LETTER SMALL CAPITAL GAMMA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{GREEK LETTER SMALL CAPITAL GAMMA}" !~ m/^<-Greek>$/, q{Don't match inverted } ); ok( "\N{ETHIOPIC SYLLABLE KEE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{ETHIOPIC SYLLABLE KEE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{ETHIOPIC SYLLABLE KEE}" =~ m/^<-Greek>$/, q{Match unrelated inverted } ); ok( "\N{ETHIOPIC SYLLABLE KEE}\N{GREEK LETTER SMALL CAPITAL GAMMA}" =~ m//, q{Match unanchored } ); # Gujarati ok( "\N{GUJARATI SIGN CANDRABINDU}" =~ m/^$/, q{Match } ); ok( "\N{GUJARATI SIGN CANDRABINDU}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{GUJARATI SIGN CANDRABINDU}" !~ m/^<-Gujarati>$/, 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/^<-Gujarati>$/, q{Match unrelated inverted } ); ok( "\x{D108}\N{GUJARATI SIGN CANDRABINDU}" =~ m//, q{Match unanchored } ); # Gurmukhi ok( "\N{GURMUKHI SIGN BINDI}" =~ m/^$/, q{Match } ); ok( "\N{GURMUKHI SIGN BINDI}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{GURMUKHI SIGN BINDI}" !~ m/^<-Gurmukhi>$/, 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/^<-Gurmukhi>$/, q{Match unrelated inverted } ); ok( "\x{5E05}\N{GURMUKHI SIGN BINDI}" =~ m//, q{Match unanchored } ); # Han ok( "\N{CJK RADICAL REPEAT}" =~ m/^$/, q{Match } ); ok( "\N{CJK RADICAL REPEAT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CJK RADICAL REPEAT}" !~ m/^<-Han>$/, q{Don't match inverted } ); ok( "\N{CANADIAN SYLLABICS KAA}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{CANADIAN SYLLABICS KAA}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{CANADIAN SYLLABICS KAA}" =~ m/^<-Han>$/, q{Match unrelated inverted } ); ok( "\N{CANADIAN SYLLABICS KAA}\N{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/^<-Hangul>$/, 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/^<-Hangul>$/, q{Match unrelated inverted } ); ok( "\x{9583}\x{AC00}" =~ m//, q{Match unanchored } ); # Hanunoo ok( "\N{HANUNOO LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{HANUNOO LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HANUNOO LETTER A}" !~ m/^<-Hanunoo>$/, 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/^<-Hanunoo>$/, q{Match unrelated inverted } ); ok( "\x{7625}\N{HANUNOO LETTER A}" =~ m//, q{Match unanchored } ); # Hebrew ok( "\N{HEBREW LETTER ALEF}" =~ m/^$/, q{Match } ); ok( "\N{HEBREW LETTER ALEF}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HEBREW LETTER ALEF}" !~ m/^<-Hebrew>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE SSIT}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE SSIT}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE SSIT}" =~ m/^<-Hebrew>$/, q{Match unrelated inverted } ); ok( "\N{YI SYLLABLE SSIT}\N{HEBREW LETTER ALEF}" =~ m//, q{Match unanchored } ); # Hiragana ok( "\N{HIRAGANA LETTER SMALL A}" =~ m/^$/, q{Match } ); ok( "\N{HIRAGANA LETTER SMALL A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HIRAGANA LETTER SMALL A}" !~ m/^<-Hiragana>$/, q{Don't match inverted } ); ok( "\N{CANADIAN SYLLABICS Y}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{CANADIAN SYLLABICS Y}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{CANADIAN SYLLABICS Y}" =~ m/^<-Hiragana>$/, q{Match unrelated inverted } ); ok( "\N{CANADIAN SYLLABICS Y}\N{HIRAGANA LETTER SMALL A}" =~ m//, q{Match unanchored } ); # Inherited ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^$/, q{Match } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-Inherited>$/, 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/^<-Inherited>$/, q{Match unrelated inverted } ); ok( "\x{75FA}\N{COMBINING GRAVE ACCENT}" =~ m//, q{Match unanchored } ); # Kannada ok( "\N{KANNADA SIGN ANUSVARA}" =~ m/^$/, q{Match } ); ok( "\N{KANNADA SIGN ANUSVARA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KANNADA SIGN ANUSVARA}" !~ m/^<-Kannada>$/, 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/^<-Kannada>$/, q{Match unrelated inverted } ); ok( "\x{C1DF}\N{KANNADA SIGN ANUSVARA}" =~ m//, q{Match unanchored } ); # Katakana ok( "\N{KATAKANA LETTER SMALL A}" =~ m/^$/, q{Match } ); ok( "\N{KATAKANA LETTER SMALL A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KATAKANA LETTER SMALL A}" !~ m/^<-Katakana>$/, 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/^<-Katakana>$/, q{Match unrelated inverted } ); ok( "\x{177A}\N{KATAKANA LETTER SMALL A}" =~ m//, q{Match unanchored } ); # Khmer ok( "\N{KHMER LETTER KA}" =~ m/^$/, q{Match } ); ok( "\N{KHMER LETTER KA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KHMER LETTER KA}" !~ m/^<-Khmer>$/, q{Don't match inverted } ); ok( "\N{GEORGIAN LETTER QAR}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{GEORGIAN LETTER QAR}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{GEORGIAN LETTER QAR}" =~ m/^<-Khmer>$/, q{Match unrelated inverted } ); ok( "\N{GEORGIAN LETTER QAR}\N{KHMER LETTER KA}" =~ m//, q{Match unanchored } ); # Lao ok( "\N{LAO LETTER KO}" =~ m/^$/, q{Match } ); ok( "\N{LAO LETTER KO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LAO LETTER KO}" !~ m/^<-Lao>$/, 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/^<-Lao>$/, 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/^<-Lao>$/, q{Match related inverted } ); ok( "\x{3DA9}\x{3DA9}\N{LAO LETTER KO}" =~ m//, q{Match unanchored } ); # Latin ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-Latin>$/, 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/^<-Latin>$/, 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/^<-Latin>$/, q{Match related inverted } ); ok( "\x{C549}\x{C549}\N{LATIN CAPITAL LETTER A}" =~ m//, q{Match unanchored } ); # Malayalam ok( "\N{MALAYALAM SIGN ANUSVARA}" =~ m/^$/, q{Match } ); ok( "\N{MALAYALAM SIGN ANUSVARA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MALAYALAM SIGN ANUSVARA}" !~ m/^<-Malayalam>$/, 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/^<-Malayalam>$/, q{Match unrelated inverted } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-Malayalam>$/, q{Match related inverted } ); ok( "\x{625C}\N{COMBINING GRAVE ACCENT}\N{MALAYALAM SIGN ANUSVARA}" =~ m//, q{Match unanchored } ); # Mongolian ok( "\N{MONGOLIAN DIGIT ZERO}" =~ m/^$/, q{Match } ); ok( "\N{MONGOLIAN DIGIT ZERO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MONGOLIAN DIGIT ZERO}" !~ m/^<-Mongolian>$/, 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/^<-Mongolian>$/, q{Match unrelated inverted } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-Mongolian>$/, q{Match related inverted } ); ok( "\x{5F93}\N{COMBINING GRAVE ACCENT}\N{MONGOLIAN DIGIT ZERO}" =~ m//, q{Match unanchored } ); # Myanmar ok( "\N{MYANMAR LETTER KA}" =~ m/^$/, q{Match } ); ok( "\N{MYANMAR LETTER KA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MYANMAR LETTER KA}" !~ m/^<-Myanmar>$/, 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/^<-Myanmar>$/, q{Match unrelated inverted } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-Myanmar>$/, q{Match related inverted } ); ok( "\x{649A}\N{COMBINING GRAVE ACCENT}\N{MYANMAR LETTER KA}" =~ m//, q{Match unanchored } ); # Ogham ok( "\N{OGHAM LETTER BEITH}" =~ m/^$/, q{Match } ); ok( "\N{OGHAM LETTER BEITH}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{OGHAM LETTER BEITH}" !~ m/^<-Ogham>$/, q{Don't match inverted } ); ok( "\N{KATAKANA LETTER KA}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{KATAKANA LETTER KA}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{KATAKANA LETTER KA}" =~ m/^<-Ogham>$/, q{Match unrelated inverted } ); ok( "\N{KATAKANA LETTER KA}\N{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/^<-OldItalic>$/, q{Match unrelated inverted } ); # Oriya ok( "\N{ORIYA SIGN CANDRABINDU}" =~ m/^$/, q{Match } ); ok( "\N{ORIYA SIGN CANDRABINDU}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ORIYA SIGN CANDRABINDU}" !~ m/^<-Oriya>$/, 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/^<-Oriya>$/, q{Match unrelated inverted } ); ok( "\x{4292}\N{ORIYA SIGN CANDRABINDU}" =~ m//, q{Match unanchored } ); # Runic ok( "\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/^$/, q{Match } ); ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<-Runic>$/, 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/^<-Runic>$/, q{Match unrelated inverted } ); ok( "\x{9857}\N{RUNIC LETTER FEHU FEOH FE F}" =~ m//, q{Match unanchored } ); # Sinhala ok( "\N{SINHALA SIGN ANUSVARAYA}" =~ m/^$/, q{Match } ); ok( "\N{SINHALA SIGN ANUSVARAYA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SINHALA SIGN ANUSVARAYA}" !~ m/^<-Sinhala>$/, 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/^<-Sinhala>$/, q{Match unrelated inverted } ); ok( "\N{YI RADICAL QOT}" !~ m/^$/, q{Don't match related } ); ok( "\N{YI RADICAL QOT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{YI RADICAL QOT}" =~ m/^<-Sinhala>$/, q{Match related inverted } ); ok( "\x{5DF5}\N{YI RADICAL QOT}\N{SINHALA SIGN ANUSVARAYA}" =~ m//, q{Match unanchored } ); # Syriac ok( "\N{SYRIAC LETTER ALAPH}" =~ m/^$/, q{Match } ); ok( "\N{SYRIAC LETTER ALAPH}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SYRIAC LETTER ALAPH}" !~ m/^<-Syriac>$/, 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/^<-Syriac>$/, q{Match unrelated inverted } ); ok( "\N{YI RADICAL QOT}" !~ m/^$/, q{Don't match related } ); ok( "\N{YI RADICAL QOT}" =~ m/^.$/, q{Match related negated } ); ok( "\N{YI RADICAL QOT}" =~ m/^<-Syriac>$/, q{Match related inverted } ); ok( "\x{57F0}\N{YI RADICAL QOT}\N{SYRIAC LETTER ALAPH}" =~ m//, q{Match unanchored } ); # Tagalog ok( "\N{TAGALOG LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{TAGALOG LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TAGALOG LETTER A}" !~ m/^<-Tagalog>$/, 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/^<-Tagalog>$/, q{Match unrelated inverted } ); ok( "\x{3DE8}\N{TAGALOG LETTER A}" =~ m//, q{Match unanchored } ); # Tagbanwa ok( "\N{TAGBANWA LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{TAGBANWA LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TAGBANWA LETTER A}" !~ m/^<-Tagbanwa>$/, q{Don't match inverted } ); ok( "\N{CHEROKEE LETTER TLV}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{CHEROKEE LETTER TLV}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{CHEROKEE LETTER TLV}" =~ m/^<-Tagbanwa>$/, q{Match unrelated inverted } ); ok( "\N{CHEROKEE LETTER TLV}\N{TAGBANWA LETTER A}" =~ m//, q{Match unanchored } ); # Tamil ok( "\N{TAMIL SIGN ANUSVARA}" =~ m/^$/, q{Match } ); ok( "\N{TAMIL SIGN ANUSVARA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TAMIL SIGN ANUSVARA}" !~ m/^<-Tamil>$/, 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/^<-Tamil>$/, q{Match unrelated inverted } ); ok( "\x{8DF2}\N{TAMIL SIGN ANUSVARA}" =~ m//, q{Match unanchored } ); # Telugu ok( "\N{TELUGU SIGN CANDRABINDU}" =~ m/^$/, q{Match } ); ok( "\N{TELUGU SIGN CANDRABINDU}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TELUGU SIGN CANDRABINDU}" !~ m/^<-Telugu>$/, 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/^<-Telugu>$/, q{Match unrelated inverted } ); ok( "\x{8088}\N{TELUGU SIGN CANDRABINDU}" =~ m//, q{Match unanchored } ); # Thaana ok( "\N{THAANA LETTER HAA}" =~ m/^$/, q{Match } ); ok( "\N{THAANA LETTER HAA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{THAANA LETTER HAA}" !~ m/^<-Thaana>$/, 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/^<-Thaana>$/, q{Match unrelated inverted } ); ok( "\x{5240}\N{THAANA LETTER HAA}" =~ m//, q{Match unanchored } ); # Thai ok( "\N{THAI CHARACTER KO KAI}" =~ m/^$/, q{Match } ); ok( "\N{THAI CHARACTER KO KAI}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{THAI CHARACTER KO KAI}" !~ m/^<-Thai>$/, 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/^<-Thai>$/, q{Match unrelated inverted } ); ok( "\x{CAD3}\N{THAI CHARACTER KO KAI}" =~ m//, q{Match unanchored } ); # Tibetan ok( "\N{TIBETAN SYLLABLE OM}" =~ m/^$/, q{Match } ); ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<-Tibetan>$/, 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/^<-Tibetan>$/, q{Match unrelated inverted } ); ok( "\x{8557}\N{TIBETAN SYLLABLE OM}" =~ m//, q{Match unanchored } ); # Yi ok( "\N{YI SYLLABLE IT}" =~ m/^$/, q{Match } ); ok( "\N{YI SYLLABLE IT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{YI SYLLABLE IT}" !~ m/^<-Yi>$/, 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/^<-Yi>$/, q{Match unrelated inverted } ); ok( "\x{BCD0}\N{YI SYLLABLE IT}" =~ m//, q{Match unanchored } ); # ASCIIHexDigit ok( "\N{DIGIT ZERO}" =~ m/^$/, q{Match } ); ok( "\N{DIGIT ZERO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DIGIT ZERO}" !~ m/^<-ASCIIHexDigit>$/, 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/^<-ASCIIHexDigit>$/, q{Match unrelated inverted } ); ok( "\x{53BA}\N{DIGIT ZERO}" =~ m//, q{Match unanchored } ); # Dash ok( "\N{HYPHEN-MINUS}" =~ m/^$/, q{Match } ); ok( "\N{HYPHEN-MINUS}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HYPHEN-MINUS}" !~ m/^<-Dash>$/, 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/^<-Dash>$/, q{Match unrelated inverted } ); ok( "\x{53F7}\N{HYPHEN-MINUS}" =~ m//, q{Match unanchored } ); # Diacritic ok( "\N{MODIFIER LETTER CAPITAL A}" =~ m/^$/, q{Match } ); ok( "\N{MODIFIER LETTER CAPITAL A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MODIFIER LETTER CAPITAL A}" !~ m/^<-Diacritic>$/, 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/^<-Diacritic>$/, q{Match unrelated inverted } ); ok( "\x{1BCD}\N{MODIFIER LETTER CAPITAL A}" =~ m//, q{Match unanchored } ); # Extender ok( "\N{MIDDLE DOT}" =~ m/^$/, q{Match } ); ok( "\N{MIDDLE DOT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MIDDLE DOT}" !~ m/^<-Extender>$/, 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/^<-Extender>$/, q{Match unrelated inverted } ); ok( "\x{3A18}\N{MIDDLE DOT}" =~ m//, q{Match unanchored } ); # GraphemeLink ok( "\N{COMBINING GRAPHEME JOINER}" =~ m/^$/, q{Match } ); ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^<-GraphemeLink>$/, 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/^<-GraphemeLink>$/, q{Match unrelated inverted } ); ok( "\x{4989}\N{COMBINING GRAPHEME JOINER}" =~ m//, q{Match unanchored } ); # HexDigit ok( "\N{DIGIT ZERO}" =~ m/^$/, q{Match } ); ok( "\N{DIGIT ZERO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DIGIT ZERO}" !~ m/^<-HexDigit>$/, 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/^<-HexDigit>$/, q{Match unrelated inverted } ); ok( "\x{6292}\N{DIGIT ZERO}" =~ m//, q{Match unanchored } ); # Hyphen ok( "\N{KATAKANA MIDDLE DOT}" =~ m/^$/, q{Match } ); ok( "\N{KATAKANA MIDDLE DOT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KATAKANA MIDDLE DOT}" !~ m/^<-Hyphen>$/, q{Don't match inverted } ); ok( "\N{BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE}" =~ m/^<-Hyphen>$/, q{Match unrelated inverted } ); ok( "\N{BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE}\N{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/^<-Ideographic>$/, 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/^<-Ideographic>$/, q{Match unrelated inverted } ); ok( "\x{9FA6}\x{8AB0}" =~ m//, q{Match unanchored } ); # IDSBinaryOperator ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/^$/, q{Match } ); ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<-IDSBinaryOperator>$/, 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/^<-IDSBinaryOperator>$/, q{Match unrelated inverted } ); ok( "\x{59E9}\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m//, q{Match unanchored } ); # IDSTrinaryOperator ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" =~ m/^$/, q{Match } ); ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" !~ m/^<-IDSTrinaryOperator>$/, 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/^<-IDSTrinaryOperator>$/, q{Match unrelated inverted } ); ok( "\x{9224}\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" =~ m//, q{Match unanchored } ); # JoinControl ok( "\N{ZERO WIDTH NON-JOINER}" =~ m/^$/, q{Match } ); ok( "\N{ZERO WIDTH NON-JOINER}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ZERO WIDTH NON-JOINER}" !~ m/^<-JoinControl>$/, q{Don't match inverted } ); ok( "\N{BENGALI LETTER DDHA}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{BENGALI LETTER DDHA}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{BENGALI LETTER DDHA}" =~ m/^<-JoinControl>$/, q{Match unrelated inverted } ); ok( "\N{BENGALI LETTER DDHA}\N{ZERO WIDTH NON-JOINER}" =~ m//, q{Match unanchored } ); # LogicalOrderException ok( "\N{THAI CHARACTER SARA E}" =~ m/^$/, q{Match } ); ok( "\N{THAI CHARACTER SARA E}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{THAI CHARACTER SARA E}" !~ m/^<-LogicalOrderException>$/, 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/^<-LogicalOrderException>$/, 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/^<-LogicalOrderException>$/, q{Match related inverted } ); ok( "\x{857B}\x{857B}\N{THAI CHARACTER SARA E}" =~ m//, q{Match unanchored } ); # NoncharacterCodePoint ok( "\N{LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE}" =~ m/^<-NoncharacterCodePoint>$/, q{Match unrelated inverted } ); ok( "\N{ARABIC-INDIC DIGIT ZERO}" !~ m/^$/, q{Don't match related } ); ok( "\N{ARABIC-INDIC DIGIT ZERO}" =~ m/^.$/, q{Match related negated } ); ok( "\N{ARABIC-INDIC DIGIT ZERO}" =~ m/^<-NoncharacterCodePoint>$/, q{Match related inverted } ); # OtherAlphabetic ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" =~ m/^$/, q{Match } ); ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" !~ m/^<-OtherAlphabetic>$/, 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/^<-OtherAlphabetic>$/, q{Match unrelated inverted } ); ok( "\x{413C}\N{COMBINING GREEK YPOGEGRAMMENI}" =~ m//, q{Match unanchored } ); # OtherDefaultIgnorableCodePoint ok( "\N{HANGUL FILLER}" =~ m/^$/, q{Match } ); ok( "\N{HANGUL FILLER}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HANGUL FILLER}" !~ m/^<-OtherDefaultIgnorableCodePoint>$/, q{Don't match inverted } ); ok( "\N{VERTICAL BAR DOUBLE LEFT TURNSTILE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{VERTICAL BAR DOUBLE LEFT TURNSTILE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{VERTICAL BAR DOUBLE LEFT TURNSTILE}" =~ m/^<-OtherDefaultIgnorableCodePoint>$/, q{Match unrelated inverted } ); ok( "\N{VERTICAL BAR DOUBLE LEFT TURNSTILE}\N{HANGUL FILLER}" =~ m//, q{Match unanchored } ); # OtherGraphemeExtend ok( "\N{BENGALI VOWEL SIGN AA}" =~ m/^$/, q{Match } ); ok( "\N{BENGALI VOWEL SIGN AA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BENGALI VOWEL SIGN AA}" !~ m/^<-OtherGraphemeExtend>$/, q{Don't match inverted } ); ok( "\N{APL FUNCTIONAL SYMBOL EPSILON UNDERBAR}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{APL FUNCTIONAL SYMBOL EPSILON UNDERBAR}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{APL FUNCTIONAL SYMBOL EPSILON UNDERBAR}" =~ m/^<-OtherGraphemeExtend>$/, q{Match unrelated inverted } ); ok( "\N{APL FUNCTIONAL SYMBOL EPSILON UNDERBAR}\N{BENGALI VOWEL SIGN AA}" =~ m//, q{Match unanchored } ); # OtherLowercase ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^$/, q{Match } ); ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<-OtherLowercase>$/, q{Don't match inverted } ); ok( "\N{HANGUL LETTER NIEUN-CIEUC}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{HANGUL LETTER NIEUN-CIEUC}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{HANGUL LETTER NIEUN-CIEUC}" =~ m/^<-OtherLowercase>$/, q{Match unrelated inverted } ); ok( "\N{HANGUL LETTER NIEUN-CIEUC}\N{MODIFIER LETTER SMALL H}" =~ m//, q{Match unanchored } ); # OtherMath ok( "\N{LEFT PARENTHESIS}" =~ m/^$/, q{Match } ); ok( "\N{LEFT PARENTHESIS}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LEFT PARENTHESIS}" !~ m/^<-OtherMath>$/, 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/^<-OtherMath>$/, q{Match unrelated inverted } ); ok( "\x{B43A}\N{LEFT PARENTHESIS}" =~ m//, q{Match unanchored } ); # OtherUppercase ok( "\N{ROMAN NUMERAL ONE}" =~ m/^$/, q{Match } ); ok( "\N{ROMAN NUMERAL ONE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ROMAN NUMERAL ONE}" !~ m/^<-OtherUppercase>$/, 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/^<-OtherUppercase>$/, q{Match unrelated inverted } ); ok( "\x{D246}\N{ROMAN NUMERAL ONE}" =~ m//, q{Match unanchored } ); # QuotationMark ok( "\N{QUOTATION MARK}" =~ m/^$/, q{Match } ); ok( "\N{QUOTATION MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{QUOTATION MARK}" !~ m/^<-QuotationMark>$/, 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/^<-QuotationMark>$/, q{Match unrelated inverted } ); ok( "\x{C890}\N{QUOTATION MARK}" =~ m//, q{Match unanchored } ); # Radical ok( "\N{CJK RADICAL REPEAT}" =~ m/^$/, q{Match } ); ok( "\N{CJK RADICAL REPEAT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CJK RADICAL REPEAT}" !~ m/^<-Radical>$/, q{Don't match inverted } ); ok( "\N{HANGUL JONGSEONG CHIEUCH}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{HANGUL JONGSEONG CHIEUCH}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{HANGUL JONGSEONG CHIEUCH}" =~ m/^<-Radical>$/, q{Match unrelated inverted } ); ok( "\N{HANGUL JONGSEONG CHIEUCH}\N{CJK RADICAL REPEAT}" =~ m//, q{Match unanchored } ); # SoftDotted ok( "\N{LATIN SMALL LETTER I}" =~ m/^$/, q{Match } ); ok( "\N{LATIN SMALL LETTER I}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN SMALL LETTER I}" !~ m/^<-SoftDotted>$/, 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/^<-SoftDotted>$/, q{Match unrelated inverted } ); ok( "\N{DOLLAR SIGN}" !~ m/^$/, q{Don't match related } ); ok( "\N{DOLLAR SIGN}" =~ m/^.$/, q{Match related negated } ); ok( "\N{DOLLAR SIGN}" =~ m/^<-SoftDotted>$/, q{Match related inverted } ); ok( "\x{ADEF}\N{DOLLAR SIGN}\N{LATIN SMALL LETTER I}" =~ m//, q{Match unanchored } ); # TerminalPunctuation ok( "\N{EXCLAMATION MARK}" =~ m/^$/, q{Match } ); ok( "\N{EXCLAMATION MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{EXCLAMATION MARK}" !~ m/^<-TerminalPunctuation>$/, 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/^<-TerminalPunctuation>$/, q{Match unrelated inverted } ); ok( "\x{3C9D}\N{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/^<-UnifiedIdeograph>$/, 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/^<-UnifiedIdeograph>$/, q{Match unrelated inverted } ); ok( "\x{9FA6}\x{7896}" =~ m//, q{Match unanchored } ); # WhiteSpace ok( "\N{CHARACTER TABULATION}" =~ m/^$/, q{Match } ); ok( "\N{CHARACTER TABULATION}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CHARACTER TABULATION}" !~ m/^<-WhiteSpace>$/, 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/^<-WhiteSpace>$/, q{Match unrelated inverted } ); ok( "\x{6358}\N{CHARACTER TABULATION}" =~ m//, q{Match unanchored } ); # Alphabetic # Lu + Ll + Lt + Lm + Lo + OtherAlphabetic ok( "\N{DEVANAGARI SIGN CANDRABINDU}" =~ m/^$/, q{Match (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok( "\N{DEVANAGARI SIGN CANDRABINDU}" !~ m/^.$/, q{Don't match negated (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok( "\N{DEVANAGARI SIGN CANDRABINDU}" !~ m/^<-Alphabetic>$/, 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/^<-Alphabetic>$/, q{Match unrelated inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); ok( "\x{0855}\N{DEVANAGARI SIGN CANDRABINDU}" =~ m//, q{Match unanchored (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} ); # Lowercase # Ll + OtherLowercase ok( "\N{LATIN SMALL LETTER A}" =~ m/^$/, q{Match (Ll + OtherLowercase)} ); ok( "\N{LATIN SMALL LETTER A}" !~ m/^.$/, q{Don't match negated (Ll + OtherLowercase)} ); ok( "\N{LATIN SMALL LETTER A}" !~ m/^<-Lowercase>$/, 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/^<-Lowercase>$/, 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/^<-Lowercase>$/, q{Match related inverted (Ll + OtherLowercase)} ); ok( "\x{6220}\x{6220}\N{LATIN SMALL LETTER A}" =~ m//, q{Match unanchored (Ll + OtherLowercase)} ); # Uppercase # Lu + OtherUppercase ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^$/, q{Match (Lu + OtherUppercase)} ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^.$/, q{Don't match negated (Lu + OtherUppercase)} ); ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-Uppercase>$/, 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/^<-Uppercase>$/, q{Match unrelated inverted (Lu + OtherUppercase)} ); ok( "\x{C080}\N{LATIN CAPITAL LETTER A}" =~ m//, q{Match unanchored (Lu + OtherUppercase)} ); # Math # Sm + OtherMath ok( "\N{LEFT PARENTHESIS}" =~ m/^$/, q{Match (Sm + OtherMath)} ); ok( "\N{LEFT PARENTHESIS}" !~ m/^.$/, q{Don't match negated (Sm + OtherMath)} ); ok( "\N{LEFT PARENTHESIS}" !~ m/^<-Math>$/, 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/^<-Math>$/, q{Match unrelated inverted (Sm + OtherMath)} ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^$/, q{Don't match related (Sm + OtherMath)} ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^.$/, q{Match related negated (Sm + OtherMath)} ); ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-Math>$/, q{Match related inverted (Sm + OtherMath)} ); ok( "\x{D4D2}\N{COMBINING GRAVE ACCENT}\N{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/^<-ID_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/^<-ID_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/^<-ID_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/^<-ID_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/^<-Any>$/, 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/^<-Assigned>$/, 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/^<-Assigned>$/, 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/^<-Unassigned>$/, q{Don't match inverted (Synonym for \p{Cn})} ); ok( "\N{RIGHT OUTER JOIN}" !~ m/^$/, q{Don't match unrelated (Synonym for \p{Cn})} ); ok( "\N{RIGHT OUTER JOIN}" =~ m/^.$/, q{Match unrelated negated (Synonym for \p{Cn})} ); ok( "\N{RIGHT OUTER JOIN}" =~ m/^<-Unassigned>$/, q{Match unrelated inverted (Synonym for \p{Cn})} ); ok( "\N{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/^<-Common>$/, q{Don't match inverted (Codepoint not explicitly assigned to a script)} ); ok( "\N{KANNADA SIGN ANUSVARA}" !~ m/^$/, q{Don't match unrelated (Codepoint not explicitly assigned to a script)} ); ok( "\N{KANNADA SIGN ANUSVARA}" =~ m/^.$/, q{Match unrelated negated (Codepoint not explicitly assigned to a script)} ); ok( "\N{KANNADA SIGN ANUSVARA}" =~ m/^<-Common>$/, q{Match unrelated inverted (Codepoint not explicitly assigned to a script)} ); ok( "\N{KHMER VOWEL INHERENT AQ}" !~ m/^$/, q{Don't match related (Codepoint not explicitly assigned to a script)} ); ok( "\N{KHMER VOWEL INHERENT AQ}" =~ m/^.$/, q{Match related negated (Codepoint not explicitly assigned to a script)} ); ok( "\N{KHMER VOWEL INHERENT AQ}" =~ m/^<-Common>$/, q{Match related inverted (Codepoint not explicitly assigned to a script)} ); ok( "\N{KANNADA SIGN ANUSVARA}\N{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/^<-InAlphabeticPresentationForms>$/, q{Match unrelated inverted } ); # InArabic ok( "\N{ARABIC NUMBER SIGN}" =~ m/^$/, q{Match } ); ok( "\N{ARABIC NUMBER SIGN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ARABIC NUMBER SIGN}" !~ m/^<-InArabic>$/, 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/^<-InArabic>$/, q{Match unrelated inverted } ); ok( "\x{7315}\N{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/^<-InArabicPresentationFormsA>$/, 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/^<-InArabicPresentationFormsB>$/, q{Match unrelated inverted } ); # InArmenian ok( "\x{0530}" =~ m/^$/, q{Match } ); ok( "\x{0530}" !~ m/^.$/, q{Don't match negated } ); ok( "\x{0530}" !~ m/^<-InArmenian>$/, 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/^<-InArmenian>$/, q{Match unrelated inverted } ); ok( "\x{3B0D}\x{0530}" =~ m//, q{Match unanchored } ); # InArrows ok( "\N{LEFTWARDS ARROW}" =~ m/^$/, q{Match } ); ok( "\N{LEFTWARDS ARROW}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LEFTWARDS ARROW}" !~ m/^<-InArrows>$/, 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/^<-InArrows>$/, q{Match unrelated inverted } ); ok( "\x{C401}\N{LEFTWARDS ARROW}" =~ m//, q{Match unanchored } ); # InBasicLatin ok( "\N{NULL}" =~ m/^$/, q{Match } ); ok( "\N{NULL}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{NULL}" !~ m/^<-InBasicLatin>$/, 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/^<-InBasicLatin>$/, q{Match unrelated inverted } ); ok( "\x{46EA}\N{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/^<-InBengali>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE HMY}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE HMY}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE HMY}" =~ m/^<-InBengali>$/, q{Match unrelated inverted } ); ok( "\N{YI SYLLABLE HMY}\x{0980}" =~ m//, q{Match unanchored } ); # InBlockElements ok( "\N{UPPER HALF BLOCK}" =~ m/^$/, q{Match } ); ok( "\N{UPPER HALF BLOCK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{UPPER HALF BLOCK}" !~ m/^<-InBlockElements>$/, 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/^<-InBlockElements>$/, q{Match unrelated inverted } ); ok( "\x{5F41}\N{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/^<-InBopomofo>$/, 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/^<-InBopomofo>$/, q{Match unrelated inverted } ); ok( "\x{9F8E}\x{3100}" =~ m//, q{Match unanchored } ); # InBopomofoExtended ok( "\N{BOPOMOFO LETTER BU}" =~ m/^$/, q{Match } ); ok( "\N{BOPOMOFO LETTER BU}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BOPOMOFO LETTER BU}" !~ m/^<-InBopomofoExtended>$/, 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/^<-InBopomofoExtended>$/, q{Match unrelated inverted } ); ok( "\x{43A6}\N{BOPOMOFO LETTER BU}" =~ m//, q{Match unanchored } ); # InBoxDrawing ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" =~ m/^$/, q{Match } ); ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" !~ m/^<-InBoxDrawing>$/, 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/^<-InBoxDrawing>$/, q{Match unrelated inverted } ); ok( "\x{7865}\N{BOX DRAWINGS LIGHT HORIZONTAL}" =~ m//, q{Match unanchored } ); # InBraillePatterns ok( "\N{BRAILLE PATTERN BLANK}" =~ m/^$/, q{Match } ); ok( "\N{BRAILLE PATTERN BLANK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BRAILLE PATTERN BLANK}" !~ m/^<-InBraillePatterns>$/, q{Don't match inverted } ); ok( "\N{THAI CHARACTER KHO KHAI}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{THAI CHARACTER KHO KHAI}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{THAI CHARACTER KHO KHAI}" =~ m/^<-InBraillePatterns>$/, q{Match unrelated inverted } ); ok( "\N{THAI CHARACTER KHO KHAI}\N{BRAILLE PATTERN BLANK}" =~ m//, q{Match unanchored } ); # InBuhid ok( "\N{BUHID LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{BUHID LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BUHID LETTER A}" !~ m/^<-InBuhid>$/, 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/^<-InBuhid>$/, q{Match unrelated inverted } ); ok( "\x{D208}\N{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/^<-InByzantineMusicalSymbols>$/, q{Match unrelated inverted } ); # InCJKCompatibility ok( "\N{SQUARE APAATO}" =~ m/^$/, q{Match } ); ok( "\N{SQUARE APAATO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SQUARE APAATO}" !~ m/^<-InCJKCompatibility>$/, 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/^<-InCJKCompatibility>$/, q{Match unrelated inverted } ); ok( "\x{B8A5}\N{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/^<-InCJKCompatibilityForms>$/, 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/^<-InCJKCompatibilityIdeographs>$/, q{Match unrelated inverted } ); # InCJKCompatibilityIdeographsSupplement ok( "\N{CANADIAN SYLLABICS NUNAVIK HO}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{CANADIAN SYLLABICS NUNAVIK HO}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{CANADIAN SYLLABICS NUNAVIK HO}" =~ m/^<-InCJKCompatibilityIdeographsSupplement>$/, q{Match unrelated inverted } ); # InCJKRadicalsSupplement ok( "\N{CJK RADICAL REPEAT}" =~ m/^$/, q{Match } ); ok( "\N{CJK RADICAL REPEAT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CJK RADICAL REPEAT}" !~ m/^<-InCJKRadicalsSupplement>$/, 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/^<-InCJKRadicalsSupplement>$/, q{Match unrelated inverted } ); ok( "\x{37B4}\N{CJK RADICAL REPEAT}" =~ m//, q{Match unanchored } ); # InCJKSymbolsAndPunctuation ok( "\N{IDEOGRAPHIC SPACE}" =~ m/^$/, q{Match } ); ok( "\N{IDEOGRAPHIC SPACE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{IDEOGRAPHIC SPACE}" !~ m/^<-InCJKSymbolsAndPunctuation>$/, 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/^<-InCJKSymbolsAndPunctuation>$/, q{Match unrelated inverted } ); ok( "\x{80AA}\N{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/^<-InCJKUnifiedIdeographs>$/, 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/^<-InCJKUnifiedIdeographs>$/, 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/^<-InCJKUnifiedIdeographsExtensionA>$/, q{Don't match inverted } ); ok( "\N{SQUARE HOORU}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{SQUARE HOORU}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{SQUARE HOORU}" =~ m/^<-InCJKUnifiedIdeographsExtensionA>$/, q{Match unrelated inverted } ); ok( "\N{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/^<-InCJKUnifiedIdeographsExtensionB>$/, q{Match unrelated inverted } ); # InCherokee ok( "\N{CHEROKEE LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{CHEROKEE LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CHEROKEE LETTER A}" !~ m/^<-InCherokee>$/, 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/^<-InCherokee>$/, q{Match unrelated inverted } ); ok( "\x{985F}\N{CHEROKEE LETTER A}" =~ m//, q{Match unanchored } ); # InCombiningDiacriticalMarks ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^$/, q{Match } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-InCombiningDiacriticalMarks>$/, 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/^<-InCombiningDiacriticalMarks>$/, q{Match unrelated inverted } ); ok( "\x{76DA}\N{COMBINING GRAVE ACCENT}" =~ m//, q{Match unanchored } ); # InCombiningDiacriticalMarksforSymbols ok( "\N{COMBINING LEFT HARPOON ABOVE}" =~ m/^$/, q{Match } ); ok( "\N{COMBINING LEFT HARPOON ABOVE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{COMBINING LEFT HARPOON ABOVE}" !~ m/^<-InCombiningDiacriticalMarksforSymbols>$/, 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/^<-InCombiningDiacriticalMarksforSymbols>$/, q{Match unrelated inverted } ); ok( "\x{7345}\N{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/^<-InCombiningHalfMarks>$/, q{Match unrelated inverted } ); # InControlPictures ok( "\N{SYMBOL FOR NULL}" =~ m/^$/, q{Match } ); ok( "\N{SYMBOL FOR NULL}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SYMBOL FOR NULL}" !~ m/^<-InControlPictures>$/, 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/^<-InControlPictures>$/, q{Match unrelated inverted } ); ok( "\x{BCE2}\N{SYMBOL FOR NULL}" =~ m//, q{Match unanchored } ); # InCurrencySymbols ok( "\N{EURO-CURRENCY SIGN}" =~ m/^$/, q{Match } ); ok( "\N{EURO-CURRENCY SIGN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{EURO-CURRENCY SIGN}" !~ m/^<-InCurrencySymbols>$/, 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/^<-InCurrencySymbols>$/, q{Match unrelated inverted } ); ok( "\x{8596}\N{EURO-CURRENCY SIGN}" =~ m//, q{Match unanchored } ); # InCyrillic ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" =~ m/^$/, q{Match } ); ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" !~ m/^<-InCyrillic>$/, 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/^<-InCyrillic>$/, q{Match unrelated inverted } ); ok( "\x{51B2}\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" =~ m//, q{Match unanchored } ); # InCyrillicSupplementary ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" =~ m/^$/, q{Match } ); ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" !~ m/^<-InCyrillicSupplementary>$/, 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/^<-InCyrillicSupplementary>$/, q{Match unrelated inverted } ); ok( "\x{7BD9}\N{CYRILLIC CAPITAL LETTER KOMI DE}" =~ m//, q{Match unanchored } ); # InDeseret ok( "\N{TAMIL DIGIT FOUR}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{TAMIL DIGIT FOUR}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{TAMIL DIGIT FOUR}" =~ m/^<-InDeseret>$/, q{Match unrelated inverted } ); # InDevanagari ok( "\x{0900}" =~ m/^$/, q{Match } ); ok( "\x{0900}" !~ m/^.$/, q{Don't match negated } ); ok( "\x{0900}" !~ m/^<-InDevanagari>$/, 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/^<-InDevanagari>$/, 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/^<-InDingbats>$/, 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/^<-InDingbats>$/, q{Match unrelated inverted } ); ok( "\x{D7A8}\x{2700}" =~ m//, q{Match unanchored } ); # InEnclosedAlphanumerics ok( "\N{CIRCLED DIGIT ONE}" =~ m/^$/, q{Match } ); ok( "\N{CIRCLED DIGIT ONE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{CIRCLED DIGIT ONE}" !~ m/^<-InEnclosedAlphanumerics>$/, 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/^<-InEnclosedAlphanumerics>$/, q{Match unrelated inverted } ); ok( "\x{C3A2}\N{CIRCLED DIGIT ONE}" =~ m//, q{Match unanchored } ); # InEnclosedCJKLettersAndMonths ok( "\N{PARENTHESIZED HANGUL KIYEOK}" =~ m/^$/, q{Match } ); ok( "\N{PARENTHESIZED HANGUL KIYEOK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{PARENTHESIZED HANGUL KIYEOK}" !~ m/^<-InEnclosedCJKLettersAndMonths>$/, 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/^<-InEnclosedCJKLettersAndMonths>$/, q{Match unrelated inverted } ); ok( "\x{5B44}\N{PARENTHESIZED HANGUL KIYEOK}" =~ m//, q{Match unanchored } ); # InEthiopic ok( "\N{ETHIOPIC SYLLABLE HA}" =~ m/^$/, q{Match } ); ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<-InEthiopic>$/, 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/^<-InEthiopic>$/, q{Match unrelated inverted } ); ok( "\x{BBAE}\N{ETHIOPIC SYLLABLE HA}" =~ m//, q{Match unanchored } ); # InGeneralPunctuation ok( "\N{EN QUAD}" =~ m/^$/, q{Match } ); ok( "\N{EN QUAD}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{EN QUAD}" !~ m/^<-InGeneralPunctuation>$/, q{Don't match inverted } ); ok( "\N{MEDIUM RIGHT PARENTHESIS ORNAMENT}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{MEDIUM RIGHT PARENTHESIS ORNAMENT}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{MEDIUM RIGHT PARENTHESIS ORNAMENT}" =~ m/^<-InGeneralPunctuation>$/, q{Match unrelated inverted } ); ok( "\N{MEDIUM RIGHT PARENTHESIS ORNAMENT}\N{EN QUAD}" =~ m//, q{Match unanchored } ); # InGeometricShapes ok( "\N{BLACK SQUARE}" =~ m/^$/, q{Match } ); ok( "\N{BLACK SQUARE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BLACK SQUARE}" !~ m/^<-InGeometricShapes>$/, 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/^<-InGeometricShapes>$/, q{Match unrelated inverted } ); ok( "\x{B700}\N{BLACK SQUARE}" =~ m//, q{Match unanchored } ); # InGeorgian ok( "\N{GEORGIAN CAPITAL LETTER AN}" =~ m/^$/, q{Match } ); ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<-InGeorgian>$/, q{Don't match inverted } ); ok( "\N{IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE}" =~ m/^<-InGeorgian>$/, q{Match unrelated inverted } ); ok( "\N{IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE}\N{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/^<-InGothic>$/, q{Match unrelated inverted } ); # InGreekExtended ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" =~ m/^$/, q{Match } ); ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" !~ m/^<-InGreekExtended>$/, 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/^<-InGreekExtended>$/, q{Match unrelated inverted } ); ok( "\x{B9B7}\N{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/^<-InGreekAndCoptic>$/, 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/^<-InGreekAndCoptic>$/, 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/^<-InGujarati>$/, 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/^<-InGujarati>$/, 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/^<-InGurmukhi>$/, 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/^<-InGurmukhi>$/, 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/^<-InHalfwidthAndFullwidthForms>$/, q{Match unrelated inverted } ); # InHangulCompatibilityJamo ok( "\x{3130}" =~ m/^$/, q{Match } ); ok( "\x{3130}" !~ m/^.$/, q{Don't match negated } ); ok( "\x{3130}" !~ m/^<-InHangulCompatibilityJamo>$/, q{Don't match inverted } ); ok( "\N{MEASURED BY}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{MEASURED BY}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{MEASURED BY}" =~ m/^<-InHangulCompatibilityJamo>$/, q{Match unrelated inverted } ); ok( "\N{MEASURED BY}\x{3130}" =~ m//, q{Match unanchored } ); # InHangulJamo ok( "\N{HANGUL CHOSEONG KIYEOK}" =~ m/^$/, q{Match } ); ok( "\N{HANGUL CHOSEONG KIYEOK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HANGUL CHOSEONG KIYEOK}" !~ m/^<-InHangulJamo>$/, 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/^<-InHangulJamo>$/, q{Match unrelated inverted } ); ok( "\x{3B72}\N{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/^<-InHangulSyllables>$/, 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/^<-InHangulSyllables>$/, q{Match unrelated inverted } ); ok( "\x{D7B0}\x{CD95}" =~ m//, q{Match unanchored } ); # InHanunoo ok( "\N{HANUNOO LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{HANUNOO LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{HANUNOO LETTER A}" !~ m/^<-InHanunoo>$/, 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/^<-InHanunoo>$/, q{Match unrelated inverted } ); ok( "\x{6F4F}\N{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/^<-InHebrew>$/, 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/^<-InHebrew>$/, 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/^<-InHighPrivateUseSurrogates>$/, 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/^<-InHighSurrogates>$/, q{Match unrelated inverted } ); # InHiragana ok( "\x{3040}" =~ m/^$/, q{Match } ); ok( "\x{3040}" !~ m/^.$/, q{Don't match negated } ); ok( "\x{3040}" !~ m/^<-InHiragana>$/, 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/^<-InHiragana>$/, q{Match unrelated inverted } ); ok( "\x{AC7C}\x{3040}" =~ m//, q{Match unanchored } ); # InIPAExtensions ok( "\N{LATIN SMALL LETTER TURNED A}" =~ m/^$/, q{Match } ); ok( "\N{LATIN SMALL LETTER TURNED A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN SMALL LETTER TURNED A}" !~ m/^<-InIPAExtensions>$/, q{Don't match inverted } ); ok( "\N{HANGUL LETTER SSANGIEUNG}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{HANGUL LETTER SSANGIEUNG}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{HANGUL LETTER SSANGIEUNG}" =~ m/^<-InIPAExtensions>$/, q{Match unrelated inverted } ); ok( "\N{HANGUL LETTER SSANGIEUNG}\N{LATIN SMALL LETTER TURNED A}" =~ m//, q{Match unanchored } ); # InIdeographicDescriptionCharacters ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/^$/, q{Match } ); ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<-InIdeographicDescriptionCharacters>$/, 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/^<-InIdeographicDescriptionCharacters>$/, q{Match unrelated inverted } ); ok( "\x{9160}\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m//, q{Match unanchored } ); # InKanbun ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" =~ m/^$/, q{Match } ); ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" !~ m/^<-InKanbun>$/, 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/^<-InKanbun>$/, q{Match unrelated inverted } ); ok( "\x{A80C}\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" =~ m//, q{Match unanchored } ); # InKangxiRadicals ok( "\N{KANGXI RADICAL ONE}" =~ m/^$/, q{Match } ); ok( "\N{KANGXI RADICAL ONE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KANGXI RADICAL ONE}" !~ m/^<-InKangxiRadicals>$/, 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/^<-InKangxiRadicals>$/, q{Match unrelated inverted } ); ok( "\x{891A}\N{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/^<-InKannada>$/, 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/^<-InKannada>$/, q{Match unrelated inverted } ); ok( "\x{B614}\x{0C80}" =~ m//, q{Match unanchored } ); # InKatakana ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/^$/, q{Match } ); ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<-InKatakana>$/, 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/^<-InKatakana>$/, q{Match unrelated inverted } ); ok( "\x{7EB8}\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m//, q{Match unanchored } ); # InKatakanaPhoneticExtensions ok( "\N{KATAKANA LETTER SMALL KU}" =~ m/^$/, q{Match } ); ok( "\N{KATAKANA LETTER SMALL KU}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KATAKANA LETTER SMALL KU}" !~ m/^<-InKatakanaPhoneticExtensions>$/, 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/^<-InKatakanaPhoneticExtensions>$/, q{Match unrelated inverted } ); ok( "\x{97C2}\N{KATAKANA LETTER SMALL KU}" =~ m//, q{Match unanchored } ); # InKhmer ok( "\N{KHMER LETTER KA}" =~ m/^$/, q{Match } ); ok( "\N{KHMER LETTER KA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{KHMER LETTER KA}" !~ m/^<-InKhmer>$/, 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/^<-InKhmer>$/, q{Match unrelated inverted } ); ok( "\x{CAFA}\N{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/^<-InLao>$/, 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/^<-InLao>$/, 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/^<-InLatin1Supplement>$/, 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/^<-InLatin1Supplement>$/, q{Match unrelated inverted } ); ok( "\x{D062}\x{0080}" =~ m//, q{Match unanchored } ); # InLatinExtendedA ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" =~ m/^$/, q{Match } ); ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" !~ m/^<-InLatinExtendedA>$/, q{Don't match inverted } ); ok( "\N{IDEOGRAPHIC ANNOTATION EARTH MARK}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{IDEOGRAPHIC ANNOTATION EARTH MARK}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{IDEOGRAPHIC ANNOTATION EARTH MARK}" =~ m/^<-InLatinExtendedA>$/, q{Match unrelated inverted } ); ok( "\N{IDEOGRAPHIC ANNOTATION EARTH MARK}\N{LATIN CAPITAL LETTER A WITH MACRON}" =~ m//, q{Match unanchored } ); # InLatinExtendedAdditional ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m/^$/, q{Match } ); ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^<-InLatinExtendedAdditional>$/, 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/^<-InLatinExtendedAdditional>$/, q{Match unrelated inverted } ); ok( "\x{9A44}\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m//, q{Match unanchored } ); # InLatinExtendedB ok( "\N{LATIN SMALL LETTER B WITH STROKE}" =~ m/^$/, q{Match } ); ok( "\N{LATIN SMALL LETTER B WITH STROKE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{LATIN SMALL LETTER B WITH STROKE}" !~ m/^<-InLatinExtendedB>$/, 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/^<-InLatinExtendedB>$/, q{Match unrelated inverted } ); ok( "\x{7544}\N{LATIN SMALL LETTER B WITH STROKE}" =~ m//, q{Match unanchored } ); # InLetterlikeSymbols ok( "\N{ACCOUNT OF}" =~ m/^$/, q{Match } ); ok( "\N{ACCOUNT OF}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{ACCOUNT OF}" !~ m/^<-InLetterlikeSymbols>$/, q{Don't match inverted } ); ok( "\N{LATIN CAPITAL LETTER X WITH DOT ABOVE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{LATIN CAPITAL LETTER X WITH DOT ABOVE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{LATIN CAPITAL LETTER X WITH DOT ABOVE}" =~ m/^<-InLetterlikeSymbols>$/, q{Match unrelated inverted } ); ok( "\N{LATIN CAPITAL LETTER X WITH DOT ABOVE}\N{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/^<-InLowSurrogates>$/, q{Match unrelated inverted } ); # InMalayalam ok( "\x{0D00}" =~ m/^$/, q{Match } ); ok( "\x{0D00}" !~ m/^.$/, q{Don't match negated } ); ok( "\x{0D00}" !~ m/^<-InMalayalam>$/, 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/^<-InMalayalam>$/, 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/^<-InMathematicalAlphanumericSymbols>$/, q{Match unrelated inverted } ); # InMathematicalOperators ok( "\N{FOR ALL}" =~ m/^$/, q{Match } ); ok( "\N{FOR ALL}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{FOR ALL}" !~ m/^<-InMathematicalOperators>$/, 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/^<-InMathematicalOperators>$/, q{Match unrelated inverted } ); ok( "\x{BBC6}\N{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/^<-InMiscellaneousMathematicalSymbolsA>$/, 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/^<-InMiscellaneousMathematicalSymbolsA>$/, q{Match unrelated inverted } ); ok( "\x{065D}\x{27C0}" =~ m//, q{Match unanchored } ); # InMiscellaneousMathematicalSymbolsB ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" =~ m/^$/, q{Match } ); ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" !~ m/^<-InMiscellaneousMathematicalSymbolsB>$/, 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/^<-InMiscellaneousMathematicalSymbolsB>$/, q{Match unrelated inverted } ); ok( "\x{56A6}\N{TRIPLE VERTICAL BAR DELIMITER}" =~ m//, q{Match unanchored } ); # InMiscellaneousSymbols ok( "\N{BLACK SUN WITH RAYS}" =~ m/^$/, q{Match } ); ok( "\N{BLACK SUN WITH RAYS}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{BLACK SUN WITH RAYS}" !~ m/^<-InMiscellaneousSymbols>$/, 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/^<-InMiscellaneousSymbols>$/, q{Match unrelated inverted } ); ok( "\x{3EE7}\N{BLACK SUN WITH RAYS}" =~ m//, q{Match unanchored } ); # InMiscellaneousTechnical ok( "\N{DIAMETER SIGN}" =~ m/^$/, q{Match } ); ok( "\N{DIAMETER SIGN}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{DIAMETER SIGN}" !~ m/^<-InMiscellaneousTechnical>$/, 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/^<-InMiscellaneousTechnical>$/, q{Match unrelated inverted } ); ok( "\x{2EFC}\N{DIAMETER SIGN}" =~ m//, q{Match unanchored } ); # InMongolian ok( "\N{MONGOLIAN BIRGA}" =~ m/^$/, q{Match } ); ok( "\N{MONGOLIAN BIRGA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MONGOLIAN BIRGA}" !~ m/^<-InMongolian>$/, 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/^<-InMongolian>$/, q{Match unrelated inverted } ); ok( "\x{AFB4}\N{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/^<-InMusicalSymbols>$/, q{Match unrelated inverted } ); # InMyanmar ok( "\N{MYANMAR LETTER KA}" =~ m/^$/, q{Match } ); ok( "\N{MYANMAR LETTER KA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MYANMAR LETTER KA}" !~ m/^<-InMyanmar>$/, 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/^<-InMyanmar>$/, q{Match unrelated inverted } ); ok( "\x{1DDB}\N{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/^<-InNumberForms>$/, q{Don't match inverted } ); ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}" =~ m/^<-InNumberForms>$/, q{Match unrelated inverted } ); ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}\x{2150}" =~ m//, q{Match unanchored } ); # InOgham ok( "\N{OGHAM SPACE MARK}" =~ m/^$/, q{Match } ); ok( "\N{OGHAM SPACE MARK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{OGHAM SPACE MARK}" !~ m/^<-InOgham>$/, 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/^<-InOgham>$/, q{Match unrelated inverted } ); ok( "\x{768C}\N{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/^<-InOldItalic>$/, q{Match unrelated inverted } ); # InOpticalCharacterRecognition ok( "\N{OCR HOOK}" =~ m/^$/, q{Match } ); ok( "\N{OCR HOOK}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{OCR HOOK}" !~ m/^<-InOpticalCharacterRecognition>$/, 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/^<-InOpticalCharacterRecognition>$/, q{Match unrelated inverted } ); ok( "\x{BE80}\N{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/^<-InOriya>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE GGEX}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE GGEX}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE GGEX}" =~ m/^<-InOriya>$/, q{Match unrelated inverted } ); ok( "\N{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/^<-InPrivateUseArea>$/, q{Match unrelated inverted } ); # InRunic ok( "\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/^$/, q{Match } ); ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<-InRunic>$/, q{Don't match inverted } ); ok( "\N{SINHALA LETTER MAHAAPRAANA KAYANNA}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{SINHALA LETTER MAHAAPRAANA KAYANNA}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{SINHALA LETTER MAHAAPRAANA KAYANNA}" =~ m/^<-InRunic>$/, q{Match unrelated inverted } ); ok( "\N{SINHALA LETTER MAHAAPRAANA KAYANNA}\N{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/^<-InSinhala>$/, 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/^<-InSinhala>$/, 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/^<-InSmallFormVariants>$/, q{Match unrelated inverted } ); # InSpacingModifierLetters ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^$/, q{Match } ); ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<-InSpacingModifierLetters>$/, 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/^<-InSpacingModifierLetters>$/, q{Match unrelated inverted } ); ok( "\x{5326}\N{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/^<-InSpecials>$/, q{Match unrelated inverted } ); # InSuperscriptsAndSubscripts ok( "\N{SUPERSCRIPT ZERO}" =~ m/^$/, q{Match } ); ok( "\N{SUPERSCRIPT ZERO}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SUPERSCRIPT ZERO}" !~ m/^<-InSuperscriptsAndSubscripts>$/, 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/^<-InSuperscriptsAndSubscripts>$/, q{Match unrelated inverted } ); ok( "\x{3E71}\N{SUPERSCRIPT ZERO}" =~ m//, q{Match unanchored } ); # InSupplementalArrowsA ok( "\N{UPWARDS QUADRUPLE ARROW}" =~ m/^$/, q{Match } ); ok( "\N{UPWARDS QUADRUPLE ARROW}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{UPWARDS QUADRUPLE ARROW}" !~ m/^<-InSupplementalArrowsA>$/, q{Don't match inverted } ); ok( "\N{GREEK SMALL LETTER OMICRON WITH TONOS}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{GREEK SMALL LETTER OMICRON WITH TONOS}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{GREEK SMALL LETTER OMICRON WITH TONOS}" =~ m/^<-InSupplementalArrowsA>$/, q{Match unrelated inverted } ); ok( "\N{GREEK SMALL LETTER OMICRON WITH TONOS}\N{UPWARDS QUADRUPLE ARROW}" =~ m//, q{Match unanchored } ); # InSupplementalArrowsB ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" =~ m/^$/, q{Match } ); ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" !~ m/^<-InSupplementalArrowsB>$/, 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/^<-InSupplementalArrowsB>$/, q{Match unrelated inverted } ); ok( "\x{C1A9}\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" =~ m//, q{Match unanchored } ); # InSupplementalMathematicalOperators ok( "\N{N-ARY CIRCLED DOT OPERATOR}" =~ m/^$/, q{Match } ); ok( "\N{N-ARY CIRCLED DOT OPERATOR}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{N-ARY CIRCLED DOT OPERATOR}" !~ m/^<-InSupplementalMathematicalOperators>$/, 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/^<-InSupplementalMathematicalOperators>$/, q{Match unrelated inverted } ); ok( "\x{9EBD}\N{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/^<-InSupplementaryPrivateUseAreaA>$/, 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/^<-InSupplementaryPrivateUseAreaB>$/, q{Match unrelated inverted } ); # InSyriac ok( "\N{SYRIAC END OF PARAGRAPH}" =~ m/^$/, q{Match } ); ok( "\N{SYRIAC END OF PARAGRAPH}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{SYRIAC END OF PARAGRAPH}" !~ m/^<-InSyriac>$/, q{Don't match inverted } ); ok( "\N{YI SYLLABLE NZIEP}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{YI SYLLABLE NZIEP}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{YI SYLLABLE NZIEP}" =~ m/^<-InSyriac>$/, q{Match unrelated inverted } ); ok( "\N{YI SYLLABLE NZIEP}\N{SYRIAC END OF PARAGRAPH}" =~ m//, q{Match unanchored } ); # InTagalog ok( "\N{TAGALOG LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{TAGALOG LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TAGALOG LETTER A}" !~ m/^<-InTagalog>$/, q{Don't match inverted } ); ok( "\N{GEORGIAN LETTER BAN}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{GEORGIAN LETTER BAN}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{GEORGIAN LETTER BAN}" =~ m/^<-InTagalog>$/, q{Match unrelated inverted } ); ok( "\N{GEORGIAN LETTER BAN}\N{TAGALOG LETTER A}" =~ m//, q{Match unanchored } ); # InTagbanwa ok( "\N{TAGBANWA LETTER A}" =~ m/^$/, q{Match } ); ok( "\N{TAGBANWA LETTER A}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TAGBANWA LETTER A}" !~ m/^<-InTagbanwa>$/, 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/^<-InTagbanwa>$/, q{Match unrelated inverted } ); ok( "\x{5776}\N{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/^<-InTags>$/, q{Match unrelated inverted } ); # InTamil ok( "\x{0B80}" =~ m/^$/, q{Match } ); ok( "\x{0B80}" !~ m/^.$/, q{Don't match negated } ); ok( "\x{0B80}" !~ m/^<-InTamil>$/, 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/^<-InTamil>$/, 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/^<-InTelugu>$/, 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/^<-InTelugu>$/, q{Match unrelated inverted } ); ok( "\x{8AC5}\x{0C00}" =~ m//, q{Match unanchored } ); # InThaana ok( "\N{THAANA LETTER HAA}" =~ m/^$/, q{Match } ); ok( "\N{THAANA LETTER HAA}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{THAANA LETTER HAA}" !~ m/^<-InThaana>$/, 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/^<-InThaana>$/, q{Match unrelated inverted } ); ok( "\x{BB8F}\N{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/^<-InThai>$/, 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/^<-InThai>$/, q{Match unrelated inverted } ); ok( "\x{9395}\x{0E00}" =~ m//, q{Match unanchored } ); # InTibetan ok( "\N{TIBETAN SYLLABLE OM}" =~ m/^$/, q{Match } ); ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<-InTibetan>$/, 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/^<-InTibetan>$/, q{Match unrelated inverted } ); ok( "\x{957A}\N{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/^<-InUnifiedCanadianAboriginalSyllabics>$/, 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/^<-InUnifiedCanadianAboriginalSyllabics>$/, 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/^<-InVariationSelectors>$/, q{Match unrelated inverted } ); # InYiRadicals ok( "\N{YI RADICAL QOT}" =~ m/^$/, q{Match } ); ok( "\N{YI RADICAL QOT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{YI RADICAL QOT}" !~ m/^<-InYiRadicals>$/, 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/^<-InYiRadicals>$/, q{Match unrelated inverted } ); ok( "\x{3A4E}\N{YI RADICAL QOT}" =~ m//, q{Match unanchored } ); # InYiSyllables ok( "\N{YI SYLLABLE IT}" =~ m/^$/, q{Match } ); ok( "\N{YI SYLLABLE IT}" !~ m/^.$/, q{Don't match negated } ); ok( "\N{YI SYLLABLE IT}" !~ m/^<-InYiSyllables>$/, q{Don't match inverted } ); ok( "\N{PARALLEL WITH HORIZONTAL STROKE}" !~ m/^$/, q{Don't match unrelated } ); ok( "\N{PARALLEL WITH HORIZONTAL STROKE}" =~ m/^.$/, q{Match unrelated negated } ); ok( "\N{PARALLEL WITH HORIZONTAL STROKE}" =~ m/^<-InYiSyllables>$/, q{Match unrelated inverted } ); ok( "\N{PARALLEL WITH HORIZONTAL STROKE}\N{YI SYLLABLE IT}" =~ m//, q{Match unanchored } );