use Perl6::Rules;
use Test::Simple "no_plan";
use charnames ":full";
# L Letter
ok( "\x{45CD}" =~ m/^<+<L>>$/, q{Match <L> (Letter)} );
ok( "\x{45CD}" =~ m/^<[A]+<L>>$/, q{Match compound <L> (Letter)} );
ok( "\x{45CD}" !~ m/^<-<L>>$/, q{Don't match externally inverted <L> (Letter)} );
ok( "\x{45CD}" !~ m/^<[A]-<L>>$/, q{Don't match compound inverted <L> (Letter)} );
ok( "\x{45CD}" !~ m/^<+<-L>>$/, q{Don't match internally inverted <L> (Letter)} );
ok( "\x{4DB6}" !~ m/^<+<L>>$/, q{Don't match unrelated <L> (Letter)} );
ok( "\x{4DB6}" =~ m/^<-<L>>$/, q{Match unrelated externally inverted <L> (Letter)} );
ok( "\x{4DB6}" =~ m/^<+<-L>>$/, q{Match unrelated internally inverted <L> (Letter)} );
ok( "\x{4DB6}\x{45CD}" =~ m/<+<L>>/, q{Match unanchored <L> (Letter)} );
ok( "\N{HANGUL LETTER SIOS-PIEUP}" =~ m/^<+<Letter>>$/, q{Match <Letter>} );
ok( "\N{HANGUL LETTER SIOS-PIEUP}" =~ m/^<[A]+<Letter>>$/, q{Match compound <Letter>} );
ok( "\N{HANGUL LETTER SIOS-PIEUP}" !~ m/^<-<Letter>>$/, q{Don't match externally inverted <Letter>} );
ok( "\N{HANGUL LETTER SIOS-PIEUP}" !~ m/^<[A]-<Letter>>$/, q{Don't match compound inverted <Letter>} );
ok( "\N{HANGUL LETTER SIOS-PIEUP}" !~ m/^<+<-Letter>>$/, q{Don't match internally inverted <Letter>} );
ok( "\x{318F}" !~ m/^<+<Letter>>$/, q{Don't match unrelated <Letter>} );
ok( "\x{318F}" =~ m/^<-<Letter>>$/, q{Match unrelated externally inverted <Letter>} );
ok( "\x{318F}" =~ m/^<+<-Letter>>$/, q{Match unrelated internally inverted <Letter>} );
ok( "\x{318F}\N{HANGUL LETTER SIOS-PIEUP}" =~ m/<+<Letter>>/, q{Match unanchored <Letter>} );
# Lu UppercaseLetter
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<+<Lu>>$/, q{Match <Lu> (UppercaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<[A]+<Lu>>$/, q{Match compound <Lu> (UppercaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-<Lu>>$/, q{Don't match externally inverted <Lu> (UppercaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<[A]-<Lu>>$/, q{Don't match compound inverted <Lu> (UppercaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<+<-Lu>>$/, q{Don't match internally inverted <Lu> (UppercaseLetter)} );
ok( "\x{5E52}" !~ m/^<+<Lu>>$/, q{Don't match unrelated <Lu> (UppercaseLetter)} );
ok( "\x{5E52}" =~ m/^<-<Lu>>$/, q{Match unrelated externally inverted <Lu> (UppercaseLetter)} );
ok( "\x{5E52}" =~ m/^<+<-Lu>>$/, q{Match unrelated internally inverted <Lu> (UppercaseLetter)} );
ok( "\x{5E52}" !~ m/^<+<Lu>>$/, q{Don't match related <Lu> (UppercaseLetter)} );
ok( "\x{5E52}" =~ m/^<+<-Lu>>$/, q{Match related internally inverted <Lu> (UppercaseLetter)} );
ok( "\x{5E52}" =~ m/^<-<Lu>>$/, q{Match related externally inverted <Lu> (UppercaseLetter)} );
ok( "\x{5E52}\x{5E52}\N{LATIN CAPITAL LETTER A}" =~ m/<+<Lu>>/, q{Match unanchored <Lu> (UppercaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m/^<+<UppercaseLetter>>$/, q{Match <UppercaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m/^<[A]+<UppercaseLetter>>$/, q{Match compound <UppercaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^<-<UppercaseLetter>>$/, q{Don't match externally inverted <UppercaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^<[A]-<UppercaseLetter>>$/, q{Don't match compound inverted <UppercaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^<+<-UppercaseLetter>>$/, q{Don't match internally inverted <UppercaseLetter>} );
ok( "\x{1DB9}" !~ m/^<+<UppercaseLetter>>$/, q{Don't match unrelated <UppercaseLetter>} );
ok( "\x{1DB9}" =~ m/^<-<UppercaseLetter>>$/, q{Match unrelated externally inverted <UppercaseLetter>} );
ok( "\x{1DB9}" =~ m/^<+<-UppercaseLetter>>$/, q{Match unrelated internally inverted <UppercaseLetter>} );
ok( "\x{1DB9}\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m/<+<UppercaseLetter>>/, q{Match unanchored <UppercaseLetter>} );
# Ll LowercaseLetter
ok( "\N{LATIN SMALL LETTER A}" =~ m/^<+<Ll>>$/, q{Match <Ll> (LowercaseLetter)} );
ok( "\N{LATIN SMALL LETTER A}" =~ m/^<[A]+<Ll>>$/, q{Match compound <Ll> (LowercaseLetter)} );
ok( "\N{LATIN SMALL LETTER A}" !~ m/^<-<Ll>>$/, q{Don't match externally inverted <Ll> (LowercaseLetter)} );
ok( "\N{LATIN SMALL LETTER A}" !~ m/^<[A]-<Ll>>$/, q{Don't match compound inverted <Ll> (LowercaseLetter)} );
ok( "\N{LATIN SMALL LETTER A}" !~ m/^<+<-Ll>>$/, q{Don't match internally inverted <Ll> (LowercaseLetter)} );
ok( "\x{83AD}" !~ m/^<+<Ll>>$/, q{Don't match unrelated <Ll> (LowercaseLetter)} );
ok( "\x{83AD}" =~ m/^<-<Ll>>$/, q{Match unrelated externally inverted <Ll> (LowercaseLetter)} );
ok( "\x{83AD}" =~ m/^<+<-Ll>>$/, q{Match unrelated internally inverted <Ll> (LowercaseLetter)} );
ok( "\x{83AD}" !~ m/^<+<Ll>>$/, q{Don't match related <Ll> (LowercaseLetter)} );
ok( "\x{83AD}" =~ m/^<+<-Ll>>$/, q{Match related internally inverted <Ll> (LowercaseLetter)} );
ok( "\x{83AD}" =~ m/^<-<Ll>>$/, q{Match related externally inverted <Ll> (LowercaseLetter)} );
ok( "\x{83AD}\x{83AD}\N{LATIN SMALL LETTER A}" =~ m/<+<Ll>>/, q{Match unanchored <Ll> (LowercaseLetter)} );
ok( "\N{LATIN SMALL LETTER A}" =~ m/^<+<LowercaseLetter>>$/, q{Match <LowercaseLetter>} );
ok( "\N{LATIN SMALL LETTER A}" =~ m/^<[A]+<LowercaseLetter>>$/, q{Match compound <LowercaseLetter>} );
ok( "\N{LATIN SMALL LETTER A}" !~ m/^<-<LowercaseLetter>>$/, q{Don't match externally inverted <LowercaseLetter>} );
ok( "\N{LATIN SMALL LETTER A}" !~ m/^<[A]-<LowercaseLetter>>$/, q{Don't match compound inverted <LowercaseLetter>} );
ok( "\N{LATIN SMALL LETTER A}" !~ m/^<+<-LowercaseLetter>>$/, q{Don't match internally inverted <LowercaseLetter>} );
ok( "\x{A9A8}" !~ m/^<+<LowercaseLetter>>$/, q{Don't match unrelated <LowercaseLetter>} );
ok( "\x{A9A8}" =~ m/^<-<LowercaseLetter>>$/, q{Match unrelated externally inverted <LowercaseLetter>} );
ok( "\x{A9A8}" =~ m/^<+<-LowercaseLetter>>$/, q{Match unrelated internally inverted <LowercaseLetter>} );
ok( "\x{AC00}" !~ m/^<+<LowercaseLetter>>$/, q{Don't match related <LowercaseLetter>} );
ok( "\x{AC00}" =~ m/^<+<-LowercaseLetter>>$/, q{Match related internally inverted <LowercaseLetter>} );
ok( "\x{AC00}" =~ m/^<-<LowercaseLetter>>$/, q{Match related externally inverted <LowercaseLetter>} );
ok( "\x{A9A8}\x{AC00}\N{LATIN SMALL LETTER A}" =~ m/<+<LowercaseLetter>>/, q{Match unanchored <LowercaseLetter>} );
# Lt TitlecaseLetter
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m/^<+<Lt>>$/, q{Match <Lt> (TitlecaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m/^<[A]+<Lt>>$/, q{Match compound <Lt> (TitlecaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^<-<Lt>>$/, q{Don't match externally inverted <Lt> (TitlecaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^<[A]-<Lt>>$/, q{Don't match compound inverted <Lt> (TitlecaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^<+<-Lt>>$/, q{Don't match internally inverted <Lt> (TitlecaseLetter)} );
ok( "\x{D187}" !~ m/^<+<Lt>>$/, q{Don't match unrelated <Lt> (TitlecaseLetter)} );
ok( "\x{D187}" =~ m/^<-<Lt>>$/, q{Match unrelated externally inverted <Lt> (TitlecaseLetter)} );
ok( "\x{D187}" =~ m/^<+<-Lt>>$/, q{Match unrelated internally inverted <Lt> (TitlecaseLetter)} );
ok( "\x{D187}" !~ m/^<+<Lt>>$/, q{Don't match related <Lt> (TitlecaseLetter)} );
ok( "\x{D187}" =~ m/^<+<-Lt>>$/, q{Match related internally inverted <Lt> (TitlecaseLetter)} );
ok( "\x{D187}" =~ m/^<-<Lt>>$/, q{Match related externally inverted <Lt> (TitlecaseLetter)} );
ok( "\x{D187}\x{D187}\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m/<+<Lt>>/, q{Match unanchored <Lt> (TitlecaseLetter)} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m/^<+<TitlecaseLetter>>$/, q{Match <TitlecaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m/^<[A]+<TitlecaseLetter>>$/, q{Match compound <TitlecaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^<-<TitlecaseLetter>>$/, q{Don't match externally inverted <TitlecaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^<[A]-<TitlecaseLetter>>$/, q{Don't match compound inverted <TitlecaseLetter>} );
ok( "\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" !~ m/^<+<-TitlecaseLetter>>$/, q{Don't match internally inverted <TitlecaseLetter>} );
ok( "\x{C2A9}" !~ m/^<+<TitlecaseLetter>>$/, q{Don't match unrelated <TitlecaseLetter>} );
ok( "\x{C2A9}" =~ m/^<-<TitlecaseLetter>>$/, q{Match unrelated externally inverted <TitlecaseLetter>} );
ok( "\x{C2A9}" =~ m/^<+<-TitlecaseLetter>>$/, q{Match unrelated internally inverted <TitlecaseLetter>} );
ok( "\x{C2A9}\N{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON}" =~ m/<+<TitlecaseLetter>>/, q{Match unanchored <TitlecaseLetter>} );
# Lm ModifierLetter
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<+<Lm>>$/, q{Match <Lm> (ModifierLetter)} );
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<[A]+<Lm>>$/, q{Match compound <Lm> (ModifierLetter)} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<-<Lm>>$/, q{Don't match externally inverted <Lm> (ModifierLetter)} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<[A]-<Lm>>$/, q{Don't match compound inverted <Lm> (ModifierLetter)} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<+<-Lm>>$/, q{Don't match internally inverted <Lm> (ModifierLetter)} );
ok( "\x{8C34}" !~ m/^<+<Lm>>$/, q{Don't match unrelated <Lm> (ModifierLetter)} );
ok( "\x{8C34}" =~ m/^<-<Lm>>$/, q{Match unrelated externally inverted <Lm> (ModifierLetter)} );
ok( "\x{8C34}" =~ m/^<+<-Lm>>$/, q{Match unrelated internally inverted <Lm> (ModifierLetter)} );
ok( "\x{8C34}" !~ m/^<+<Lm>>$/, q{Don't match related <Lm> (ModifierLetter)} );
ok( "\x{8C34}" =~ m/^<+<-Lm>>$/, q{Match related internally inverted <Lm> (ModifierLetter)} );
ok( "\x{8C34}" =~ m/^<-<Lm>>$/, q{Match related externally inverted <Lm> (ModifierLetter)} );
ok( "\x{8C34}\x{8C34}\N{MODIFIER LETTER SMALL H}" =~ m/<+<Lm>>/, q{Match unanchored <Lm> (ModifierLetter)} );
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<+<ModifierLetter>>$/, q{Match <ModifierLetter>} );
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<[A]+<ModifierLetter>>$/, q{Match compound <ModifierLetter>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<-<ModifierLetter>>$/, q{Don't match externally inverted <ModifierLetter>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<[A]-<ModifierLetter>>$/, q{Don't match compound inverted <ModifierLetter>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<+<-ModifierLetter>>$/, q{Don't match internally inverted <ModifierLetter>} );
ok( "\N{YI SYLLABLE NZAX}" !~ m/^<+<ModifierLetter>>$/, q{Don't match unrelated <ModifierLetter>} );
ok( "\N{YI SYLLABLE NZAX}" =~ m/^<-<ModifierLetter>>$/, q{Match unrelated externally inverted <ModifierLetter>} );
ok( "\N{YI SYLLABLE NZAX}" =~ m/^<+<-ModifierLetter>>$/, q{Match unrelated internally inverted <ModifierLetter>} );
ok( "\N{YI SYLLABLE NZAX}\N{MODIFIER LETTER SMALL H}" =~ m/<+<ModifierLetter>>/, q{Match unanchored <ModifierLetter>} );
# Lo OtherLetter
ok( "\x{8CC9}" =~ m/^<+<Lo>>$/, q{Match <Lo> (OtherLetter)} );
ok( "\x{8CC9}" =~ m/^<[A]+<Lo>>$/, q{Match compound <Lo> (OtherLetter)} );
ok( "\x{8CC9}" !~ m/^<-<Lo>>$/, q{Don't match externally inverted <Lo> (OtherLetter)} );
ok( "\x{8CC9}" !~ m/^<[A]-<Lo>>$/, q{Don't match compound inverted <Lo> (OtherLetter)} );
ok( "\x{8CC9}" !~ m/^<+<-Lo>>$/, q{Don't match internally inverted <Lo> (OtherLetter)} );
ok( "\x{9FA6}" !~ m/^<+<Lo>>$/, q{Don't match unrelated <Lo> (OtherLetter)} );
ok( "\x{9FA6}" =~ m/^<-<Lo>>$/, q{Match unrelated externally inverted <Lo> (OtherLetter)} );
ok( "\x{9FA6}" =~ m/^<+<-Lo>>$/, q{Match unrelated internally inverted <Lo> (OtherLetter)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<+<Lo>>$/, q{Don't match related <Lo> (OtherLetter)} );
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<+<-Lo>>$/, q{Match related internally inverted <Lo> (OtherLetter)} );
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<-<Lo>>$/, q{Match related externally inverted <Lo> (OtherLetter)} );
ok( "\x{9FA6}\N{LATIN CAPITAL LETTER A}\x{8CC9}" =~ m/<+<Lo>>/, q{Match unanchored <Lo> (OtherLetter)} );
ok( "\x{BC7D}" =~ m/^<+<OtherLetter>>$/, q{Match <OtherLetter>} );
ok( "\x{BC7D}" =~ m/^<[A]+<OtherLetter>>$/, q{Match compound <OtherLetter>} );
ok( "\x{BC7D}" !~ m/^<-<OtherLetter>>$/, q{Don't match externally inverted <OtherLetter>} );
ok( "\x{BC7D}" !~ m/^<[A]-<OtherLetter>>$/, q{Don't match compound inverted <OtherLetter>} );
ok( "\x{BC7D}" !~ m/^<+<-OtherLetter>>$/, q{Don't match internally inverted <OtherLetter>} );
ok( "\x{D7A4}" !~ m/^<+<OtherLetter>>$/, q{Don't match unrelated <OtherLetter>} );
ok( "\x{D7A4}" =~ m/^<-<OtherLetter>>$/, q{Match unrelated externally inverted <OtherLetter>} );
ok( "\x{D7A4}" =~ m/^<+<-OtherLetter>>$/, q{Match unrelated internally inverted <OtherLetter>} );
ok( "\x{D7A4}\x{BC7D}" =~ m/<+<OtherLetter>>/, q{Match unanchored <OtherLetter>} );
# Lr # Alias for "Ll", "Lu", and "Lt".
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<+<Lr>>$/, q{Match (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<[A]+<Lr>>$/, q{Match compound (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-<Lr>>$/, q{Don't match externally inverted (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<[A]-<Lr>>$/, q{Don't match compound inverted (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<+<-Lr>>$/, q{Don't match internally inverted (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\x{CD29}" !~ m/^<+<Lr>>$/, q{Don't match unrelated (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\x{CD29}" =~ m/^<-<Lr>>$/, q{Match unrelated externally inverted (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\x{CD29}" =~ m/^<+<-Lr>>$/, q{Match unrelated internally inverted (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\x{CD29}" !~ m/^<+<Lr>>$/, q{Don't match related (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\x{CD29}" =~ m/^<+<-Lr>>$/, q{Match related internally inverted (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\x{CD29}" =~ m/^<-<Lr>>$/, q{Match related externally inverted (Alias for "Ll", "Lu", and "Lt".)} );
ok( "\x{CD29}\x{CD29}\N{LATIN CAPITAL LETTER A}" =~ m/<+<Lr>>/, q{Match unanchored (Alias for "Ll", "Lu", and "Lt".)} );
# M Mark
ok( "\N{TAGALOG VOWEL SIGN I}" =~ m/^<+<M>>$/, q{Match <M> (Mark)} );
ok( "\N{TAGALOG VOWEL SIGN I}" =~ m/^<[A]+<M>>$/, q{Match compound <M> (Mark)} );
ok( "\N{TAGALOG VOWEL SIGN I}" !~ m/^<-<M>>$/, q{Don't match externally inverted <M> (Mark)} );
ok( "\N{TAGALOG VOWEL SIGN I}" !~ m/^<[A]-<M>>$/, q{Don't match compound inverted <M> (Mark)} );
ok( "\N{TAGALOG VOWEL SIGN I}" !~ m/^<+<-M>>$/, q{Don't match internally inverted <M> (Mark)} );
ok( "\N{CANADIAN SYLLABICS KAAI}" !~ m/^<+<M>>$/, q{Don't match unrelated <M> (Mark)} );
ok( "\N{CANADIAN SYLLABICS KAAI}" =~ m/^<-<M>>$/, q{Match unrelated externally inverted <M> (Mark)} );
ok( "\N{CANADIAN SYLLABICS KAAI}" =~ m/^<+<-M>>$/, q{Match unrelated internally inverted <M> (Mark)} );
ok( "\N{CANADIAN SYLLABICS KAAI}\N{TAGALOG VOWEL SIGN I}" =~ m/<+<M>>/, q{Match unanchored <M> (Mark)} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<Mark>>$/, q{Match <Mark>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<[A]+<Mark>>$/, q{Match compound <Mark>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-<Mark>>$/, q{Don't match externally inverted <Mark>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<[A]-<Mark>>$/, q{Don't match compound inverted <Mark>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<-Mark>>$/, q{Don't match internally inverted <Mark>} );
ok( "\x{4BF0}" !~ m/^<+<Mark>>$/, q{Don't match unrelated <Mark>} );
ok( "\x{4BF0}" =~ m/^<-<Mark>>$/, q{Match unrelated externally inverted <Mark>} );
ok( "\x{4BF0}" =~ m/^<+<-Mark>>$/, q{Match unrelated internally inverted <Mark>} );
ok( "\x{4BF0}\N{COMBINING GRAVE ACCENT}" =~ m/<+<Mark>>/, q{Match unanchored <Mark>} );
# Mn NonspacingMark
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<Mn>>$/, q{Match <Mn> (NonspacingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<[A]+<Mn>>$/, q{Match compound <Mn> (NonspacingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-<Mn>>$/, q{Don't match externally inverted <Mn> (NonspacingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<[A]-<Mn>>$/, q{Don't match compound inverted <Mn> (NonspacingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<-Mn>>$/, q{Don't match internally inverted <Mn> (NonspacingMark)} );
ok( "\x{CF2C}" !~ m/^<+<Mn>>$/, q{Don't match unrelated <Mn> (NonspacingMark)} );
ok( "\x{CF2C}" =~ m/^<-<Mn>>$/, q{Match unrelated externally inverted <Mn> (NonspacingMark)} );
ok( "\x{CF2C}" =~ m/^<+<-Mn>>$/, q{Match unrelated internally inverted <Mn> (NonspacingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<+<Mn>>$/, q{Don't match related <Mn> (NonspacingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^<+<-Mn>>$/, q{Match related internally inverted <Mn> (NonspacingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^<-<Mn>>$/, q{Match related externally inverted <Mn> (NonspacingMark)} );
ok( "\x{CF2C}\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}\N{COMBINING GRAVE ACCENT}" =~ m/<+<Mn>>/, q{Match unanchored <Mn> (NonspacingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<NonspacingMark>>$/, q{Match <NonspacingMark>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<[A]+<NonspacingMark>>$/, q{Match compound <NonspacingMark>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-<NonspacingMark>>$/, q{Don't match externally inverted <NonspacingMark>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<[A]-<NonspacingMark>>$/, q{Don't match compound inverted <NonspacingMark>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<-NonspacingMark>>$/, q{Don't match internally inverted <NonspacingMark>} );
ok( "\x{B617}" !~ m/^<+<NonspacingMark>>$/, q{Don't match unrelated <NonspacingMark>} );
ok( "\x{B617}" =~ m/^<-<NonspacingMark>>$/, q{Match unrelated externally inverted <NonspacingMark>} );
ok( "\x{B617}" =~ m/^<+<-NonspacingMark>>$/, q{Match unrelated internally inverted <NonspacingMark>} );
ok( "\x{B617}\N{COMBINING GRAVE ACCENT}" =~ m/<+<NonspacingMark>>/, q{Match unanchored <NonspacingMark>} );
# Mc SpacingMark
ok( "\N{DEVANAGARI SIGN VISARGA}" =~ m/^<+<Mc>>$/, q{Match <Mc> (SpacingMark)} );
ok( "\N{DEVANAGARI SIGN VISARGA}" =~ m/^<[A]+<Mc>>$/, q{Match compound <Mc> (SpacingMark)} );
ok( "\N{DEVANAGARI SIGN VISARGA}" !~ m/^<-<Mc>>$/, q{Don't match externally inverted <Mc> (SpacingMark)} );
ok( "\N{DEVANAGARI SIGN VISARGA}" !~ m/^<[A]-<Mc>>$/, q{Don't match compound inverted <Mc> (SpacingMark)} );
ok( "\N{DEVANAGARI SIGN VISARGA}" !~ m/^<+<-Mc>>$/, q{Don't match internally inverted <Mc> (SpacingMark)} );
ok( "\N{BALLOT BOX WITH CHECK}" !~ m/^<+<Mc>>$/, q{Don't match unrelated <Mc> (SpacingMark)} );
ok( "\N{BALLOT BOX WITH CHECK}" =~ m/^<-<Mc>>$/, q{Match unrelated externally inverted <Mc> (SpacingMark)} );
ok( "\N{BALLOT BOX WITH CHECK}" =~ m/^<+<-Mc>>$/, q{Match unrelated internally inverted <Mc> (SpacingMark)} );
ok( "\N{IDEOGRAPHIC LEVEL TONE MARK}" !~ m/^<+<Mc>>$/, q{Don't match related <Mc> (SpacingMark)} );
ok( "\N{IDEOGRAPHIC LEVEL TONE MARK}" =~ m/^<+<-Mc>>$/, q{Match related internally inverted <Mc> (SpacingMark)} );
ok( "\N{IDEOGRAPHIC LEVEL TONE MARK}" =~ m/^<-<Mc>>$/, q{Match related externally inverted <Mc> (SpacingMark)} );
ok( "\N{BALLOT BOX WITH CHECK}\N{IDEOGRAPHIC LEVEL TONE MARK}\N{DEVANAGARI SIGN VISARGA}" =~ m/<+<Mc>>/, q{Match unanchored <Mc> (SpacingMark)} );
ok( "\N{MALAYALAM SIGN ANUSVARA}" =~ m/^<+<SpacingMark>>$/, q{Match <SpacingMark>} );
ok( "\N{MALAYALAM SIGN ANUSVARA}" =~ m/^<[A]+<SpacingMark>>$/, q{Match compound <SpacingMark>} );
ok( "\N{MALAYALAM SIGN ANUSVARA}" !~ m/^<-<SpacingMark>>$/, q{Don't match externally inverted <SpacingMark>} );
ok( "\N{MALAYALAM SIGN ANUSVARA}" !~ m/^<[A]-<SpacingMark>>$/, q{Don't match compound inverted <SpacingMark>} );
ok( "\N{MALAYALAM SIGN ANUSVARA}" !~ m/^<+<-SpacingMark>>$/, q{Don't match internally inverted <SpacingMark>} );
ok( "\N{KANNADA LETTER VOCALIC LL}" !~ m/^<+<SpacingMark>>$/, q{Don't match unrelated <SpacingMark>} );
ok( "\N{KANNADA LETTER VOCALIC LL}" =~ m/^<-<SpacingMark>>$/, q{Match unrelated externally inverted <SpacingMark>} );
ok( "\N{KANNADA LETTER VOCALIC LL}" =~ m/^<+<-SpacingMark>>$/, q{Match unrelated internally inverted <SpacingMark>} );
ok( "\N{KANNADA LETTER VOCALIC LL}\N{MALAYALAM SIGN ANUSVARA}" =~ m/<+<SpacingMark>>/, q{Match unanchored <SpacingMark>} );
# Me EnclosingMark
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^<+<Me>>$/, q{Match <Me> (EnclosingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^<[A]+<Me>>$/, q{Match compound <Me> (EnclosingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<-<Me>>$/, q{Don't match externally inverted <Me> (EnclosingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<[A]-<Me>>$/, q{Don't match compound inverted <Me> (EnclosingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<+<-Me>>$/, q{Don't match internally inverted <Me> (EnclosingMark)} );
ok( "\x{C680}" !~ m/^<+<Me>>$/, q{Don't match unrelated <Me> (EnclosingMark)} );
ok( "\x{C680}" =~ m/^<-<Me>>$/, q{Match unrelated externally inverted <Me> (EnclosingMark)} );
ok( "\x{C680}" =~ m/^<+<-Me>>$/, q{Match unrelated internally inverted <Me> (EnclosingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<Me>>$/, q{Don't match related <Me> (EnclosingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<-Me>>$/, q{Match related internally inverted <Me> (EnclosingMark)} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-<Me>>$/, q{Match related externally inverted <Me> (EnclosingMark)} );
ok( "\x{C680}\N{COMBINING GRAVE ACCENT}\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/<+<Me>>/, q{Match unanchored <Me> (EnclosingMark)} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^<+<EnclosingMark>>$/, q{Match <EnclosingMark>} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/^<[A]+<EnclosingMark>>$/, q{Match compound <EnclosingMark>} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<-<EnclosingMark>>$/, q{Don't match externally inverted <EnclosingMark>} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<[A]-<EnclosingMark>>$/, q{Don't match compound inverted <EnclosingMark>} );
ok( "\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" !~ m/^<+<-EnclosingMark>>$/, q{Don't match internally inverted <EnclosingMark>} );
ok( "\x{911E}" !~ m/^<+<EnclosingMark>>$/, q{Don't match unrelated <EnclosingMark>} );
ok( "\x{911E}" =~ m/^<-<EnclosingMark>>$/, q{Match unrelated externally inverted <EnclosingMark>} );
ok( "\x{911E}" =~ m/^<+<-EnclosingMark>>$/, q{Match unrelated internally inverted <EnclosingMark>} );
ok( "\x{911E}\N{COMBINING CYRILLIC HUNDRED THOUSANDS SIGN}" =~ m/<+<EnclosingMark>>/, q{Match unanchored <EnclosingMark>} );
# N Number
ok( "\N{DIGIT ZERO}" =~ m/^<+<N>>$/, q{Match <N> (Number)} );
ok( "\N{DIGIT ZERO}" =~ m/^<[A]+<N>>$/, q{Match compound <N> (Number)} );
ok( "\N{DIGIT ZERO}" !~ m/^<-<N>>$/, q{Don't match externally inverted <N> (Number)} );
ok( "\N{DIGIT ZERO}" !~ m/^<[A]-<N>>$/, q{Don't match compound inverted <N> (Number)} );
ok( "\N{DIGIT ZERO}" !~ m/^<+<-N>>$/, q{Don't match internally inverted <N> (Number)} );
ok( "\x{3BA3}" !~ m/^<+<N>>$/, q{Don't match unrelated <N> (Number)} );
ok( "\x{3BA3}" =~ m/^<-<N>>$/, q{Match unrelated externally inverted <N> (Number)} );
ok( "\x{3BA3}" =~ m/^<+<-N>>$/, q{Match unrelated internally inverted <N> (Number)} );
ok( "\x{3BA3}\N{DIGIT ZERO}" =~ m/<+<N>>/, q{Match unanchored <N> (Number)} );
ok( "\N{DIGIT ZERO}" =~ m/^<+<Number>>$/, q{Match <Number>} );
ok( "\N{DIGIT ZERO}" =~ m/^<[A]+<Number>>$/, q{Match compound <Number>} );
ok( "\N{DIGIT ZERO}" !~ m/^<-<Number>>$/, q{Don't match externally inverted <Number>} );
ok( "\N{DIGIT ZERO}" !~ m/^<[A]-<Number>>$/, q{Don't match compound inverted <Number>} );
ok( "\N{DIGIT ZERO}" !~ m/^<+<-Number>>$/, q{Don't match internally inverted <Number>} );
ok( "\x{37D0}" !~ m/^<+<Number>>$/, q{Don't match unrelated <Number>} );
ok( "\x{37D0}" =~ m/^<-<Number>>$/, q{Match unrelated externally inverted <Number>} );
ok( "\x{37D0}" =~ m/^<+<-Number>>$/, q{Match unrelated internally inverted <Number>} );
ok( "\x{37D0}\N{DIGIT ZERO}" =~ m/<+<Number>>/, q{Match unanchored <Number>} );
# Nd DecimalNumber
ok( "\N{DIGIT ZERO}" =~ m/^<+<Nd>>$/, q{Match <Nd> (DecimalNumber)} );
ok( "\N{DIGIT ZERO}" =~ m/^<[A]+<Nd>>$/, q{Match compound <Nd> (DecimalNumber)} );
ok( "\N{DIGIT ZERO}" !~ m/^<-<Nd>>$/, q{Don't match externally inverted <Nd> (DecimalNumber)} );
ok( "\N{DIGIT ZERO}" !~ m/^<[A]-<Nd>>$/, q{Don't match compound inverted <Nd> (DecimalNumber)} );
ok( "\N{DIGIT ZERO}" !~ m/^<+<-Nd>>$/, q{Don't match internally inverted <Nd> (DecimalNumber)} );
ok( "\x{8536}" !~ m/^<+<Nd>>$/, q{Don't match unrelated <Nd> (DecimalNumber)} );
ok( "\x{8536}" =~ m/^<-<Nd>>$/, q{Match unrelated externally inverted <Nd> (DecimalNumber)} );
ok( "\x{8536}" =~ m/^<+<-Nd>>$/, q{Match unrelated internally inverted <Nd> (DecimalNumber)} );
ok( "\N{SUPERSCRIPT TWO}" !~ m/^<+<Nd>>$/, q{Don't match related <Nd> (DecimalNumber)} );
ok( "\N{SUPERSCRIPT TWO}" =~ m/^<+<-Nd>>$/, q{Match related internally inverted <Nd> (DecimalNumber)} );
ok( "\N{SUPERSCRIPT TWO}" =~ m/^<-<Nd>>$/, q{Match related externally inverted <Nd> (DecimalNumber)} );
ok( "\x{8536}\N{SUPERSCRIPT TWO}\N{DIGIT ZERO}" =~ m/<+<Nd>>/, q{Match unanchored <Nd> (DecimalNumber)} );
ok( "\N{KHMER DIGIT ZERO}" =~ m/^<+<DecimalNumber>>$/, q{Match <DecimalNumber>} );
ok( "\N{KHMER DIGIT ZERO}" =~ m/^<[A]+<DecimalNumber>>$/, q{Match compound <DecimalNumber>} );
ok( "\N{KHMER DIGIT ZERO}" !~ m/^<-<DecimalNumber>>$/, q{Don't match externally inverted <DecimalNumber>} );
ok( "\N{KHMER DIGIT ZERO}" !~ m/^<[A]-<DecimalNumber>>$/, q{Don't match compound inverted <DecimalNumber>} );
ok( "\N{KHMER DIGIT ZERO}" !~ m/^<+<-DecimalNumber>>$/, q{Don't match internally inverted <DecimalNumber>} );
ok( "\N{CANADIAN SYLLABICS NWE}" !~ m/^<+<DecimalNumber>>$/, q{Don't match unrelated <DecimalNumber>} );
ok( "\N{CANADIAN SYLLABICS NWE}" =~ m/^<-<DecimalNumber>>$/, q{Match unrelated externally inverted <DecimalNumber>} );
ok( "\N{CANADIAN SYLLABICS NWE}" =~ m/^<+<-DecimalNumber>>$/, q{Match unrelated internally inverted <DecimalNumber>} );
ok( "\N{CANADIAN SYLLABICS NWE}\N{KHMER DIGIT ZERO}" =~ m/<+<DecimalNumber>>/, q{Match unanchored <DecimalNumber>} );
# Nl LetterNumber
ok( "\N{ROMAN NUMERAL ONE}" =~ m/^<+<Nl>>$/, q{Match <Nl> (LetterNumber)} );
ok( "\N{ROMAN NUMERAL ONE}" =~ m/^<[A]+<Nl>>$/, q{Match compound <Nl> (LetterNumber)} );
ok( "\N{ROMAN NUMERAL ONE}" !~ m/^<-<Nl>>$/, q{Don't match externally inverted <Nl> (LetterNumber)} );
ok( "\N{ROMAN NUMERAL ONE}" !~ m/^<[A]-<Nl>>$/, q{Don't match compound inverted <Nl> (LetterNumber)} );
ok( "\N{ROMAN NUMERAL ONE}" !~ m/^<+<-Nl>>$/, q{Don't match internally inverted <Nl> (LetterNumber)} );
ok( "\x{1B95}" !~ m/^<+<Nl>>$/, q{Don't match unrelated <Nl> (LetterNumber)} );
ok( "\x{1B95}" =~ m/^<-<Nl>>$/, q{Match unrelated externally inverted <Nl> (LetterNumber)} );
ok( "\x{1B95}" =~ m/^<+<-Nl>>$/, q{Match unrelated internally inverted <Nl> (LetterNumber)} );
ok( "\N{SUPERSCRIPT ZERO}" !~ m/^<+<Nl>>$/, q{Don't match related <Nl> (LetterNumber)} );
ok( "\N{SUPERSCRIPT ZERO}" =~ m/^<+<-Nl>>$/, q{Match related internally inverted <Nl> (LetterNumber)} );
ok( "\N{SUPERSCRIPT ZERO}" =~ m/^<-<Nl>>$/, q{Match related externally inverted <Nl> (LetterNumber)} );
ok( "\x{1B95}\N{SUPERSCRIPT ZERO}\N{ROMAN NUMERAL ONE}" =~ m/<+<Nl>>/, q{Match unanchored <Nl> (LetterNumber)} );
ok( "\N{RUNIC ARLAUG SYMBOL}" =~ m/^<+<LetterNumber>>$/, q{Match <LetterNumber>} );
ok( "\N{RUNIC ARLAUG SYMBOL}" =~ m/^<[A]+<LetterNumber>>$/, q{Match compound <LetterNumber>} );
ok( "\N{RUNIC ARLAUG SYMBOL}" !~ m/^<-<LetterNumber>>$/, q{Don't match externally inverted <LetterNumber>} );
ok( "\N{RUNIC ARLAUG SYMBOL}" !~ m/^<[A]-<LetterNumber>>$/, q{Don't match compound inverted <LetterNumber>} );
ok( "\N{RUNIC ARLAUG SYMBOL}" !~ m/^<+<-LetterNumber>>$/, q{Don't match internally inverted <LetterNumber>} );
ok( "\x{9B4F}" !~ m/^<+<LetterNumber>>$/, q{Don't match unrelated <LetterNumber>} );
ok( "\x{9B4F}" =~ m/^<-<LetterNumber>>$/, q{Match unrelated externally inverted <LetterNumber>} );
ok( "\x{9B4F}" =~ m/^<+<-LetterNumber>>$/, q{Match unrelated internally inverted <LetterNumber>} );
ok( "\x{9B4F}" !~ m/^<+<LetterNumber>>$/, q{Don't match related <LetterNumber>} );
ok( "\x{9B4F}" =~ m/^<+<-LetterNumber>>$/, q{Match related internally inverted <LetterNumber>} );
ok( "\x{9B4F}" =~ m/^<-<LetterNumber>>$/, q{Match related externally inverted <LetterNumber>} );
ok( "\x{9B4F}\x{9B4F}\N{RUNIC ARLAUG SYMBOL}" =~ m/<+<LetterNumber>>/, q{Match unanchored <LetterNumber>} );
# No OtherNumber
ok( "\N{SUPERSCRIPT TWO}" =~ m/^<+<No>>$/, q{Match <No> (OtherNumber)} );
ok( "\N{SUPERSCRIPT TWO}" =~ m/^<[A]+<No>>$/, q{Match compound <No> (OtherNumber)} );
ok( "\N{SUPERSCRIPT TWO}" !~ m/^<-<No>>$/, q{Don't match externally inverted <No> (OtherNumber)} );
ok( "\N{SUPERSCRIPT TWO}" !~ m/^<[A]-<No>>$/, q{Don't match compound inverted <No> (OtherNumber)} );
ok( "\N{SUPERSCRIPT TWO}" !~ m/^<+<-No>>$/, q{Don't match internally inverted <No> (OtherNumber)} );
ok( "\x{8F9A}" !~ m/^<+<No>>$/, q{Don't match unrelated <No> (OtherNumber)} );
ok( "\x{8F9A}" =~ m/^<-<No>>$/, q{Match unrelated externally inverted <No> (OtherNumber)} );
ok( "\x{8F9A}" =~ m/^<+<-No>>$/, q{Match unrelated internally inverted <No> (OtherNumber)} );
ok( "\N{DIGIT ZERO}" !~ m/^<+<No>>$/, q{Don't match related <No> (OtherNumber)} );
ok( "\N{DIGIT ZERO}" =~ m/^<+<-No>>$/, q{Match related internally inverted <No> (OtherNumber)} );
ok( "\N{DIGIT ZERO}" =~ m/^<-<No>>$/, q{Match related externally inverted <No> (OtherNumber)} );
ok( "\x{8F9A}\N{DIGIT ZERO}\N{SUPERSCRIPT TWO}" =~ m/<+<No>>/, q{Match unanchored <No> (OtherNumber)} );
ok( "\N{BENGALI CURRENCY NUMERATOR ONE}" =~ m/^<+<OtherNumber>>$/, q{Match <OtherNumber>} );
ok( "\N{BENGALI CURRENCY NUMERATOR ONE}" =~ m/^<[A]+<OtherNumber>>$/, q{Match compound <OtherNumber>} );
ok( "\N{BENGALI CURRENCY NUMERATOR ONE}" !~ m/^<-<OtherNumber>>$/, q{Don't match externally inverted <OtherNumber>} );
ok( "\N{BENGALI CURRENCY NUMERATOR ONE}" !~ m/^<[A]-<OtherNumber>>$/, q{Don't match compound inverted <OtherNumber>} );
ok( "\N{BENGALI CURRENCY NUMERATOR ONE}" !~ m/^<+<-OtherNumber>>$/, q{Don't match internally inverted <OtherNumber>} );
ok( "\x{0522}" !~ m/^<+<OtherNumber>>$/, q{Don't match unrelated <OtherNumber>} );
ok( "\x{0522}" =~ m/^<-<OtherNumber>>$/, q{Match unrelated externally inverted <OtherNumber>} );
ok( "\x{0522}" =~ m/^<+<-OtherNumber>>$/, q{Match unrelated internally inverted <OtherNumber>} );
ok( "\x{0522}\N{BENGALI CURRENCY NUMERATOR ONE}" =~ m/<+<OtherNumber>>/, q{Match unanchored <OtherNumber>} );
# P Punctuation
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<P>>$/, q{Match <P> (Punctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<[A]+<P>>$/, q{Match compound <P> (Punctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<-<P>>$/, q{Don't match externally inverted <P> (Punctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<[A]-<P>>$/, q{Don't match compound inverted <P> (Punctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<-P>>$/, q{Don't match internally inverted <P> (Punctuation)} );
ok( "\x{3753}" !~ m/^<+<P>>$/, q{Don't match unrelated <P> (Punctuation)} );
ok( "\x{3753}" =~ m/^<-<P>>$/, q{Match unrelated externally inverted <P> (Punctuation)} );
ok( "\x{3753}" =~ m/^<+<-P>>$/, q{Match unrelated internally inverted <P> (Punctuation)} );
ok( "\x{3753}\N{EXCLAMATION MARK}" =~ m/<+<P>>/, q{Match unanchored <P> (Punctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<Punctuation>>$/, q{Match <Punctuation>} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<[A]+<Punctuation>>$/, q{Match compound <Punctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<-<Punctuation>>$/, q{Don't match externally inverted <Punctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<[A]-<Punctuation>>$/, q{Don't match compound inverted <Punctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<-Punctuation>>$/, q{Don't match internally inverted <Punctuation>} );
ok( "\x{9C5E}" !~ m/^<+<Punctuation>>$/, q{Don't match unrelated <Punctuation>} );
ok( "\x{9C5E}" =~ m/^<-<Punctuation>>$/, q{Match unrelated externally inverted <Punctuation>} );
ok( "\x{9C5E}" =~ m/^<+<-Punctuation>>$/, q{Match unrelated internally inverted <Punctuation>} );
ok( "\x{9C5E}\N{EXCLAMATION MARK}" =~ m/<+<Punctuation>>/, q{Match unanchored <Punctuation>} );
# Pc ConnectorPunctuation
ok( "\N{LOW LINE}" =~ m/^<+<Pc>>$/, q{Match <Pc> (ConnectorPunctuation)} );
ok( "\N{LOW LINE}" =~ m/^<[A]+<Pc>>$/, q{Match compound <Pc> (ConnectorPunctuation)} );
ok( "\N{LOW LINE}" !~ m/^<-<Pc>>$/, q{Don't match externally inverted <Pc> (ConnectorPunctuation)} );
ok( "\N{LOW LINE}" !~ m/^<[A]-<Pc>>$/, q{Don't match compound inverted <Pc> (ConnectorPunctuation)} );
ok( "\N{LOW LINE}" !~ m/^<+<-Pc>>$/, q{Don't match internally inverted <Pc> (ConnectorPunctuation)} );
ok( "\x{B2C9}" !~ m/^<+<Pc>>$/, q{Don't match unrelated <Pc> (ConnectorPunctuation)} );
ok( "\x{B2C9}" =~ m/^<-<Pc>>$/, q{Match unrelated externally inverted <Pc> (ConnectorPunctuation)} );
ok( "\x{B2C9}" =~ m/^<+<-Pc>>$/, q{Match unrelated internally inverted <Pc> (ConnectorPunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<Pc>>$/, q{Don't match related <Pc> (ConnectorPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<-Pc>>$/, q{Match related internally inverted <Pc> (ConnectorPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<-<Pc>>$/, q{Match related externally inverted <Pc> (ConnectorPunctuation)} );
ok( "\x{B2C9}\N{EXCLAMATION MARK}\N{LOW LINE}" =~ m/<+<Pc>>/, q{Match unanchored <Pc> (ConnectorPunctuation)} );
ok( "\N{LOW LINE}" =~ m/^<+<ConnectorPunctuation>>$/, q{Match <ConnectorPunctuation>} );
ok( "\N{LOW LINE}" =~ m/^<[A]+<ConnectorPunctuation>>$/, q{Match compound <ConnectorPunctuation>} );
ok( "\N{LOW LINE}" !~ m/^<-<ConnectorPunctuation>>$/, q{Don't match externally inverted <ConnectorPunctuation>} );
ok( "\N{LOW LINE}" !~ m/^<[A]-<ConnectorPunctuation>>$/, q{Don't match compound inverted <ConnectorPunctuation>} );
ok( "\N{LOW LINE}" !~ m/^<+<-ConnectorPunctuation>>$/, q{Don't match internally inverted <ConnectorPunctuation>} );
ok( "\x{AEFC}" !~ m/^<+<ConnectorPunctuation>>$/, q{Don't match unrelated <ConnectorPunctuation>} );
ok( "\x{AEFC}" =~ m/^<-<ConnectorPunctuation>>$/, q{Match unrelated externally inverted <ConnectorPunctuation>} );
ok( "\x{AEFC}" =~ m/^<+<-ConnectorPunctuation>>$/, q{Match unrelated internally inverted <ConnectorPunctuation>} );
ok( "\x{AEFC}\N{LOW LINE}" =~ m/<+<ConnectorPunctuation>>/, q{Match unanchored <ConnectorPunctuation>} );
# Pd DashPunctuation
ok( "\N{HYPHEN-MINUS}" =~ m/^<+<Pd>>$/, q{Match <Pd> (DashPunctuation)} );
ok( "\N{HYPHEN-MINUS}" =~ m/^<[A]+<Pd>>$/, q{Match compound <Pd> (DashPunctuation)} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<-<Pd>>$/, q{Don't match externally inverted <Pd> (DashPunctuation)} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<[A]-<Pd>>$/, q{Don't match compound inverted <Pd> (DashPunctuation)} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<+<-Pd>>$/, q{Don't match internally inverted <Pd> (DashPunctuation)} );
ok( "\x{86C8}" !~ m/^<+<Pd>>$/, q{Don't match unrelated <Pd> (DashPunctuation)} );
ok( "\x{86C8}" =~ m/^<-<Pd>>$/, q{Match unrelated externally inverted <Pd> (DashPunctuation)} );
ok( "\x{86C8}" =~ m/^<+<-Pd>>$/, q{Match unrelated internally inverted <Pd> (DashPunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<Pd>>$/, q{Don't match related <Pd> (DashPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<-Pd>>$/, q{Match related internally inverted <Pd> (DashPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<-<Pd>>$/, q{Match related externally inverted <Pd> (DashPunctuation)} );
ok( "\x{86C8}\N{EXCLAMATION MARK}\N{HYPHEN-MINUS}" =~ m/<+<Pd>>/, q{Match unanchored <Pd> (DashPunctuation)} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/^<+<DashPunctuation>>$/, q{Match <DashPunctuation>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/^<[A]+<DashPunctuation>>$/, q{Match compound <DashPunctuation>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<-<DashPunctuation>>$/, q{Don't match externally inverted <DashPunctuation>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<[A]-<DashPunctuation>>$/, q{Don't match compound inverted <DashPunctuation>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<+<-DashPunctuation>>$/, q{Don't match internally inverted <DashPunctuation>} );
ok( "\N{HIRAGANA LETTER NI}" !~ m/^<+<DashPunctuation>>$/, q{Don't match unrelated <DashPunctuation>} );
ok( "\N{HIRAGANA LETTER NI}" =~ m/^<-<DashPunctuation>>$/, q{Match unrelated externally inverted <DashPunctuation>} );
ok( "\N{HIRAGANA LETTER NI}" =~ m/^<+<-DashPunctuation>>$/, q{Match unrelated internally inverted <DashPunctuation>} );
ok( "\N{HIRAGANA LETTER NI}\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/<+<DashPunctuation>>/, q{Match unanchored <DashPunctuation>} );
# Ps OpenPunctuation
ok( "\N{LEFT PARENTHESIS}" =~ m/^<+<Ps>>$/, q{Match <Ps> (OpenPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" =~ m/^<[A]+<Ps>>$/, q{Match compound <Ps> (OpenPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<-<Ps>>$/, q{Don't match externally inverted <Ps> (OpenPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<[A]-<Ps>>$/, q{Don't match compound inverted <Ps> (OpenPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<+<-Ps>>$/, q{Don't match internally inverted <Ps> (OpenPunctuation)} );
ok( "\x{B601}" !~ m/^<+<Ps>>$/, q{Don't match unrelated <Ps> (OpenPunctuation)} );
ok( "\x{B601}" =~ m/^<-<Ps>>$/, q{Match unrelated externally inverted <Ps> (OpenPunctuation)} );
ok( "\x{B601}" =~ m/^<+<-Ps>>$/, q{Match unrelated internally inverted <Ps> (OpenPunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<Ps>>$/, q{Don't match related <Ps> (OpenPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<-Ps>>$/, q{Match related internally inverted <Ps> (OpenPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<-<Ps>>$/, q{Match related externally inverted <Ps> (OpenPunctuation)} );
ok( "\x{B601}\N{EXCLAMATION MARK}\N{LEFT PARENTHESIS}" =~ m/<+<Ps>>/, q{Match unanchored <Ps> (OpenPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" =~ m/^<+<OpenPunctuation>>$/, q{Match <OpenPunctuation>} );
ok( "\N{LEFT PARENTHESIS}" =~ m/^<[A]+<OpenPunctuation>>$/, q{Match compound <OpenPunctuation>} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<-<OpenPunctuation>>$/, q{Don't match externally inverted <OpenPunctuation>} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<[A]-<OpenPunctuation>>$/, q{Don't match compound inverted <OpenPunctuation>} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<+<-OpenPunctuation>>$/, q{Don't match internally inverted <OpenPunctuation>} );
ok( "\x{89C1}" !~ m/^<+<OpenPunctuation>>$/, q{Don't match unrelated <OpenPunctuation>} );
ok( "\x{89C1}" =~ m/^<-<OpenPunctuation>>$/, q{Match unrelated externally inverted <OpenPunctuation>} );
ok( "\x{89C1}" =~ m/^<+<-OpenPunctuation>>$/, q{Match unrelated internally inverted <OpenPunctuation>} );
ok( "\x{89C1}\N{LEFT PARENTHESIS}" =~ m/<+<OpenPunctuation>>/, q{Match unanchored <OpenPunctuation>} );
# Pe ClosePunctuation
ok( "\N{RIGHT PARENTHESIS}" =~ m/^<+<Pe>>$/, q{Match <Pe> (ClosePunctuation)} );
ok( "\N{RIGHT PARENTHESIS}" =~ m/^<[A]+<Pe>>$/, q{Match compound <Pe> (ClosePunctuation)} );
ok( "\N{RIGHT PARENTHESIS}" !~ m/^<-<Pe>>$/, q{Don't match externally inverted <Pe> (ClosePunctuation)} );
ok( "\N{RIGHT PARENTHESIS}" !~ m/^<[A]-<Pe>>$/, q{Don't match compound inverted <Pe> (ClosePunctuation)} );
ok( "\N{RIGHT PARENTHESIS}" !~ m/^<+<-Pe>>$/, q{Don't match internally inverted <Pe> (ClosePunctuation)} );
ok( "\x{5561}" !~ m/^<+<Pe>>$/, q{Don't match unrelated <Pe> (ClosePunctuation)} );
ok( "\x{5561}" =~ m/^<-<Pe>>$/, q{Match unrelated externally inverted <Pe> (ClosePunctuation)} );
ok( "\x{5561}" =~ m/^<+<-Pe>>$/, q{Match unrelated internally inverted <Pe> (ClosePunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<Pe>>$/, q{Don't match related <Pe> (ClosePunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<-Pe>>$/, q{Match related internally inverted <Pe> (ClosePunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<-<Pe>>$/, q{Match related externally inverted <Pe> (ClosePunctuation)} );
ok( "\x{5561}\N{EXCLAMATION MARK}\N{RIGHT PARENTHESIS}" =~ m/<+<Pe>>/, q{Match unanchored <Pe> (ClosePunctuation)} );
ok( "\N{RIGHT PARENTHESIS}" =~ m/^<+<ClosePunctuation>>$/, q{Match <ClosePunctuation>} );
ok( "\N{RIGHT PARENTHESIS}" =~ m/^<[A]+<ClosePunctuation>>$/, q{Match compound <ClosePunctuation>} );
ok( "\N{RIGHT PARENTHESIS}" !~ m/^<-<ClosePunctuation>>$/, q{Don't match externally inverted <ClosePunctuation>} );
ok( "\N{RIGHT PARENTHESIS}" !~ m/^<[A]-<ClosePunctuation>>$/, q{Don't match compound inverted <ClosePunctuation>} );
ok( "\N{RIGHT PARENTHESIS}" !~ m/^<+<-ClosePunctuation>>$/, q{Don't match internally inverted <ClosePunctuation>} );
ok( "\x{98D0}" !~ m/^<+<ClosePunctuation>>$/, q{Don't match unrelated <ClosePunctuation>} );
ok( "\x{98D0}" =~ m/^<-<ClosePunctuation>>$/, q{Match unrelated externally inverted <ClosePunctuation>} );
ok( "\x{98D0}" =~ m/^<+<-ClosePunctuation>>$/, q{Match unrelated internally inverted <ClosePunctuation>} );
ok( "\x{98D0}\N{RIGHT PARENTHESIS}" =~ m/<+<ClosePunctuation>>/, q{Match unanchored <ClosePunctuation>} );
# Pi InitialPunctuation
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^<+<Pi>>$/, q{Match <Pi> (InitialPunctuation)} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^<[A]+<Pi>>$/, q{Match compound <Pi> (InitialPunctuation)} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<-<Pi>>$/, q{Don't match externally inverted <Pi> (InitialPunctuation)} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<[A]-<Pi>>$/, q{Don't match compound inverted <Pi> (InitialPunctuation)} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<+<-Pi>>$/, q{Don't match internally inverted <Pi> (InitialPunctuation)} );
ok( "\x{D76F}" !~ m/^<+<Pi>>$/, q{Don't match unrelated <Pi> (InitialPunctuation)} );
ok( "\x{D76F}" =~ m/^<-<Pi>>$/, q{Match unrelated externally inverted <Pi> (InitialPunctuation)} );
ok( "\x{D76F}" =~ m/^<+<-Pi>>$/, q{Match unrelated internally inverted <Pi> (InitialPunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<Pi>>$/, q{Don't match related <Pi> (InitialPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<-Pi>>$/, q{Match related internally inverted <Pi> (InitialPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<-<Pi>>$/, q{Match related externally inverted <Pi> (InitialPunctuation)} );
ok( "\x{D76F}\N{EXCLAMATION MARK}\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/<+<Pi>>/, q{Match unanchored <Pi> (InitialPunctuation)} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^<+<InitialPunctuation>>$/, q{Match <InitialPunctuation>} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/^<[A]+<InitialPunctuation>>$/, q{Match compound <InitialPunctuation>} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<-<InitialPunctuation>>$/, q{Don't match externally inverted <InitialPunctuation>} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<[A]-<InitialPunctuation>>$/, q{Don't match compound inverted <InitialPunctuation>} );
ok( "\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" !~ m/^<+<-InitialPunctuation>>$/, q{Don't match internally inverted <InitialPunctuation>} );
ok( "\x{C96E}" !~ m/^<+<InitialPunctuation>>$/, q{Don't match unrelated <InitialPunctuation>} );
ok( "\x{C96E}" =~ m/^<-<InitialPunctuation>>$/, q{Match unrelated externally inverted <InitialPunctuation>} );
ok( "\x{C96E}" =~ m/^<+<-InitialPunctuation>>$/, q{Match unrelated internally inverted <InitialPunctuation>} );
ok( "\x{C96E}\N{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}" =~ m/<+<InitialPunctuation>>/, q{Match unanchored <InitialPunctuation>} );
# Pf FinalPunctuation
ok( "\N{RIGHT SINGLE QUOTATION MARK}" =~ m/^<+<Pf>>$/, q{Match <Pf> (FinalPunctuation)} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" =~ m/^<[A]+<Pf>>$/, q{Match compound <Pf> (FinalPunctuation)} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" !~ m/^<-<Pf>>$/, q{Don't match externally inverted <Pf> (FinalPunctuation)} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" !~ m/^<[A]-<Pf>>$/, q{Don't match compound inverted <Pf> (FinalPunctuation)} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" !~ m/^<+<-Pf>>$/, q{Don't match internally inverted <Pf> (FinalPunctuation)} );
ok( "\x{0515}" !~ m/^<+<Pf>>$/, q{Don't match unrelated <Pf> (FinalPunctuation)} );
ok( "\x{0515}" =~ m/^<-<Pf>>$/, q{Match unrelated externally inverted <Pf> (FinalPunctuation)} );
ok( "\x{0515}" =~ m/^<+<-Pf>>$/, q{Match unrelated internally inverted <Pf> (FinalPunctuation)} );
ok( "\N{ARMENIAN APOSTROPHE}" !~ m/^<+<Pf>>$/, q{Don't match related <Pf> (FinalPunctuation)} );
ok( "\N{ARMENIAN APOSTROPHE}" =~ m/^<+<-Pf>>$/, q{Match related internally inverted <Pf> (FinalPunctuation)} );
ok( "\N{ARMENIAN APOSTROPHE}" =~ m/^<-<Pf>>$/, q{Match related externally inverted <Pf> (FinalPunctuation)} );
ok( "\x{0515}\N{ARMENIAN APOSTROPHE}\N{RIGHT SINGLE QUOTATION MARK}" =~ m/<+<Pf>>/, q{Match unanchored <Pf> (FinalPunctuation)} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" =~ m/^<+<FinalPunctuation>>$/, q{Match <FinalPunctuation>} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" =~ m/^<[A]+<FinalPunctuation>>$/, q{Match compound <FinalPunctuation>} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" !~ m/^<-<FinalPunctuation>>$/, q{Don't match externally inverted <FinalPunctuation>} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" !~ m/^<[A]-<FinalPunctuation>>$/, q{Don't match compound inverted <FinalPunctuation>} );
ok( "\N{RIGHT SINGLE QUOTATION MARK}" !~ m/^<+<-FinalPunctuation>>$/, q{Don't match internally inverted <FinalPunctuation>} );
ok( "\N{MODIFIER LETTER PRIME}" !~ m/^<+<FinalPunctuation>>$/, q{Don't match unrelated <FinalPunctuation>} );
ok( "\N{MODIFIER LETTER PRIME}" =~ m/^<-<FinalPunctuation>>$/, q{Match unrelated externally inverted <FinalPunctuation>} );
ok( "\N{MODIFIER LETTER PRIME}" =~ m/^<+<-FinalPunctuation>>$/, q{Match unrelated internally inverted <FinalPunctuation>} );
ok( "\N{MODIFIER LETTER PRIME}\N{RIGHT SINGLE QUOTATION MARK}" =~ m/<+<FinalPunctuation>>/, q{Match unanchored <FinalPunctuation>} );
# Po OtherPunctuation
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<Po>>$/, q{Match <Po> (OtherPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<[A]+<Po>>$/, q{Match compound <Po> (OtherPunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<-<Po>>$/, q{Don't match externally inverted <Po> (OtherPunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<[A]-<Po>>$/, q{Don't match compound inverted <Po> (OtherPunctuation)} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<-Po>>$/, q{Don't match internally inverted <Po> (OtherPunctuation)} );
ok( "\x{A586}" !~ m/^<+<Po>>$/, q{Don't match unrelated <Po> (OtherPunctuation)} );
ok( "\x{A586}" =~ m/^<-<Po>>$/, q{Match unrelated externally inverted <Po> (OtherPunctuation)} );
ok( "\x{A586}" =~ m/^<+<-Po>>$/, q{Match unrelated internally inverted <Po> (OtherPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<+<Po>>$/, q{Don't match related <Po> (OtherPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" =~ m/^<+<-Po>>$/, q{Match related internally inverted <Po> (OtherPunctuation)} );
ok( "\N{LEFT PARENTHESIS}" =~ m/^<-<Po>>$/, q{Match related externally inverted <Po> (OtherPunctuation)} );
ok( "\x{A586}\N{LEFT PARENTHESIS}\N{EXCLAMATION MARK}" =~ m/<+<Po>>/, q{Match unanchored <Po> (OtherPunctuation)} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<OtherPunctuation>>$/, q{Match <OtherPunctuation>} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<[A]+<OtherPunctuation>>$/, q{Match compound <OtherPunctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<-<OtherPunctuation>>$/, q{Don't match externally inverted <OtherPunctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<[A]-<OtherPunctuation>>$/, q{Don't match compound inverted <OtherPunctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<-OtherPunctuation>>$/, q{Don't match internally inverted <OtherPunctuation>} );
ok( "\x{5FBD}" !~ m/^<+<OtherPunctuation>>$/, q{Don't match unrelated <OtherPunctuation>} );
ok( "\x{5FBD}" =~ m/^<-<OtherPunctuation>>$/, q{Match unrelated externally inverted <OtherPunctuation>} );
ok( "\x{5FBD}" =~ m/^<+<-OtherPunctuation>>$/, q{Match unrelated internally inverted <OtherPunctuation>} );
ok( "\x{5FBD}\N{EXCLAMATION MARK}" =~ m/<+<OtherPunctuation>>/, q{Match unanchored <OtherPunctuation>} );
# S Symbol
ok( "\N{GUJARATI RUPEE SIGN}" =~ m/^<+<S>>$/, q{Match <S> (Symbol)} );
ok( "\N{GUJARATI RUPEE SIGN}" =~ m/^<[A]+<S>>$/, q{Match compound <S> (Symbol)} );
ok( "\N{GUJARATI RUPEE SIGN}" !~ m/^<-<S>>$/, q{Don't match externally inverted <S> (Symbol)} );
ok( "\N{GUJARATI RUPEE SIGN}" !~ m/^<[A]-<S>>$/, q{Don't match compound inverted <S> (Symbol)} );
ok( "\N{GUJARATI RUPEE SIGN}" !~ m/^<+<-S>>$/, q{Don't match internally inverted <S> (Symbol)} );
ok( "\N{GURMUKHI SIGN ADAK BINDI}" !~ m/^<+<S>>$/, q{Don't match unrelated <S> (Symbol)} );
ok( "\N{GURMUKHI SIGN ADAK BINDI}" =~ m/^<-<S>>$/, q{Match unrelated externally inverted <S> (Symbol)} );
ok( "\N{GURMUKHI SIGN ADAK BINDI}" =~ m/^<+<-S>>$/, q{Match unrelated internally inverted <S> (Symbol)} );
ok( "\N{GURMUKHI SIGN ADAK BINDI}\N{GUJARATI RUPEE SIGN}" =~ m/<+<S>>/, q{Match unanchored <S> (Symbol)} );
ok( "\N{LIMBU SIGN LOO}" =~ m/^<+<Symbol>>$/, q{Match <Symbol>} );
ok( "\N{LIMBU SIGN LOO}" =~ m/^<[A]+<Symbol>>$/, q{Match compound <Symbol>} );
ok( "\N{LIMBU SIGN LOO}" !~ m/^<-<Symbol>>$/, q{Don't match externally inverted <Symbol>} );
ok( "\N{LIMBU SIGN LOO}" !~ m/^<[A]-<Symbol>>$/, q{Don't match compound inverted <Symbol>} );
ok( "\N{LIMBU SIGN LOO}" !~ m/^<+<-Symbol>>$/, q{Don't match internally inverted <Symbol>} );
ok( "\x{192C}" !~ m/^<+<Symbol>>$/, q{Don't match unrelated <Symbol>} );
ok( "\x{192C}" =~ m/^<-<Symbol>>$/, q{Match unrelated externally inverted <Symbol>} );
ok( "\x{192C}" =~ m/^<+<-Symbol>>$/, q{Match unrelated internally inverted <Symbol>} );
ok( "\x{192C}\N{LIMBU SIGN LOO}" =~ m/<+<Symbol>>/, q{Match unanchored <Symbol>} );
# Sm MathSymbol
ok( "\N{PLUS SIGN}" =~ m/^<+<Sm>>$/, q{Match <Sm> (MathSymbol)} );
ok( "\N{PLUS SIGN}" =~ m/^<[A]+<Sm>>$/, q{Match compound <Sm> (MathSymbol)} );
ok( "\N{PLUS SIGN}" !~ m/^<-<Sm>>$/, q{Don't match externally inverted <Sm> (MathSymbol)} );
ok( "\N{PLUS SIGN}" !~ m/^<[A]-<Sm>>$/, q{Don't match compound inverted <Sm> (MathSymbol)} );
ok( "\N{PLUS SIGN}" !~ m/^<+<-Sm>>$/, q{Don't match internally inverted <Sm> (MathSymbol)} );
ok( "\x{769B}" !~ m/^<+<Sm>>$/, q{Don't match unrelated <Sm> (MathSymbol)} );
ok( "\x{769B}" =~ m/^<-<Sm>>$/, q{Match unrelated externally inverted <Sm> (MathSymbol)} );
ok( "\x{769B}" =~ m/^<+<-Sm>>$/, q{Match unrelated internally inverted <Sm> (MathSymbol)} );
ok( "\N{YI RADICAL QOT}" !~ m/^<+<Sm>>$/, q{Don't match related <Sm> (MathSymbol)} );
ok( "\N{YI RADICAL QOT}" =~ m/^<+<-Sm>>$/, q{Match related internally inverted <Sm> (MathSymbol)} );
ok( "\N{YI RADICAL QOT}" =~ m/^<-<Sm>>$/, q{Match related externally inverted <Sm> (MathSymbol)} );
ok( "\x{769B}\N{YI RADICAL QOT}\N{PLUS SIGN}" =~ m/<+<Sm>>/, q{Match unanchored <Sm> (MathSymbol)} );
ok( "\N{FRACTION SLASH}" =~ m/^<+<MathSymbol>>$/, q{Match <MathSymbol>} );
ok( "\N{FRACTION SLASH}" =~ m/^<[A]+<MathSymbol>>$/, q{Match compound <MathSymbol>} );
ok( "\N{FRACTION SLASH}" !~ m/^<-<MathSymbol>>$/, q{Don't match externally inverted <MathSymbol>} );
ok( "\N{FRACTION SLASH}" !~ m/^<[A]-<MathSymbol>>$/, q{Don't match compound inverted <MathSymbol>} );
ok( "\N{FRACTION SLASH}" !~ m/^<+<-MathSymbol>>$/, q{Don't match internally inverted <MathSymbol>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI}" !~ m/^<+<MathSymbol>>$/, q{Don't match unrelated <MathSymbol>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI}" =~ m/^<-<MathSymbol>>$/, q{Match unrelated externally inverted <MathSymbol>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI}" =~ m/^<+<-MathSymbol>>$/, q{Match unrelated internally inverted <MathSymbol>} );
ok( "\N{COMBINING LEFT HARPOON ABOVE}" !~ m/^<+<MathSymbol>>$/, q{Don't match related <MathSymbol>} );
ok( "\N{COMBINING LEFT HARPOON ABOVE}" =~ m/^<+<-MathSymbol>>$/, q{Match related internally inverted <MathSymbol>} );
ok( "\N{COMBINING LEFT HARPOON ABOVE}" =~ m/^<-<MathSymbol>>$/, q{Match related externally inverted <MathSymbol>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI}\N{COMBINING LEFT HARPOON ABOVE}\N{FRACTION SLASH}" =~ m/<+<MathSymbol>>/, q{Match unanchored <MathSymbol>} );
# Sc CurrencySymbol
ok( "\N{DOLLAR SIGN}" =~ m/^<+<Sc>>$/, q{Match <Sc> (CurrencySymbol)} );
ok( "\N{DOLLAR SIGN}" =~ m/^<[A]+<Sc>>$/, q{Match compound <Sc> (CurrencySymbol)} );
ok( "\N{DOLLAR SIGN}" !~ m/^<-<Sc>>$/, q{Don't match externally inverted <Sc> (CurrencySymbol)} );
ok( "\N{DOLLAR SIGN}" !~ m/^<[A]-<Sc>>$/, q{Don't match compound inverted <Sc> (CurrencySymbol)} );
ok( "\N{DOLLAR SIGN}" !~ m/^<+<-Sc>>$/, q{Don't match internally inverted <Sc> (CurrencySymbol)} );
ok( "\x{B6B4}" !~ m/^<+<Sc>>$/, q{Don't match unrelated <Sc> (CurrencySymbol)} );
ok( "\x{B6B4}" =~ m/^<-<Sc>>$/, q{Match unrelated externally inverted <Sc> (CurrencySymbol)} );
ok( "\x{B6B4}" =~ m/^<+<-Sc>>$/, q{Match unrelated internally inverted <Sc> (CurrencySymbol)} );
ok( "\N{PLUS SIGN}" !~ m/^<+<Sc>>$/, q{Don't match related <Sc> (CurrencySymbol)} );
ok( "\N{PLUS SIGN}" =~ m/^<+<-Sc>>$/, q{Match related internally inverted <Sc> (CurrencySymbol)} );
ok( "\N{PLUS SIGN}" =~ m/^<-<Sc>>$/, q{Match related externally inverted <Sc> (CurrencySymbol)} );
ok( "\x{B6B4}\N{PLUS SIGN}\N{DOLLAR SIGN}" =~ m/<+<Sc>>/, q{Match unanchored <Sc> (CurrencySymbol)} );
ok( "\N{EURO-CURRENCY SIGN}" =~ m/^<+<CurrencySymbol>>$/, q{Match <CurrencySymbol>} );
ok( "\N{EURO-CURRENCY SIGN}" =~ m/^<[A]+<CurrencySymbol>>$/, q{Match compound <CurrencySymbol>} );
ok( "\N{EURO-CURRENCY SIGN}" !~ m/^<-<CurrencySymbol>>$/, q{Don't match externally inverted <CurrencySymbol>} );
ok( "\N{EURO-CURRENCY SIGN}" !~ m/^<[A]-<CurrencySymbol>>$/, q{Don't match compound inverted <CurrencySymbol>} );
ok( "\N{EURO-CURRENCY SIGN}" !~ m/^<+<-CurrencySymbol>>$/, q{Don't match internally inverted <CurrencySymbol>} );
ok( "\x{1CD3}" !~ m/^<+<CurrencySymbol>>$/, q{Don't match unrelated <CurrencySymbol>} );
ok( "\x{1CD3}" =~ m/^<-<CurrencySymbol>>$/, q{Match unrelated externally inverted <CurrencySymbol>} );
ok( "\x{1CD3}" =~ m/^<+<-CurrencySymbol>>$/, q{Match unrelated internally inverted <CurrencySymbol>} );
ok( "\x{1CD3}\N{EURO-CURRENCY SIGN}" =~ m/<+<CurrencySymbol>>/, q{Match unanchored <CurrencySymbol>} );
# Sk ModifierSymbol
ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^<+<Sk>>$/, q{Match <Sk> (ModifierSymbol)} );
ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^<[A]+<Sk>>$/, q{Match compound <Sk> (ModifierSymbol)} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<-<Sk>>$/, q{Don't match externally inverted <Sk> (ModifierSymbol)} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<[A]-<Sk>>$/, q{Don't match compound inverted <Sk> (ModifierSymbol)} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<+<-Sk>>$/, q{Don't match internally inverted <Sk> (ModifierSymbol)} );
ok( "\x{68FA}" !~ m/^<+<Sk>>$/, q{Don't match unrelated <Sk> (ModifierSymbol)} );
ok( "\x{68FA}" =~ m/^<-<Sk>>$/, q{Match unrelated externally inverted <Sk> (ModifierSymbol)} );
ok( "\x{68FA}" =~ m/^<+<-Sk>>$/, q{Match unrelated internally inverted <Sk> (ModifierSymbol)} );
ok( "\N{YI RADICAL QOT}" !~ m/^<+<Sk>>$/, q{Don't match related <Sk> (ModifierSymbol)} );
ok( "\N{YI RADICAL QOT}" =~ m/^<+<-Sk>>$/, q{Match related internally inverted <Sk> (ModifierSymbol)} );
ok( "\N{YI RADICAL QOT}" =~ m/^<-<Sk>>$/, q{Match related externally inverted <Sk> (ModifierSymbol)} );
ok( "\x{68FA}\N{YI RADICAL QOT}\N{CIRCUMFLEX ACCENT}" =~ m/<+<Sk>>/, q{Match unanchored <Sk> (ModifierSymbol)} );
ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^<+<ModifierSymbol>>$/, q{Match <ModifierSymbol>} );
ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^<[A]+<ModifierSymbol>>$/, q{Match compound <ModifierSymbol>} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<-<ModifierSymbol>>$/, q{Don't match externally inverted <ModifierSymbol>} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<[A]-<ModifierSymbol>>$/, q{Don't match compound inverted <ModifierSymbol>} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<+<-ModifierSymbol>>$/, q{Don't match internally inverted <ModifierSymbol>} );
ok( "\x{69E7}" !~ m/^<+<ModifierSymbol>>$/, q{Don't match unrelated <ModifierSymbol>} );
ok( "\x{69E7}" =~ m/^<-<ModifierSymbol>>$/, q{Match unrelated externally inverted <ModifierSymbol>} );
ok( "\x{69E7}" =~ m/^<+<-ModifierSymbol>>$/, q{Match unrelated internally inverted <ModifierSymbol>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<ModifierSymbol>>$/, q{Don't match related <ModifierSymbol>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<-ModifierSymbol>>$/, q{Match related internally inverted <ModifierSymbol>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-<ModifierSymbol>>$/, q{Match related externally inverted <ModifierSymbol>} );
ok( "\x{69E7}\N{COMBINING GRAVE ACCENT}\N{CIRCUMFLEX ACCENT}" =~ m/<+<ModifierSymbol>>/, q{Match unanchored <ModifierSymbol>} );
# So OtherSymbol
ok( "\N{YI RADICAL QOT}" =~ m/^<+<So>>$/, q{Match <So> (OtherSymbol)} );
ok( "\N{YI RADICAL QOT}" =~ m/^<[A]+<So>>$/, q{Match compound <So> (OtherSymbol)} );
ok( "\N{YI RADICAL QOT}" !~ m/^<-<So>>$/, q{Don't match externally inverted <So> (OtherSymbol)} );
ok( "\N{YI RADICAL QOT}" !~ m/^<[A]-<So>>$/, q{Don't match compound inverted <So> (OtherSymbol)} );
ok( "\N{YI RADICAL QOT}" !~ m/^<+<-So>>$/, q{Don't match internally inverted <So> (OtherSymbol)} );
ok( "\x{8C90}" !~ m/^<+<So>>$/, q{Don't match unrelated <So> (OtherSymbol)} );
ok( "\x{8C90}" =~ m/^<-<So>>$/, q{Match unrelated externally inverted <So> (OtherSymbol)} );
ok( "\x{8C90}" =~ m/^<+<-So>>$/, q{Match unrelated internally inverted <So> (OtherSymbol)} );
ok( "\N{DOLLAR SIGN}" !~ m/^<+<So>>$/, q{Don't match related <So> (OtherSymbol)} );
ok( "\N{DOLLAR SIGN}" =~ m/^<+<-So>>$/, q{Match related internally inverted <So> (OtherSymbol)} );
ok( "\N{DOLLAR SIGN}" =~ m/^<-<So>>$/, q{Match related externally inverted <So> (OtherSymbol)} );
ok( "\x{8C90}\N{DOLLAR SIGN}\N{YI RADICAL QOT}" =~ m/<+<So>>/, q{Match unanchored <So> (OtherSymbol)} );
ok( "\N{YI RADICAL QOT}" =~ m/^<+<OtherSymbol>>$/, q{Match <OtherSymbol>} );
ok( "\N{YI RADICAL QOT}" =~ m/^<[A]+<OtherSymbol>>$/, q{Match compound <OtherSymbol>} );
ok( "\N{YI RADICAL QOT}" !~ m/^<-<OtherSymbol>>$/, q{Don't match externally inverted <OtherSymbol>} );
ok( "\N{YI RADICAL QOT}" !~ m/^<[A]-<OtherSymbol>>$/, q{Don't match compound inverted <OtherSymbol>} );
ok( "\N{YI RADICAL QOT}" !~ m/^<+<-OtherSymbol>>$/, q{Don't match internally inverted <OtherSymbol>} );
ok( "\x{95A7}" !~ m/^<+<OtherSymbol>>$/, q{Don't match unrelated <OtherSymbol>} );
ok( "\x{95A7}" =~ m/^<-<OtherSymbol>>$/, q{Match unrelated externally inverted <OtherSymbol>} );
ok( "\x{95A7}" =~ m/^<+<-OtherSymbol>>$/, q{Match unrelated internally inverted <OtherSymbol>} );
ok( "\x{95A7}\N{YI RADICAL QOT}" =~ m/<+<OtherSymbol>>/, q{Match unanchored <OtherSymbol>} );
# Z Separator
ok( "\N{SPACE}" =~ m/^<+<Z>>$/, q{Match <Z> (Separator)} );
ok( "\N{SPACE}" =~ m/^<[A]+<Z>>$/, q{Match compound <Z> (Separator)} );
ok( "\N{SPACE}" !~ m/^<-<Z>>$/, q{Don't match externally inverted <Z> (Separator)} );
ok( "\N{SPACE}" !~ m/^<[A]-<Z>>$/, q{Don't match compound inverted <Z> (Separator)} );
ok( "\N{SPACE}" !~ m/^<+<-Z>>$/, q{Don't match internally inverted <Z> (Separator)} );
ok( "\x{D222}" !~ m/^<+<Z>>$/, q{Don't match unrelated <Z> (Separator)} );
ok( "\x{D222}" =~ m/^<-<Z>>$/, q{Match unrelated externally inverted <Z> (Separator)} );
ok( "\x{D222}" =~ m/^<+<-Z>>$/, q{Match unrelated internally inverted <Z> (Separator)} );
ok( "\x{D222}\N{SPACE}" =~ m/<+<Z>>/, q{Match unanchored <Z> (Separator)} );
ok( "\N{SPACE}" =~ m/^<+<Separator>>$/, q{Match <Separator>} );
ok( "\N{SPACE}" =~ m/^<[A]+<Separator>>$/, q{Match compound <Separator>} );
ok( "\N{SPACE}" !~ m/^<-<Separator>>$/, q{Don't match externally inverted <Separator>} );
ok( "\N{SPACE}" !~ m/^<[A]-<Separator>>$/, q{Don't match compound inverted <Separator>} );
ok( "\N{SPACE}" !~ m/^<+<-Separator>>$/, q{Don't match internally inverted <Separator>} );
ok( "\x{D7B7}" !~ m/^<+<Separator>>$/, q{Don't match unrelated <Separator>} );
ok( "\x{D7B7}" =~ m/^<-<Separator>>$/, q{Match unrelated externally inverted <Separator>} );
ok( "\x{D7B7}" =~ m/^<+<-Separator>>$/, q{Match unrelated internally inverted <Separator>} );
ok( "\N{DOLLAR SIGN}" !~ m/^<+<Separator>>$/, q{Don't match related <Separator>} );
ok( "\N{DOLLAR SIGN}" =~ m/^<+<-Separator>>$/, q{Match related internally inverted <Separator>} );
ok( "\N{DOLLAR SIGN}" =~ m/^<-<Separator>>$/, q{Match related externally inverted <Separator>} );
ok( "\x{D7B7}\N{DOLLAR SIGN}\N{SPACE}" =~ m/<+<Separator>>/, q{Match unanchored <Separator>} );
# Zs SpaceSeparator
ok( "\N{SPACE}" =~ m/^<+<Zs>>$/, q{Match <Zs> (SpaceSeparator)} );
ok( "\N{SPACE}" =~ m/^<[A]+<Zs>>$/, q{Match compound <Zs> (SpaceSeparator)} );
ok( "\N{SPACE}" !~ m/^<-<Zs>>$/, q{Don't match externally inverted <Zs> (SpaceSeparator)} );
ok( "\N{SPACE}" !~ m/^<[A]-<Zs>>$/, q{Don't match compound inverted <Zs> (SpaceSeparator)} );
ok( "\N{SPACE}" !~ m/^<+<-Zs>>$/, q{Don't match internally inverted <Zs> (SpaceSeparator)} );
ok( "\x{5918}" !~ m/^<+<Zs>>$/, q{Don't match unrelated <Zs> (SpaceSeparator)} );
ok( "\x{5918}" =~ m/^<-<Zs>>$/, q{Match unrelated externally inverted <Zs> (SpaceSeparator)} );
ok( "\x{5918}" =~ m/^<+<-Zs>>$/, q{Match unrelated internally inverted <Zs> (SpaceSeparator)} );
ok( "\N{LINE SEPARATOR}" !~ m/^<+<Zs>>$/, q{Don't match related <Zs> (SpaceSeparator)} );
ok( "\N{LINE SEPARATOR}" =~ m/^<+<-Zs>>$/, q{Match related internally inverted <Zs> (SpaceSeparator)} );
ok( "\N{LINE SEPARATOR}" =~ m/^<-<Zs>>$/, q{Match related externally inverted <Zs> (SpaceSeparator)} );
ok( "\x{5918}\N{LINE SEPARATOR}\N{SPACE}" =~ m/<+<Zs>>/, q{Match unanchored <Zs> (SpaceSeparator)} );
ok( "\N{SPACE}" =~ m/^<+<SpaceSeparator>>$/, q{Match <SpaceSeparator>} );
ok( "\N{SPACE}" =~ m/^<[A]+<SpaceSeparator>>$/, q{Match compound <SpaceSeparator>} );
ok( "\N{SPACE}" !~ m/^<-<SpaceSeparator>>$/, q{Don't match externally inverted <SpaceSeparator>} );
ok( "\N{SPACE}" !~ m/^<[A]-<SpaceSeparator>>$/, q{Don't match compound inverted <SpaceSeparator>} );
ok( "\N{SPACE}" !~ m/^<+<-SpaceSeparator>>$/, q{Don't match internally inverted <SpaceSeparator>} );
ok( "\x{3704}" !~ m/^<+<SpaceSeparator>>$/, q{Don't match unrelated <SpaceSeparator>} );
ok( "\x{3704}" =~ m/^<-<SpaceSeparator>>$/, q{Match unrelated externally inverted <SpaceSeparator>} );
ok( "\x{3704}" =~ m/^<+<-SpaceSeparator>>$/, q{Match unrelated internally inverted <SpaceSeparator>} );
ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" !~ m/^<+<SpaceSeparator>>$/, q{Don't match related <SpaceSeparator>} );
ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m/^<+<-SpaceSeparator>>$/, q{Match related internally inverted <SpaceSeparator>} );
ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m/^<-<SpaceSeparator>>$/, q{Match related externally inverted <SpaceSeparator>} );
ok( "\x{3704}\N{HEXAGRAM FOR THE CREATIVE HEAVEN}\N{SPACE}" =~ m/<+<SpaceSeparator>>/, q{Match unanchored <SpaceSeparator>} );
# Zl LineSeparator
ok( "\N{LINE SEPARATOR}" =~ m/^<+<Zl>>$/, q{Match <Zl> (LineSeparator)} );
ok( "\N{LINE SEPARATOR}" =~ m/^<[A]+<Zl>>$/, q{Match compound <Zl> (LineSeparator)} );
ok( "\N{LINE SEPARATOR}" !~ m/^<-<Zl>>$/, q{Don't match externally inverted <Zl> (LineSeparator)} );
ok( "\N{LINE SEPARATOR}" !~ m/^<[A]-<Zl>>$/, q{Don't match compound inverted <Zl> (LineSeparator)} );
ok( "\N{LINE SEPARATOR}" !~ m/^<+<-Zl>>$/, q{Don't match internally inverted <Zl> (LineSeparator)} );
ok( "\x{ADAD}" !~ m/^<+<Zl>>$/, q{Don't match unrelated <Zl> (LineSeparator)} );
ok( "\x{ADAD}" =~ m/^<-<Zl>>$/, q{Match unrelated externally inverted <Zl> (LineSeparator)} );
ok( "\x{ADAD}" =~ m/^<+<-Zl>>$/, q{Match unrelated internally inverted <Zl> (LineSeparator)} );
ok( "\N{SPACE}" !~ m/^<+<Zl>>$/, q{Don't match related <Zl> (LineSeparator)} );
ok( "\N{SPACE}" =~ m/^<+<-Zl>>$/, q{Match related internally inverted <Zl> (LineSeparator)} );
ok( "\N{SPACE}" =~ m/^<-<Zl>>$/, q{Match related externally inverted <Zl> (LineSeparator)} );
ok( "\x{ADAD}\N{SPACE}\N{LINE SEPARATOR}" =~ m/<+<Zl>>/, q{Match unanchored <Zl> (LineSeparator)} );
ok( "\N{LINE SEPARATOR}" =~ m/^<+<LineSeparator>>$/, q{Match <LineSeparator>} );
ok( "\N{LINE SEPARATOR}" =~ m/^<[A]+<LineSeparator>>$/, q{Match compound <LineSeparator>} );
ok( "\N{LINE SEPARATOR}" !~ m/^<-<LineSeparator>>$/, q{Don't match externally inverted <LineSeparator>} );
ok( "\N{LINE SEPARATOR}" !~ m/^<[A]-<LineSeparator>>$/, q{Don't match compound inverted <LineSeparator>} );
ok( "\N{LINE SEPARATOR}" !~ m/^<+<-LineSeparator>>$/, q{Don't match internally inverted <LineSeparator>} );
ok( "\x{C5E7}" !~ m/^<+<LineSeparator>>$/, q{Don't match unrelated <LineSeparator>} );
ok( "\x{C5E7}" =~ m/^<-<LineSeparator>>$/, q{Match unrelated externally inverted <LineSeparator>} );
ok( "\x{C5E7}" =~ m/^<+<-LineSeparator>>$/, q{Match unrelated internally inverted <LineSeparator>} );
ok( "\x{C5E7}" !~ m/^<+<LineSeparator>>$/, q{Don't match related <LineSeparator>} );
ok( "\x{C5E7}" =~ m/^<+<-LineSeparator>>$/, q{Match related internally inverted <LineSeparator>} );
ok( "\x{C5E7}" =~ m/^<-<LineSeparator>>$/, q{Match related externally inverted <LineSeparator>} );
ok( "\x{C5E7}\x{C5E7}\N{LINE SEPARATOR}" =~ m/<+<LineSeparator>>/, q{Match unanchored <LineSeparator>} );
# Zp ParagraphSeparator
ok( "\N{PARAGRAPH SEPARATOR}" =~ m/^<+<Zp>>$/, q{Match <Zp> (ParagraphSeparator)} );
ok( "\N{PARAGRAPH SEPARATOR}" =~ m/^<[A]+<Zp>>$/, q{Match compound <Zp> (ParagraphSeparator)} );
ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<-<Zp>>$/, q{Don't match externally inverted <Zp> (ParagraphSeparator)} );
ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<[A]-<Zp>>$/, q{Don't match compound inverted <Zp> (ParagraphSeparator)} );
ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<+<-Zp>>$/, q{Don't match internally inverted <Zp> (ParagraphSeparator)} );
ok( "\N{KHMER SYMBOL LEK ATTAK PRAM-BUON}" !~ m/^<+<Zp>>$/, q{Don't match unrelated <Zp> (ParagraphSeparator)} );
ok( "\N{KHMER SYMBOL LEK ATTAK PRAM-BUON}" =~ m/^<-<Zp>>$/, q{Match unrelated externally inverted <Zp> (ParagraphSeparator)} );
ok( "\N{KHMER SYMBOL LEK ATTAK PRAM-BUON}" =~ m/^<+<-Zp>>$/, q{Match unrelated internally inverted <Zp> (ParagraphSeparator)} );
ok( "\N{MONGOLIAN VOWEL SEPARATOR}" !~ m/^<+<Zp>>$/, q{Don't match related <Zp> (ParagraphSeparator)} );
ok( "\N{MONGOLIAN VOWEL SEPARATOR}" =~ m/^<+<-Zp>>$/, q{Match related internally inverted <Zp> (ParagraphSeparator)} );
ok( "\N{MONGOLIAN VOWEL SEPARATOR}" =~ m/^<-<Zp>>$/, q{Match related externally inverted <Zp> (ParagraphSeparator)} );
ok( "\N{KHMER SYMBOL LEK ATTAK PRAM-BUON}\N{MONGOLIAN VOWEL SEPARATOR}\N{PARAGRAPH SEPARATOR}" =~ m/<+<Zp>>/, q{Match unanchored <Zp> (ParagraphSeparator)} );
ok( "\N{PARAGRAPH SEPARATOR}" =~ m/^<+<ParagraphSeparator>>$/, q{Match <ParagraphSeparator>} );
ok( "\N{PARAGRAPH SEPARATOR}" =~ m/^<[A]+<ParagraphSeparator>>$/, q{Match compound <ParagraphSeparator>} );
ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<-<ParagraphSeparator>>$/, q{Don't match externally inverted <ParagraphSeparator>} );
ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<[A]-<ParagraphSeparator>>$/, q{Don't match compound inverted <ParagraphSeparator>} );
ok( "\N{PARAGRAPH SEPARATOR}" !~ m/^<+<-ParagraphSeparator>>$/, q{Don't match internally inverted <ParagraphSeparator>} );
ok( "\N{HIRAGANA LETTER KA}" !~ m/^<+<ParagraphSeparator>>$/, q{Don't match unrelated <ParagraphSeparator>} );
ok( "\N{HIRAGANA LETTER KA}" =~ m/^<-<ParagraphSeparator>>$/, q{Match unrelated externally inverted <ParagraphSeparator>} );
ok( "\N{HIRAGANA LETTER KA}" =~ m/^<+<-ParagraphSeparator>>$/, q{Match unrelated internally inverted <ParagraphSeparator>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<+<ParagraphSeparator>>$/, q{Don't match related <ParagraphSeparator>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/^<+<-ParagraphSeparator>>$/, q{Match related internally inverted <ParagraphSeparator>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/^<-<ParagraphSeparator>>$/, q{Match related externally inverted <ParagraphSeparator>} );
ok( "\N{HIRAGANA LETTER KA}\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}\N{PARAGRAPH SEPARATOR}" =~ m/<+<ParagraphSeparator>>/, q{Match unanchored <ParagraphSeparator>} );
# C Other
ok( "\x{9FA6}" =~ m/^<+<C>>$/, q{Match <C> (Other)} );
ok( "\x{9FA6}" =~ m/^<[A]+<C>>$/, q{Match compound <C> (Other)} );
ok( "\x{9FA6}" !~ m/^<-<C>>$/, q{Don't match externally inverted <C> (Other)} );
ok( "\x{9FA6}" !~ m/^<[A]-<C>>$/, q{Don't match compound inverted <C> (Other)} );
ok( "\x{9FA6}" !~ m/^<+<-C>>$/, q{Don't match internally inverted <C> (Other)} );
ok( "\x{56E6}" !~ m/^<+<C>>$/, q{Don't match unrelated <C> (Other)} );
ok( "\x{56E6}" =~ m/^<-<C>>$/, q{Match unrelated externally inverted <C> (Other)} );
ok( "\x{56E6}" =~ m/^<+<-C>>$/, q{Match unrelated internally inverted <C> (Other)} );
ok( "\x{56E6}\x{9FA6}" =~ m/<+<C>>/, q{Match unanchored <C> (Other)} );
ok( "\x{0EAC}" =~ m/^<+<Other>>$/, q{Match <Other>} );
ok( "\x{0EAC}" =~ m/^<[A]+<Other>>$/, q{Match compound <Other>} );
ok( "\x{0EAC}" !~ m/^<-<Other>>$/, q{Don't match externally inverted <Other>} );
ok( "\x{0EAC}" !~ m/^<[A]-<Other>>$/, q{Don't match compound inverted <Other>} );
ok( "\x{0EAC}" !~ m/^<+<-Other>>$/, q{Don't match internally inverted <Other>} );
ok( "\N{LAO LETTER HO SUNG}" !~ m/^<+<Other>>$/, q{Don't match unrelated <Other>} );
ok( "\N{LAO LETTER HO SUNG}" =~ m/^<-<Other>>$/, q{Match unrelated externally inverted <Other>} );
ok( "\N{LAO LETTER HO SUNG}" =~ m/^<+<-Other>>$/, q{Match unrelated internally inverted <Other>} );
ok( "\N{LAO LETTER HO SUNG}\x{0EAC}" =~ m/<+<Other>>/, q{Match unanchored <Other>} );
# Cc Control
ok( "\N{NULL}" =~ m/^<+<Cc>>$/, q{Match <Cc> (Control)} );
ok( "\N{NULL}" =~ m/^<[A]+<Cc>>$/, q{Match compound <Cc> (Control)} );
ok( "\N{NULL}" !~ m/^<-<Cc>>$/, q{Don't match externally inverted <Cc> (Control)} );
ok( "\N{NULL}" !~ m/^<[A]-<Cc>>$/, q{Don't match compound inverted <Cc> (Control)} );
ok( "\N{NULL}" !~ m/^<+<-Cc>>$/, q{Don't match internally inverted <Cc> (Control)} );
ok( "\N{OGONEK}" !~ m/^<+<Cc>>$/, q{Don't match unrelated <Cc> (Control)} );
ok( "\N{OGONEK}" =~ m/^<-<Cc>>$/, q{Match unrelated externally inverted <Cc> (Control)} );
ok( "\N{OGONEK}" =~ m/^<+<-Cc>>$/, q{Match unrelated internally inverted <Cc> (Control)} );
ok( "\x{0358}" !~ m/^<+<Cc>>$/, q{Don't match related <Cc> (Control)} );
ok( "\x{0358}" =~ m/^<+<-Cc>>$/, q{Match related internally inverted <Cc> (Control)} );
ok( "\x{0358}" =~ m/^<-<Cc>>$/, q{Match related externally inverted <Cc> (Control)} );
ok( "\N{OGONEK}\x{0358}\N{NULL}" =~ m/<+<Cc>>/, q{Match unanchored <Cc> (Control)} );
ok( "\N{NULL}" =~ m/^<+<Control>>$/, q{Match <Control>} );
ok( "\N{NULL}" =~ m/^<[A]+<Control>>$/, q{Match compound <Control>} );
ok( "\N{NULL}" !~ m/^<-<Control>>$/, q{Don't match externally inverted <Control>} );
ok( "\N{NULL}" !~ m/^<[A]-<Control>>$/, q{Don't match compound inverted <Control>} );
ok( "\N{NULL}" !~ m/^<+<-Control>>$/, q{Don't match internally inverted <Control>} );
ok( "\x{4A20}" !~ m/^<+<Control>>$/, q{Don't match unrelated <Control>} );
ok( "\x{4A20}" =~ m/^<-<Control>>$/, q{Match unrelated externally inverted <Control>} );
ok( "\x{4A20}" =~ m/^<+<-Control>>$/, q{Match unrelated internally inverted <Control>} );
ok( "\x{4DB6}" !~ m/^<+<Control>>$/, q{Don't match related <Control>} );
ok( "\x{4DB6}" =~ m/^<+<-Control>>$/, q{Match related internally inverted <Control>} );
ok( "\x{4DB6}" =~ m/^<-<Control>>$/, q{Match related externally inverted <Control>} );
ok( "\x{4A20}\x{4DB6}\N{NULL}" =~ m/<+<Control>>/, q{Match unanchored <Control>} );
# Cf Format
ok( "\N{SOFT HYPHEN}" =~ m/^<+<Cf>>$/, q{Match <Cf> (Format)} );
ok( "\N{SOFT HYPHEN}" =~ m/^<[A]+<Cf>>$/, q{Match compound <Cf> (Format)} );
ok( "\N{SOFT HYPHEN}" !~ m/^<-<Cf>>$/, q{Don't match externally inverted <Cf> (Format)} );
ok( "\N{SOFT HYPHEN}" !~ m/^<[A]-<Cf>>$/, q{Don't match compound inverted <Cf> (Format)} );
ok( "\N{SOFT HYPHEN}" !~ m/^<+<-Cf>>$/, q{Don't match internally inverted <Cf> (Format)} );
ok( "\x{AECE}" !~ m/^<+<Cf>>$/, q{Don't match unrelated <Cf> (Format)} );
ok( "\x{AECE}" =~ m/^<-<Cf>>$/, q{Match unrelated externally inverted <Cf> (Format)} );
ok( "\x{AECE}" =~ m/^<+<-Cf>>$/, q{Match unrelated internally inverted <Cf> (Format)} );
ok( "\x{D7A4}" !~ m/^<+<Cf>>$/, q{Don't match related <Cf> (Format)} );
ok( "\x{D7A4}" =~ m/^<+<-Cf>>$/, q{Match related internally inverted <Cf> (Format)} );
ok( "\x{D7A4}" =~ m/^<-<Cf>>$/, q{Match related externally inverted <Cf> (Format)} );
ok( "\x{AECE}\x{D7A4}\N{SOFT HYPHEN}" =~ m/<+<Cf>>/, q{Match unanchored <Cf> (Format)} );
ok( "\N{SOFT HYPHEN}" =~ m/^<+<Format>>$/, q{Match <Format>} );
ok( "\N{SOFT HYPHEN}" =~ m/^<[A]+<Format>>$/, q{Match compound <Format>} );
ok( "\N{SOFT HYPHEN}" !~ m/^<-<Format>>$/, q{Don't match externally inverted <Format>} );
ok( "\N{SOFT HYPHEN}" !~ m/^<[A]-<Format>>$/, q{Don't match compound inverted <Format>} );
ok( "\N{SOFT HYPHEN}" !~ m/^<+<-Format>>$/, q{Don't match internally inverted <Format>} );
ok( "\x{5382}" !~ m/^<+<Format>>$/, q{Don't match unrelated <Format>} );
ok( "\x{5382}" =~ m/^<-<Format>>$/, q{Match unrelated externally inverted <Format>} );
ok( "\x{5382}" =~ m/^<+<-Format>>$/, q{Match unrelated internally inverted <Format>} );
ok( "\x{5382}\N{SOFT HYPHEN}" =~ m/<+<Format>>/, q{Match unanchored <Format>} );
# BidiL # Left-to-Right
ok( "\N{YI SYLLABLE IT}" =~ m/^<+<BidiL>>$/, q{Match (Left-to-Right)} );
ok( "\N{YI SYLLABLE IT}" =~ m/^<[A]+<BidiL>>$/, q{Match compound (Left-to-Right)} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<-<BidiL>>$/, q{Don't match externally inverted (Left-to-Right)} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<[A]-<BidiL>>$/, q{Don't match compound inverted (Left-to-Right)} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<+<-BidiL>>$/, q{Don't match internally inverted (Left-to-Right)} );
ok( "\x{5BF5}" !~ m/^<+<BidiL>>$/, q{Don't match unrelated (Left-to-Right)} );
ok( "\x{5BF5}" =~ m/^<-<BidiL>>$/, q{Match unrelated externally inverted (Left-to-Right)} );
ok( "\x{5BF5}" =~ m/^<+<-BidiL>>$/, q{Match unrelated internally inverted (Left-to-Right)} );
ok( "\x{5BF5}\N{YI SYLLABLE IT}" =~ m/<+<BidiL>>/, q{Match unanchored (Left-to-Right)} );
# BidiEN # European Number
ok( "\N{DIGIT ZERO}" =~ m/^<+<BidiEN>>$/, q{Match (European Number)} );
ok( "\N{DIGIT ZERO}" =~ m/^<[A]+<BidiEN>>$/, q{Match compound (European Number)} );
ok( "\N{DIGIT ZERO}" !~ m/^<-<BidiEN>>$/, q{Don't match externally inverted (European Number)} );
ok( "\N{DIGIT ZERO}" !~ m/^<[A]-<BidiEN>>$/, q{Don't match compound inverted (European Number)} );
ok( "\N{DIGIT ZERO}" !~ m/^<+<-BidiEN>>$/, q{Don't match internally inverted (European Number)} );
ok( "\x{5596}" !~ m/^<+<BidiEN>>$/, q{Don't match unrelated (European Number)} );
ok( "\x{5596}" =~ m/^<-<BidiEN>>$/, q{Match unrelated externally inverted (European Number)} );
ok( "\x{5596}" =~ m/^<+<-BidiEN>>$/, q{Match unrelated internally inverted (European Number)} );
ok( "\x{5596}\N{DIGIT ZERO}" =~ m/<+<BidiEN>>/, q{Match unanchored (European Number)} );
# BidiES # European Number Separator
ok( "\N{SOLIDUS}" =~ m/^<+<BidiES>>$/, q{Match (European Number Separator)} );
ok( "\N{SOLIDUS}" =~ m/^<[A]+<BidiES>>$/, q{Match compound (European Number Separator)} );
ok( "\N{SOLIDUS}" !~ m/^<-<BidiES>>$/, q{Don't match externally inverted (European Number Separator)} );
ok( "\N{SOLIDUS}" !~ m/^<[A]-<BidiES>>$/, q{Don't match compound inverted (European Number Separator)} );
ok( "\N{SOLIDUS}" !~ m/^<+<-BidiES>>$/, q{Don't match internally inverted (European Number Separator)} );
ok( "\x{85D3}" !~ m/^<+<BidiES>>$/, q{Don't match unrelated (European Number Separator)} );
ok( "\x{85D3}" =~ m/^<-<BidiES>>$/, q{Match unrelated externally inverted (European Number Separator)} );
ok( "\x{85D3}" =~ m/^<+<-BidiES>>$/, q{Match unrelated internally inverted (European Number Separator)} );
ok( "\x{85D3}\N{SOLIDUS}" =~ m/<+<BidiES>>/, q{Match unanchored (European Number Separator)} );
# BidiET # European Number Terminator
ok( "\N{NUMBER SIGN}" =~ m/^<+<BidiET>>$/, q{Match (European Number Terminator)} );
ok( "\N{NUMBER SIGN}" =~ m/^<[A]+<BidiET>>$/, q{Match compound (European Number Terminator)} );
ok( "\N{NUMBER SIGN}" !~ m/^<-<BidiET>>$/, q{Don't match externally inverted (European Number Terminator)} );
ok( "\N{NUMBER SIGN}" !~ m/^<[A]-<BidiET>>$/, q{Don't match compound inverted (European Number Terminator)} );
ok( "\N{NUMBER SIGN}" !~ m/^<+<-BidiET>>$/, q{Don't match internally inverted (European Number Terminator)} );
ok( "\x{9AFC}" !~ m/^<+<BidiET>>$/, q{Don't match unrelated (European Number Terminator)} );
ok( "\x{9AFC}" =~ m/^<-<BidiET>>$/, q{Match unrelated externally inverted (European Number Terminator)} );
ok( "\x{9AFC}" =~ m/^<+<-BidiET>>$/, q{Match unrelated internally inverted (European Number Terminator)} );
ok( "\x{9AFC}\N{NUMBER SIGN}" =~ m/<+<BidiET>>/, q{Match unanchored (European Number Terminator)} );
# BidiWS # Whitespace
ok( "\N{FORM FEED (FF)}" =~ m/^<+<BidiWS>>$/, q{Match (Whitespace)} );
ok( "\N{FORM FEED (FF)}" =~ m/^<[A]+<BidiWS>>$/, q{Match compound (Whitespace)} );
ok( "\N{FORM FEED (FF)}" !~ m/^<-<BidiWS>>$/, q{Don't match externally inverted (Whitespace)} );
ok( "\N{FORM FEED (FF)}" !~ m/^<[A]-<BidiWS>>$/, q{Don't match compound inverted (Whitespace)} );
ok( "\N{FORM FEED (FF)}" !~ m/^<+<-BidiWS>>$/, q{Don't match internally inverted (Whitespace)} );
ok( "\x{4441}" !~ m/^<+<BidiWS>>$/, q{Don't match unrelated (Whitespace)} );
ok( "\x{4441}" =~ m/^<-<BidiWS>>$/, q{Match unrelated externally inverted (Whitespace)} );
ok( "\x{4441}" =~ m/^<+<-BidiWS>>$/, q{Match unrelated internally inverted (Whitespace)} );
ok( "\x{4441}\N{FORM FEED (FF)}" =~ m/<+<BidiWS>>/, q{Match unanchored (Whitespace)} );
# Arabic
ok( "\N{ARABIC LETTER HAMZA}" =~ m/^<+<Arabic>>$/, q{Match <Arabic>} );
ok( "\N{ARABIC LETTER HAMZA}" =~ m/^<[A]+<Arabic>>$/, q{Match compound <Arabic>} );
ok( "\N{ARABIC LETTER HAMZA}" !~ m/^<-<Arabic>>$/, q{Don't match externally inverted <Arabic>} );
ok( "\N{ARABIC LETTER HAMZA}" !~ m/^<[A]-<Arabic>>$/, q{Don't match compound inverted <Arabic>} );
ok( "\N{ARABIC LETTER HAMZA}" !~ m/^<+<-Arabic>>$/, q{Don't match internally inverted <Arabic>} );
ok( "\N{YI SYLLABLE RYRX}" !~ m/^<+<Arabic>>$/, q{Don't match unrelated <Arabic>} );
ok( "\N{YI SYLLABLE RYRX}" =~ m/^<-<Arabic>>$/, q{Match unrelated externally inverted <Arabic>} );
ok( "\N{YI SYLLABLE RYRX}" =~ m/^<+<-Arabic>>$/, q{Match unrelated internally inverted <Arabic>} );
ok( "\N{YI SYLLABLE RYRX}\N{ARABIC LETTER HAMZA}" =~ m/<+<Arabic>>/, q{Match unanchored <Arabic>} );
# Armenian
ok( "\N{ARMENIAN CAPITAL LETTER AYB}" =~ m/^<+<Armenian>>$/, q{Match <Armenian>} );
ok( "\N{ARMENIAN CAPITAL LETTER AYB}" =~ m/^<[A]+<Armenian>>$/, q{Match compound <Armenian>} );
ok( "\N{ARMENIAN CAPITAL LETTER AYB}" !~ m/^<-<Armenian>>$/, q{Don't match externally inverted <Armenian>} );
ok( "\N{ARMENIAN CAPITAL LETTER AYB}" !~ m/^<[A]-<Armenian>>$/, q{Don't match compound inverted <Armenian>} );
ok( "\N{ARMENIAN CAPITAL LETTER AYB}" !~ m/^<+<-Armenian>>$/, q{Don't match internally inverted <Armenian>} );
ok( "\x{B2ED}" !~ m/^<+<Armenian>>$/, q{Don't match unrelated <Armenian>} );
ok( "\x{B2ED}" =~ m/^<-<Armenian>>$/, q{Match unrelated externally inverted <Armenian>} );
ok( "\x{B2ED}" =~ m/^<+<-Armenian>>$/, q{Match unrelated internally inverted <Armenian>} );
ok( "\x{B2ED}\N{ARMENIAN CAPITAL LETTER AYB}" =~ m/<+<Armenian>>/, q{Match unanchored <Armenian>} );
# Bengali
ok( "\N{BENGALI SIGN CANDRABINDU}" =~ m/^<+<Bengali>>$/, q{Match <Bengali>} );
ok( "\N{BENGALI SIGN CANDRABINDU}" =~ m/^<[A]+<Bengali>>$/, q{Match compound <Bengali>} );
ok( "\N{BENGALI SIGN CANDRABINDU}" !~ m/^<-<Bengali>>$/, q{Don't match externally inverted <Bengali>} );
ok( "\N{BENGALI SIGN CANDRABINDU}" !~ m/^<[A]-<Bengali>>$/, q{Don't match compound inverted <Bengali>} );
ok( "\N{BENGALI SIGN CANDRABINDU}" !~ m/^<+<-Bengali>>$/, q{Don't match internally inverted <Bengali>} );
ok( "\x{4AFD}" !~ m/^<+<Bengali>>$/, q{Don't match unrelated <Bengali>} );
ok( "\x{4AFD}" =~ m/^<-<Bengali>>$/, q{Match unrelated externally inverted <Bengali>} );
ok( "\x{4AFD}" =~ m/^<+<-Bengali>>$/, q{Match unrelated internally inverted <Bengali>} );
ok( "\x{4AFD}\N{BENGALI SIGN CANDRABINDU}" =~ m/<+<Bengali>>/, q{Match unanchored <Bengali>} );
# Bopomofo
ok( "\N{BOPOMOFO LETTER B}" =~ m/^<+<Bopomofo>>$/, q{Match <Bopomofo>} );
ok( "\N{BOPOMOFO LETTER B}" =~ m/^<[A]+<Bopomofo>>$/, q{Match compound <Bopomofo>} );
ok( "\N{BOPOMOFO LETTER B}" !~ m/^<-<Bopomofo>>$/, q{Don't match externally inverted <Bopomofo>} );
ok( "\N{BOPOMOFO LETTER B}" !~ m/^<[A]-<Bopomofo>>$/, q{Don't match compound inverted <Bopomofo>} );
ok( "\N{BOPOMOFO LETTER B}" !~ m/^<+<-Bopomofo>>$/, q{Don't match internally inverted <Bopomofo>} );
ok( "\x{8369}" !~ m/^<+<Bopomofo>>$/, q{Don't match unrelated <Bopomofo>} );
ok( "\x{8369}" =~ m/^<-<Bopomofo>>$/, q{Match unrelated externally inverted <Bopomofo>} );
ok( "\x{8369}" =~ m/^<+<-Bopomofo>>$/, q{Match unrelated internally inverted <Bopomofo>} );
ok( "\x{8369}\N{BOPOMOFO LETTER B}" =~ m/<+<Bopomofo>>/, q{Match unanchored <Bopomofo>} );
# Buhid
ok( "\N{BUHID LETTER A}" =~ m/^<+<Buhid>>$/, q{Match <Buhid>} );
ok( "\N{BUHID LETTER A}" =~ m/^<[A]+<Buhid>>$/, q{Match compound <Buhid>} );
ok( "\N{BUHID LETTER A}" !~ m/^<-<Buhid>>$/, q{Don't match externally inverted <Buhid>} );
ok( "\N{BUHID LETTER A}" !~ m/^<[A]-<Buhid>>$/, q{Don't match compound inverted <Buhid>} );
ok( "\N{BUHID LETTER A}" !~ m/^<+<-Buhid>>$/, q{Don't match internally inverted <Buhid>} );
ok( "\x{877F}" !~ m/^<+<Buhid>>$/, q{Don't match unrelated <Buhid>} );
ok( "\x{877F}" =~ m/^<-<Buhid>>$/, q{Match unrelated externally inverted <Buhid>} );
ok( "\x{877F}" =~ m/^<+<-Buhid>>$/, q{Match unrelated internally inverted <Buhid>} );
ok( "\x{877F}\N{BUHID LETTER A}" =~ m/<+<Buhid>>/, q{Match unanchored <Buhid>} );
# CanadianAboriginal
ok( "\N{CANADIAN SYLLABICS E}" =~ m/^<+<CanadianAboriginal>>$/, q{Match <CanadianAboriginal>} );
ok( "\N{CANADIAN SYLLABICS E}" =~ m/^<[A]+<CanadianAboriginal>>$/, q{Match compound <CanadianAboriginal>} );
ok( "\N{CANADIAN SYLLABICS E}" !~ m/^<-<CanadianAboriginal>>$/, q{Don't match externally inverted <CanadianAboriginal>} );
ok( "\N{CANADIAN SYLLABICS E}" !~ m/^<[A]-<CanadianAboriginal>>$/, q{Don't match compound inverted <CanadianAboriginal>} );
ok( "\N{CANADIAN SYLLABICS E}" !~ m/^<+<-CanadianAboriginal>>$/, q{Don't match internally inverted <CanadianAboriginal>} );
ok( "\x{3A42}" !~ m/^<+<CanadianAboriginal>>$/, q{Don't match unrelated <CanadianAboriginal>} );
ok( "\x{3A42}" =~ m/^<-<CanadianAboriginal>>$/, q{Match unrelated externally inverted <CanadianAboriginal>} );
ok( "\x{3A42}" =~ m/^<+<-CanadianAboriginal>>$/, q{Match unrelated internally inverted <CanadianAboriginal>} );
ok( "\x{4DB6}" !~ m/^<+<CanadianAboriginal>>$/, q{Don't match related <CanadianAboriginal>} );
ok( "\x{4DB6}" =~ m/^<+<-CanadianAboriginal>>$/, q{Match related internally inverted <CanadianAboriginal>} );
ok( "\x{4DB6}" =~ m/^<-<CanadianAboriginal>>$/, q{Match related externally inverted <CanadianAboriginal>} );
ok( "\x{3A42}\x{4DB6}\N{CANADIAN SYLLABICS E}" =~ m/<+<CanadianAboriginal>>/, q{Match unanchored <CanadianAboriginal>} );
# Cherokee
ok( "\N{CHEROKEE LETTER A}" =~ m/^<+<Cherokee>>$/, q{Match <Cherokee>} );
ok( "\N{CHEROKEE LETTER A}" =~ m/^<[A]+<Cherokee>>$/, q{Match compound <Cherokee>} );
ok( "\N{CHEROKEE LETTER A}" !~ m/^<-<Cherokee>>$/, q{Don't match externally inverted <Cherokee>} );
ok( "\N{CHEROKEE LETTER A}" !~ m/^<[A]-<Cherokee>>$/, q{Don't match compound inverted <Cherokee>} );
ok( "\N{CHEROKEE LETTER A}" !~ m/^<+<-Cherokee>>$/, q{Don't match internally inverted <Cherokee>} );
ok( "\x{A9EF}" !~ m/^<+<Cherokee>>$/, q{Don't match unrelated <Cherokee>} );
ok( "\x{A9EF}" =~ m/^<-<Cherokee>>$/, q{Match unrelated externally inverted <Cherokee>} );
ok( "\x{A9EF}" =~ m/^<+<-Cherokee>>$/, q{Match unrelated internally inverted <Cherokee>} );
ok( "\x{A9EF}" !~ m/^<+<Cherokee>>$/, q{Don't match related <Cherokee>} );
ok( "\x{A9EF}" =~ m/^<+<-Cherokee>>$/, q{Match related internally inverted <Cherokee>} );
ok( "\x{A9EF}" =~ m/^<-<Cherokee>>$/, q{Match related externally inverted <Cherokee>} );
ok( "\x{A9EF}\x{A9EF}\N{CHEROKEE LETTER A}" =~ m/<+<Cherokee>>/, q{Match unanchored <Cherokee>} );
# Cyrillic
ok( "\N{CYRILLIC LETTER SMALL CAPITAL EL}" =~ m/^<+<Cyrillic>>$/, q{Match <Cyrillic>} );
ok( "\N{CYRILLIC LETTER SMALL CAPITAL EL}" =~ m/^<[A]+<Cyrillic>>$/, q{Match compound <Cyrillic>} );
ok( "\N{CYRILLIC LETTER SMALL CAPITAL EL}" !~ m/^<-<Cyrillic>>$/, q{Don't match externally inverted <Cyrillic>} );
ok( "\N{CYRILLIC LETTER SMALL CAPITAL EL}" !~ m/^<[A]-<Cyrillic>>$/, q{Don't match compound inverted <Cyrillic>} );
ok( "\N{CYRILLIC LETTER SMALL CAPITAL EL}" !~ m/^<+<-Cyrillic>>$/, q{Don't match internally inverted <Cyrillic>} );
ok( "\x{07EF}" !~ m/^<+<Cyrillic>>$/, q{Don't match unrelated <Cyrillic>} );
ok( "\x{07EF}" =~ m/^<-<Cyrillic>>$/, q{Match unrelated externally inverted <Cyrillic>} );
ok( "\x{07EF}" =~ m/^<+<-Cyrillic>>$/, q{Match unrelated internally inverted <Cyrillic>} );
ok( "\x{07EF}" !~ m/^<+<Cyrillic>>$/, q{Don't match related <Cyrillic>} );
ok( "\x{07EF}" =~ m/^<+<-Cyrillic>>$/, q{Match related internally inverted <Cyrillic>} );
ok( "\x{07EF}" =~ m/^<-<Cyrillic>>$/, q{Match related externally inverted <Cyrillic>} );
ok( "\x{07EF}\x{07EF}\N{CYRILLIC LETTER SMALL CAPITAL EL}" =~ m/<+<Cyrillic>>/, q{Match unanchored <Cyrillic>} );
# Deseret
ok( "\x{65BD}" !~ m/^<+<Deseret>>$/, q{Don't match unrelated <Deseret>} );
ok( "\x{65BD}" =~ m/^<-<Deseret>>$/, q{Match unrelated externally inverted <Deseret>} );
ok( "\x{65BD}" =~ m/^<+<-Deseret>>$/, q{Match unrelated internally inverted <Deseret>} );
# Devanagari
ok( "\N{DEVANAGARI SIGN CANDRABINDU}" =~ m/^<+<Devanagari>>$/, q{Match <Devanagari>} );
ok( "\N{DEVANAGARI SIGN CANDRABINDU}" =~ m/^<[A]+<Devanagari>>$/, q{Match compound <Devanagari>} );
ok( "\N{DEVANAGARI SIGN CANDRABINDU}" !~ m/^<-<Devanagari>>$/, q{Don't match externally inverted <Devanagari>} );
ok( "\N{DEVANAGARI SIGN CANDRABINDU}" !~ m/^<[A]-<Devanagari>>$/, q{Don't match compound inverted <Devanagari>} );
ok( "\N{DEVANAGARI SIGN CANDRABINDU}" !~ m/^<+<-Devanagari>>$/, q{Don't match internally inverted <Devanagari>} );
ok( "\x{653B}" !~ m/^<+<Devanagari>>$/, q{Don't match unrelated <Devanagari>} );
ok( "\x{653B}" =~ m/^<-<Devanagari>>$/, q{Match unrelated externally inverted <Devanagari>} );
ok( "\x{653B}" =~ m/^<+<-Devanagari>>$/, q{Match unrelated internally inverted <Devanagari>} );
ok( "\x{653B}\N{DEVANAGARI SIGN CANDRABINDU}" =~ m/<+<Devanagari>>/, q{Match unanchored <Devanagari>} );
# Ethiopic
ok( "\N{ETHIOPIC SYLLABLE HA}" =~ m/^<+<Ethiopic>>$/, q{Match <Ethiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" =~ m/^<[A]+<Ethiopic>>$/, q{Match compound <Ethiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<-<Ethiopic>>$/, q{Don't match externally inverted <Ethiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<[A]-<Ethiopic>>$/, q{Don't match compound inverted <Ethiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<+<-Ethiopic>>$/, q{Don't match internally inverted <Ethiopic>} );
ok( "\x{482C}" !~ m/^<+<Ethiopic>>$/, q{Don't match unrelated <Ethiopic>} );
ok( "\x{482C}" =~ m/^<-<Ethiopic>>$/, q{Match unrelated externally inverted <Ethiopic>} );
ok( "\x{482C}" =~ m/^<+<-Ethiopic>>$/, q{Match unrelated internally inverted <Ethiopic>} );
ok( "\x{482C}\N{ETHIOPIC SYLLABLE HA}" =~ m/<+<Ethiopic>>/, q{Match unanchored <Ethiopic>} );
# Georgian
ok( "\N{GEORGIAN CAPITAL LETTER AN}" =~ m/^<+<Georgian>>$/, q{Match <Georgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" =~ m/^<[A]+<Georgian>>$/, q{Match compound <Georgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<-<Georgian>>$/, q{Don't match externally inverted <Georgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<[A]-<Georgian>>$/, q{Don't match compound inverted <Georgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<+<-Georgian>>$/, q{Don't match internally inverted <Georgian>} );
ok( "\x{9BE5}" !~ m/^<+<Georgian>>$/, q{Don't match unrelated <Georgian>} );
ok( "\x{9BE5}" =~ m/^<-<Georgian>>$/, q{Match unrelated externally inverted <Georgian>} );
ok( "\x{9BE5}" =~ m/^<+<-Georgian>>$/, q{Match unrelated internally inverted <Georgian>} );
ok( "\x{9BE5}\N{GEORGIAN CAPITAL LETTER AN}" =~ m/<+<Georgian>>/, q{Match unanchored <Georgian>} );
# Gothic
ok( "\x{4ED2}" !~ m/^<+<Gothic>>$/, q{Don't match unrelated <Gothic>} );
ok( "\x{4ED2}" =~ m/^<-<Gothic>>$/, q{Match unrelated externally inverted <Gothic>} );
ok( "\x{4ED2}" =~ m/^<+<-Gothic>>$/, q{Match unrelated internally inverted <Gothic>} );
# Greek
ok( "\N{MICRO SIGN}" =~ m/^<+<Greek>>$/, q{Match <Greek>} );
ok( "\N{MICRO SIGN}" =~ m/^<[A]+<Greek>>$/, q{Match compound <Greek>} );
ok( "\N{MICRO SIGN}" !~ m/^<-<Greek>>$/, q{Don't match externally inverted <Greek>} );
ok( "\N{MICRO SIGN}" !~ m/^<[A]-<Greek>>$/, q{Don't match compound inverted <Greek>} );
ok( "\N{MICRO SIGN}" !~ m/^<+<-Greek>>$/, q{Don't match internally inverted <Greek>} );
ok( "\x{D486}" !~ m/^<+<Greek>>$/, q{Don't match unrelated <Greek>} );
ok( "\x{D486}" =~ m/^<-<Greek>>$/, q{Match unrelated externally inverted <Greek>} );
ok( "\x{D486}" =~ m/^<+<-Greek>>$/, q{Match unrelated internally inverted <Greek>} );
ok( "\x{D486}\N{MICRO SIGN}" =~ m/<+<Greek>>/, q{Match unanchored <Greek>} );
# Gujarati
ok( "\N{GUJARATI SIGN CANDRABINDU}" =~ m/^<+<Gujarati>>$/, q{Match <Gujarati>} );
ok( "\N{GUJARATI SIGN CANDRABINDU}" =~ m/^<[A]+<Gujarati>>$/, q{Match compound <Gujarati>} );
ok( "\N{GUJARATI SIGN CANDRABINDU}" !~ m/^<-<Gujarati>>$/, q{Don't match externally inverted <Gujarati>} );
ok( "\N{GUJARATI SIGN CANDRABINDU}" !~ m/^<[A]-<Gujarati>>$/, q{Don't match compound inverted <Gujarati>} );
ok( "\N{GUJARATI SIGN CANDRABINDU}" !~ m/^<+<-Gujarati>>$/, q{Don't match internally inverted <Gujarati>} );
ok( "\x{B3F3}" !~ m/^<+<Gujarati>>$/, q{Don't match unrelated <Gujarati>} );
ok( "\x{B3F3}" =~ m/^<-<Gujarati>>$/, q{Match unrelated externally inverted <Gujarati>} );
ok( "\x{B3F3}" =~ m/^<+<-Gujarati>>$/, q{Match unrelated internally inverted <Gujarati>} );
ok( "\x{B3F3}\N{GUJARATI SIGN CANDRABINDU}" =~ m/<+<Gujarati>>/, q{Match unanchored <Gujarati>} );
# Gurmukhi
ok( "\N{GURMUKHI SIGN BINDI}" =~ m/^<+<Gurmukhi>>$/, q{Match <Gurmukhi>} );
ok( "\N{GURMUKHI SIGN BINDI}" =~ m/^<[A]+<Gurmukhi>>$/, q{Match compound <Gurmukhi>} );
ok( "\N{GURMUKHI SIGN BINDI}" !~ m/^<-<Gurmukhi>>$/, q{Don't match externally inverted <Gurmukhi>} );
ok( "\N{GURMUKHI SIGN BINDI}" !~ m/^<[A]-<Gurmukhi>>$/, q{Don't match compound inverted <Gurmukhi>} );
ok( "\N{GURMUKHI SIGN BINDI}" !~ m/^<+<-Gurmukhi>>$/, q{Don't match internally inverted <Gurmukhi>} );
ok( "\x{6469}" !~ m/^<+<Gurmukhi>>$/, q{Don't match unrelated <Gurmukhi>} );
ok( "\x{6469}" =~ m/^<-<Gurmukhi>>$/, q{Match unrelated externally inverted <Gurmukhi>} );
ok( "\x{6469}" =~ m/^<+<-Gurmukhi>>$/, q{Match unrelated internally inverted <Gurmukhi>} );
ok( "\x{6469}\N{GURMUKHI SIGN BINDI}" =~ m/<+<Gurmukhi>>/, q{Match unanchored <Gurmukhi>} );
# Han
ok( "\x{9DB5}" =~ m/^<+<Han>>$/, q{Match <Han>} );
ok( "\x{9DB5}" =~ m/^<[A]+<Han>>$/, q{Match compound <Han>} );
ok( "\x{9DB5}" !~ m/^<-<Han>>$/, q{Don't match externally inverted <Han>} );
ok( "\x{9DB5}" !~ m/^<[A]-<Han>>$/, q{Don't match compound inverted <Han>} );
ok( "\x{9DB5}" !~ m/^<+<-Han>>$/, q{Don't match internally inverted <Han>} );
ok( "\x{9FA6}" !~ m/^<+<Han>>$/, q{Don't match unrelated <Han>} );
ok( "\x{9FA6}" =~ m/^<-<Han>>$/, q{Match unrelated externally inverted <Han>} );
ok( "\x{9FA6}" =~ m/^<+<-Han>>$/, q{Match unrelated internally inverted <Han>} );
ok( "\x{9FA6}\x{9DB5}" =~ m/<+<Han>>/, q{Match unanchored <Han>} );
# Hangul
ok( "\x{AC00}" =~ m/^<+<Hangul>>$/, q{Match <Hangul>} );
ok( "\x{AC00}" =~ m/^<[A]+<Hangul>>$/, q{Match compound <Hangul>} );
ok( "\x{AC00}" !~ m/^<-<Hangul>>$/, q{Don't match externally inverted <Hangul>} );
ok( "\x{AC00}" !~ m/^<[A]-<Hangul>>$/, q{Don't match compound inverted <Hangul>} );
ok( "\x{AC00}" !~ m/^<+<-Hangul>>$/, q{Don't match internally inverted <Hangul>} );
ok( "\x{9E09}" !~ m/^<+<Hangul>>$/, q{Don't match unrelated <Hangul>} );
ok( "\x{9E09}" =~ m/^<-<Hangul>>$/, q{Match unrelated externally inverted <Hangul>} );
ok( "\x{9E09}" =~ m/^<+<-Hangul>>$/, q{Match unrelated internally inverted <Hangul>} );
ok( "\x{9E09}\x{AC00}" =~ m/<+<Hangul>>/, q{Match unanchored <Hangul>} );
# Hanunoo
ok( "\N{HANUNOO LETTER A}" =~ m/^<+<Hanunoo>>$/, q{Match <Hanunoo>} );
ok( "\N{HANUNOO LETTER A}" =~ m/^<[A]+<Hanunoo>>$/, q{Match compound <Hanunoo>} );
ok( "\N{HANUNOO LETTER A}" !~ m/^<-<Hanunoo>>$/, q{Don't match externally inverted <Hanunoo>} );
ok( "\N{HANUNOO LETTER A}" !~ m/^<[A]-<Hanunoo>>$/, q{Don't match compound inverted <Hanunoo>} );
ok( "\N{HANUNOO LETTER A}" !~ m/^<+<-Hanunoo>>$/, q{Don't match internally inverted <Hanunoo>} );
ok( "\x{580B}" !~ m/^<+<Hanunoo>>$/, q{Don't match unrelated <Hanunoo>} );
ok( "\x{580B}" =~ m/^<-<Hanunoo>>$/, q{Match unrelated externally inverted <Hanunoo>} );
ok( "\x{580B}" =~ m/^<+<-Hanunoo>>$/, q{Match unrelated internally inverted <Hanunoo>} );
ok( "\x{580B}\N{HANUNOO LETTER A}" =~ m/<+<Hanunoo>>/, q{Match unanchored <Hanunoo>} );
# Hebrew
ok( "\N{HEBREW LETTER ALEF}" =~ m/^<+<Hebrew>>$/, q{Match <Hebrew>} );
ok( "\N{HEBREW LETTER ALEF}" =~ m/^<[A]+<Hebrew>>$/, q{Match compound <Hebrew>} );
ok( "\N{HEBREW LETTER ALEF}" !~ m/^<-<Hebrew>>$/, q{Don't match externally inverted <Hebrew>} );
ok( "\N{HEBREW LETTER ALEF}" !~ m/^<[A]-<Hebrew>>$/, q{Don't match compound inverted <Hebrew>} );
ok( "\N{HEBREW LETTER ALEF}" !~ m/^<+<-Hebrew>>$/, q{Don't match internally inverted <Hebrew>} );
ok( "\x{62B4}" !~ m/^<+<Hebrew>>$/, q{Don't match unrelated <Hebrew>} );
ok( "\x{62B4}" =~ m/^<-<Hebrew>>$/, q{Match unrelated externally inverted <Hebrew>} );
ok( "\x{62B4}" =~ m/^<+<-Hebrew>>$/, q{Match unrelated internally inverted <Hebrew>} );
ok( "\x{62B4}\N{HEBREW LETTER ALEF}" =~ m/<+<Hebrew>>/, q{Match unanchored <Hebrew>} );
# Hiragana
ok( "\N{HIRAGANA LETTER SMALL A}" =~ m/^<+<Hiragana>>$/, q{Match <Hiragana>} );
ok( "\N{HIRAGANA LETTER SMALL A}" =~ m/^<[A]+<Hiragana>>$/, q{Match compound <Hiragana>} );
ok( "\N{HIRAGANA LETTER SMALL A}" !~ m/^<-<Hiragana>>$/, q{Don't match externally inverted <Hiragana>} );
ok( "\N{HIRAGANA LETTER SMALL A}" !~ m/^<[A]-<Hiragana>>$/, q{Don't match compound inverted <Hiragana>} );
ok( "\N{HIRAGANA LETTER SMALL A}" !~ m/^<+<-Hiragana>>$/, q{Don't match internally inverted <Hiragana>} );
ok( "\x{9504}" !~ m/^<+<Hiragana>>$/, q{Don't match unrelated <Hiragana>} );
ok( "\x{9504}" =~ m/^<-<Hiragana>>$/, q{Match unrelated externally inverted <Hiragana>} );
ok( "\x{9504}" =~ m/^<+<-Hiragana>>$/, q{Match unrelated internally inverted <Hiragana>} );
ok( "\x{9504}\N{HIRAGANA LETTER SMALL A}" =~ m/<+<Hiragana>>/, q{Match unanchored <Hiragana>} );
# Inherited
ok( "\N{MONGOLIAN FREE VARIATION SELECTOR ONE}" =~ m/^<+<Inherited>>$/, q{Match <Inherited>} );
ok( "\N{MONGOLIAN FREE VARIATION SELECTOR ONE}" =~ m/^<[A]+<Inherited>>$/, q{Match compound <Inherited>} );
ok( "\N{MONGOLIAN FREE VARIATION SELECTOR ONE}" !~ m/^<-<Inherited>>$/, q{Don't match externally inverted <Inherited>} );
ok( "\N{MONGOLIAN FREE VARIATION SELECTOR ONE}" !~ m/^<[A]-<Inherited>>$/, q{Don't match compound inverted <Inherited>} );
ok( "\N{MONGOLIAN FREE VARIATION SELECTOR ONE}" !~ m/^<+<-Inherited>>$/, q{Don't match internally inverted <Inherited>} );
ok( "\N{TAMIL LETTER RRA}" !~ m/^<+<Inherited>>$/, q{Don't match unrelated <Inherited>} );
ok( "\N{TAMIL LETTER RRA}" =~ m/^<-<Inherited>>$/, q{Match unrelated externally inverted <Inherited>} );
ok( "\N{TAMIL LETTER RRA}" =~ m/^<+<-Inherited>>$/, q{Match unrelated internally inverted <Inherited>} );
ok( "\N{TAMIL LETTER RRA}\N{MONGOLIAN FREE VARIATION SELECTOR ONE}" =~ m/<+<Inherited>>/, q{Match unanchored <Inherited>} );
# Kannada
ok( "\N{KANNADA SIGN ANUSVARA}" =~ m/^<+<Kannada>>$/, q{Match <Kannada>} );
ok( "\N{KANNADA SIGN ANUSVARA}" =~ m/^<[A]+<Kannada>>$/, q{Match compound <Kannada>} );
ok( "\N{KANNADA SIGN ANUSVARA}" !~ m/^<-<Kannada>>$/, q{Don't match externally inverted <Kannada>} );
ok( "\N{KANNADA SIGN ANUSVARA}" !~ m/^<[A]-<Kannada>>$/, q{Don't match compound inverted <Kannada>} );
ok( "\N{KANNADA SIGN ANUSVARA}" !~ m/^<+<-Kannada>>$/, q{Don't match internally inverted <Kannada>} );
ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}" !~ m/^<+<Kannada>>$/, q{Don't match unrelated <Kannada>} );
ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}" =~ m/^<-<Kannada>>$/, q{Match unrelated externally inverted <Kannada>} );
ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}" =~ m/^<+<-Kannada>>$/, q{Match unrelated internally inverted <Kannada>} );
ok( "\N{BLACK RIGHT-POINTING SMALL TRIANGLE}\N{KANNADA SIGN ANUSVARA}" =~ m/<+<Kannada>>/, q{Match unanchored <Kannada>} );
# Katakana
ok( "\N{KATAKANA LETTER SMALL A}" =~ m/^<+<Katakana>>$/, q{Match <Katakana>} );
ok( "\N{KATAKANA LETTER SMALL A}" =~ m/^<[A]+<Katakana>>$/, q{Match compound <Katakana>} );
ok( "\N{KATAKANA LETTER SMALL A}" !~ m/^<-<Katakana>>$/, q{Don't match externally inverted <Katakana>} );
ok( "\N{KATAKANA LETTER SMALL A}" !~ m/^<[A]-<Katakana>>$/, q{Don't match compound inverted <Katakana>} );
ok( "\N{KATAKANA LETTER SMALL A}" !~ m/^<+<-Katakana>>$/, q{Don't match internally inverted <Katakana>} );
ok( "\x{40DB}" !~ m/^<+<Katakana>>$/, q{Don't match unrelated <Katakana>} );
ok( "\x{40DB}" =~ m/^<-<Katakana>>$/, q{Match unrelated externally inverted <Katakana>} );
ok( "\x{40DB}" =~ m/^<+<-Katakana>>$/, q{Match unrelated internally inverted <Katakana>} );
ok( "\x{40DB}\N{KATAKANA LETTER SMALL A}" =~ m/<+<Katakana>>/, q{Match unanchored <Katakana>} );
# Khmer
ok( "\N{KHMER LETTER KA}" =~ m/^<+<Khmer>>$/, q{Match <Khmer>} );
ok( "\N{KHMER LETTER KA}" =~ m/^<[A]+<Khmer>>$/, q{Match compound <Khmer>} );
ok( "\N{KHMER LETTER KA}" !~ m/^<-<Khmer>>$/, q{Don't match externally inverted <Khmer>} );
ok( "\N{KHMER LETTER KA}" !~ m/^<[A]-<Khmer>>$/, q{Don't match compound inverted <Khmer>} );
ok( "\N{KHMER LETTER KA}" !~ m/^<+<-Khmer>>$/, q{Don't match internally inverted <Khmer>} );
ok( "\x{AC3E}" !~ m/^<+<Khmer>>$/, q{Don't match unrelated <Khmer>} );
ok( "\x{AC3E}" =~ m/^<-<Khmer>>$/, q{Match unrelated externally inverted <Khmer>} );
ok( "\x{AC3E}" =~ m/^<+<-Khmer>>$/, q{Match unrelated internally inverted <Khmer>} );
ok( "\x{AC3E}\N{KHMER LETTER KA}" =~ m/<+<Khmer>>/, q{Match unanchored <Khmer>} );
# Lao
ok( "\N{LAO LETTER KO}" =~ m/^<+<Lao>>$/, q{Match <Lao>} );
ok( "\N{LAO LETTER KO}" =~ m/^<[A]+<Lao>>$/, q{Match compound <Lao>} );
ok( "\N{LAO LETTER KO}" !~ m/^<-<Lao>>$/, q{Don't match externally inverted <Lao>} );
ok( "\N{LAO LETTER KO}" !~ m/^<[A]-<Lao>>$/, q{Don't match compound inverted <Lao>} );
ok( "\N{LAO LETTER KO}" !~ m/^<+<-Lao>>$/, q{Don't match internally inverted <Lao>} );
ok( "\N{MODIFIER LETTER UNASPIRATED}" !~ m/^<+<Lao>>$/, q{Don't match unrelated <Lao>} );
ok( "\N{MODIFIER LETTER UNASPIRATED}" =~ m/^<-<Lao>>$/, q{Match unrelated externally inverted <Lao>} );
ok( "\N{MODIFIER LETTER UNASPIRATED}" =~ m/^<+<-Lao>>$/, q{Match unrelated internally inverted <Lao>} );
ok( "\N{MODIFIER LETTER DOUBLE APOSTROPHE}" !~ m/^<+<Lao>>$/, q{Don't match related <Lao>} );
ok( "\N{MODIFIER LETTER DOUBLE APOSTROPHE}" =~ m/^<+<-Lao>>$/, q{Match related internally inverted <Lao>} );
ok( "\N{MODIFIER LETTER DOUBLE APOSTROPHE}" =~ m/^<-<Lao>>$/, q{Match related externally inverted <Lao>} );
ok( "\N{MODIFIER LETTER UNASPIRATED}\N{MODIFIER LETTER DOUBLE APOSTROPHE}\N{LAO LETTER KO}" =~ m/<+<Lao>>/, q{Match unanchored <Lao>} );
# Latin
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<+<Latin>>$/, q{Match <Latin>} );
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<[A]+<Latin>>$/, q{Match compound <Latin>} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-<Latin>>$/, q{Don't match externally inverted <Latin>} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<[A]-<Latin>>$/, q{Don't match compound inverted <Latin>} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<+<-Latin>>$/, q{Don't match internally inverted <Latin>} );
ok( "\x{6B4C}" !~ m/^<+<Latin>>$/, q{Don't match unrelated <Latin>} );
ok( "\x{6B4C}" =~ m/^<-<Latin>>$/, q{Match unrelated externally inverted <Latin>} );
ok( "\x{6B4C}" =~ m/^<+<-Latin>>$/, q{Match unrelated internally inverted <Latin>} );
ok( "\x{6B4C}" !~ m/^<+<Latin>>$/, q{Don't match related <Latin>} );
ok( "\x{6B4C}" =~ m/^<+<-Latin>>$/, q{Match related internally inverted <Latin>} );
ok( "\x{6B4C}" =~ m/^<-<Latin>>$/, q{Match related externally inverted <Latin>} );
ok( "\x{6B4C}\x{6B4C}\N{LATIN CAPITAL LETTER A}" =~ m/<+<Latin>>/, q{Match unanchored <Latin>} );
# Malayalam
ok( "\N{MALAYALAM LETTER TA}" =~ m/^<+<Malayalam>>$/, q{Match <Malayalam>} );
ok( "\N{MALAYALAM LETTER TA}" =~ m/^<[A]+<Malayalam>>$/, q{Match compound <Malayalam>} );
ok( "\N{MALAYALAM LETTER TA}" !~ m/^<-<Malayalam>>$/, q{Don't match externally inverted <Malayalam>} );
ok( "\N{MALAYALAM LETTER TA}" !~ m/^<[A]-<Malayalam>>$/, q{Don't match compound inverted <Malayalam>} );
ok( "\N{MALAYALAM LETTER TA}" !~ m/^<+<-Malayalam>>$/, q{Don't match internally inverted <Malayalam>} );
ok( "\x{0D29}" !~ m/^<+<Malayalam>>$/, q{Don't match unrelated <Malayalam>} );
ok( "\x{0D29}" =~ m/^<-<Malayalam>>$/, q{Match unrelated externally inverted <Malayalam>} );
ok( "\x{0D29}" =~ m/^<+<-Malayalam>>$/, q{Match unrelated internally inverted <Malayalam>} );
ok( "\N{SINHALA SIGN ANUSVARAYA}" !~ m/^<+<Malayalam>>$/, q{Don't match related <Malayalam>} );
ok( "\N{SINHALA SIGN ANUSVARAYA}" =~ m/^<+<-Malayalam>>$/, q{Match related internally inverted <Malayalam>} );
ok( "\N{SINHALA SIGN ANUSVARAYA}" =~ m/^<-<Malayalam>>$/, q{Match related externally inverted <Malayalam>} );
ok( "\x{0D29}\N{SINHALA SIGN ANUSVARAYA}\N{MALAYALAM LETTER TA}" =~ m/<+<Malayalam>>/, q{Match unanchored <Malayalam>} );
# Mongolian
ok( "\N{MONGOLIAN DIGIT ZERO}" =~ m/^<+<Mongolian>>$/, q{Match <Mongolian>} );
ok( "\N{MONGOLIAN DIGIT ZERO}" =~ m/^<[A]+<Mongolian>>$/, q{Match compound <Mongolian>} );
ok( "\N{MONGOLIAN DIGIT ZERO}" !~ m/^<-<Mongolian>>$/, q{Don't match externally inverted <Mongolian>} );
ok( "\N{MONGOLIAN DIGIT ZERO}" !~ m/^<[A]-<Mongolian>>$/, q{Don't match compound inverted <Mongolian>} );
ok( "\N{MONGOLIAN DIGIT ZERO}" !~ m/^<+<-Mongolian>>$/, q{Don't match internally inverted <Mongolian>} );
ok( "\x{70C0}" !~ m/^<+<Mongolian>>$/, q{Don't match unrelated <Mongolian>} );
ok( "\x{70C0}" =~ m/^<-<Mongolian>>$/, q{Match unrelated externally inverted <Mongolian>} );
ok( "\x{70C0}" =~ m/^<+<-Mongolian>>$/, q{Match unrelated internally inverted <Mongolian>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<Mongolian>>$/, q{Don't match related <Mongolian>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<-Mongolian>>$/, q{Match related internally inverted <Mongolian>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-<Mongolian>>$/, q{Match related externally inverted <Mongolian>} );
ok( "\x{70C0}\N{COMBINING GRAVE ACCENT}\N{MONGOLIAN DIGIT ZERO}" =~ m/<+<Mongolian>>/, q{Match unanchored <Mongolian>} );
# Myanmar
ok( "\N{MYANMAR LETTER KA}" =~ m/^<+<Myanmar>>$/, q{Match <Myanmar>} );
ok( "\N{MYANMAR LETTER KA}" =~ m/^<[A]+<Myanmar>>$/, q{Match compound <Myanmar>} );
ok( "\N{MYANMAR LETTER KA}" !~ m/^<-<Myanmar>>$/, q{Don't match externally inverted <Myanmar>} );
ok( "\N{MYANMAR LETTER KA}" !~ m/^<[A]-<Myanmar>>$/, q{Don't match compound inverted <Myanmar>} );
ok( "\N{MYANMAR LETTER KA}" !~ m/^<+<-Myanmar>>$/, q{Don't match internally inverted <Myanmar>} );
ok( "\x{3CE3}" !~ m/^<+<Myanmar>>$/, q{Don't match unrelated <Myanmar>} );
ok( "\x{3CE3}" =~ m/^<-<Myanmar>>$/, q{Match unrelated externally inverted <Myanmar>} );
ok( "\x{3CE3}" =~ m/^<+<-Myanmar>>$/, q{Match unrelated internally inverted <Myanmar>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<Myanmar>>$/, q{Don't match related <Myanmar>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<-Myanmar>>$/, q{Match related internally inverted <Myanmar>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-<Myanmar>>$/, q{Match related externally inverted <Myanmar>} );
ok( "\x{3CE3}\N{COMBINING GRAVE ACCENT}\N{MYANMAR LETTER KA}" =~ m/<+<Myanmar>>/, q{Match unanchored <Myanmar>} );
# Ogham
ok( "\N{OGHAM LETTER BEITH}" =~ m/^<+<Ogham>>$/, q{Match <Ogham>} );
ok( "\N{OGHAM LETTER BEITH}" =~ m/^<[A]+<Ogham>>$/, q{Match compound <Ogham>} );
ok( "\N{OGHAM LETTER BEITH}" !~ m/^<-<Ogham>>$/, q{Don't match externally inverted <Ogham>} );
ok( "\N{OGHAM LETTER BEITH}" !~ m/^<[A]-<Ogham>>$/, q{Don't match compound inverted <Ogham>} );
ok( "\N{OGHAM LETTER BEITH}" !~ m/^<+<-Ogham>>$/, q{Don't match internally inverted <Ogham>} );
ok( "\x{077B}" !~ m/^<+<Ogham>>$/, q{Don't match unrelated <Ogham>} );
ok( "\x{077B}" =~ m/^<-<Ogham>>$/, q{Match unrelated externally inverted <Ogham>} );
ok( "\x{077B}" =~ m/^<+<-Ogham>>$/, q{Match unrelated internally inverted <Ogham>} );
ok( "\x{077B}\N{OGHAM LETTER BEITH}" =~ m/<+<Ogham>>/, q{Match unanchored <Ogham>} );
# OldItalic
ok( "\x{562B}" !~ m/^<+<OldItalic>>$/, q{Don't match unrelated <OldItalic>} );
ok( "\x{562B}" =~ m/^<-<OldItalic>>$/, q{Match unrelated externally inverted <OldItalic>} );
ok( "\x{562B}" =~ m/^<+<-OldItalic>>$/, q{Match unrelated internally inverted <OldItalic>} );
# Oriya
ok( "\N{ORIYA SIGN CANDRABINDU}" =~ m/^<+<Oriya>>$/, q{Match <Oriya>} );
ok( "\N{ORIYA SIGN CANDRABINDU}" =~ m/^<[A]+<Oriya>>$/, q{Match compound <Oriya>} );
ok( "\N{ORIYA SIGN CANDRABINDU}" !~ m/^<-<Oriya>>$/, q{Don't match externally inverted <Oriya>} );
ok( "\N{ORIYA SIGN CANDRABINDU}" !~ m/^<[A]-<Oriya>>$/, q{Don't match compound inverted <Oriya>} );
ok( "\N{ORIYA SIGN CANDRABINDU}" !~ m/^<+<-Oriya>>$/, q{Don't match internally inverted <Oriya>} );
ok( "\x{3CE7}" !~ m/^<+<Oriya>>$/, q{Don't match unrelated <Oriya>} );
ok( "\x{3CE7}" =~ m/^<-<Oriya>>$/, q{Match unrelated externally inverted <Oriya>} );
ok( "\x{3CE7}" =~ m/^<+<-Oriya>>$/, q{Match unrelated internally inverted <Oriya>} );
ok( "\x{3CE7}\N{ORIYA SIGN CANDRABINDU}" =~ m/<+<Oriya>>/, q{Match unanchored <Oriya>} );
# Runic
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/^<+<Runic>>$/, q{Match <Runic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/^<[A]+<Runic>>$/, q{Match compound <Runic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<-<Runic>>$/, q{Don't match externally inverted <Runic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<[A]-<Runic>>$/, q{Don't match compound inverted <Runic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<+<-Runic>>$/, q{Don't match internally inverted <Runic>} );
ok( "\N{BLACK HEART SUIT}" !~ m/^<+<Runic>>$/, q{Don't match unrelated <Runic>} );
ok( "\N{BLACK HEART SUIT}" =~ m/^<-<Runic>>$/, q{Match unrelated externally inverted <Runic>} );
ok( "\N{BLACK HEART SUIT}" =~ m/^<+<-Runic>>$/, q{Match unrelated internally inverted <Runic>} );
ok( "\N{BLACK HEART SUIT}\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/<+<Runic>>/, q{Match unanchored <Runic>} );
# Sinhala
ok( "\N{SINHALA SIGN ANUSVARAYA}" =~ m/^<+<Sinhala>>$/, q{Match <Sinhala>} );
ok( "\N{SINHALA SIGN ANUSVARAYA}" =~ m/^<[A]+<Sinhala>>$/, q{Match compound <Sinhala>} );
ok( "\N{SINHALA SIGN ANUSVARAYA}" !~ m/^<-<Sinhala>>$/, q{Don't match externally inverted <Sinhala>} );
ok( "\N{SINHALA SIGN ANUSVARAYA}" !~ m/^<[A]-<Sinhala>>$/, q{Don't match compound inverted <Sinhala>} );
ok( "\N{SINHALA SIGN ANUSVARAYA}" !~ m/^<+<-Sinhala>>$/, q{Don't match internally inverted <Sinhala>} );
ok( "\N{MYANMAR VOWEL SIGN II}" !~ m/^<+<Sinhala>>$/, q{Don't match unrelated <Sinhala>} );
ok( "\N{MYANMAR VOWEL SIGN II}" =~ m/^<-<Sinhala>>$/, q{Match unrelated externally inverted <Sinhala>} );
ok( "\N{MYANMAR VOWEL SIGN II}" =~ m/^<+<-Sinhala>>$/, q{Match unrelated internally inverted <Sinhala>} );
ok( "\N{KHMER CURRENCY SYMBOL RIEL}" !~ m/^<+<Sinhala>>$/, q{Don't match related <Sinhala>} );
ok( "\N{KHMER CURRENCY SYMBOL RIEL}" =~ m/^<+<-Sinhala>>$/, q{Match related internally inverted <Sinhala>} );
ok( "\N{KHMER CURRENCY SYMBOL RIEL}" =~ m/^<-<Sinhala>>$/, q{Match related externally inverted <Sinhala>} );
ok( "\N{MYANMAR VOWEL SIGN II}\N{KHMER CURRENCY SYMBOL RIEL}\N{SINHALA SIGN ANUSVARAYA}" =~ m/<+<Sinhala>>/, q{Match unanchored <Sinhala>} );
# Syriac
ok( "\N{SYRIAC LETTER ALAPH}" =~ m/^<+<Syriac>>$/, q{Match <Syriac>} );
ok( "\N{SYRIAC LETTER ALAPH}" =~ m/^<[A]+<Syriac>>$/, q{Match compound <Syriac>} );
ok( "\N{SYRIAC LETTER ALAPH}" !~ m/^<-<Syriac>>$/, q{Don't match externally inverted <Syriac>} );
ok( "\N{SYRIAC LETTER ALAPH}" !~ m/^<[A]-<Syriac>>$/, q{Don't match compound inverted <Syriac>} );
ok( "\N{SYRIAC LETTER ALAPH}" !~ m/^<+<-Syriac>>$/, q{Don't match internally inverted <Syriac>} );
ok( "\x{7BAA}" !~ m/^<+<Syriac>>$/, q{Don't match unrelated <Syriac>} );
ok( "\x{7BAA}" =~ m/^<-<Syriac>>$/, q{Match unrelated externally inverted <Syriac>} );
ok( "\x{7BAA}" =~ m/^<+<-Syriac>>$/, q{Match unrelated internally inverted <Syriac>} );
ok( "\N{YI RADICAL QOT}" !~ m/^<+<Syriac>>$/, q{Don't match related <Syriac>} );
ok( "\N{YI RADICAL QOT}" =~ m/^<+<-Syriac>>$/, q{Match related internally inverted <Syriac>} );
ok( "\N{YI RADICAL QOT}" =~ m/^<-<Syriac>>$/, q{Match related externally inverted <Syriac>} );
ok( "\x{7BAA}\N{YI RADICAL QOT}\N{SYRIAC LETTER ALAPH}" =~ m/<+<Syriac>>/, q{Match unanchored <Syriac>} );
# Tagalog
ok( "\N{TAGALOG LETTER A}" =~ m/^<+<Tagalog>>$/, q{Match <Tagalog>} );
ok( "\N{TAGALOG LETTER A}" =~ m/^<[A]+<Tagalog>>$/, q{Match compound <Tagalog>} );
ok( "\N{TAGALOG LETTER A}" !~ m/^<-<Tagalog>>$/, q{Don't match externally inverted <Tagalog>} );
ok( "\N{TAGALOG LETTER A}" !~ m/^<[A]-<Tagalog>>$/, q{Don't match compound inverted <Tagalog>} );
ok( "\N{TAGALOG LETTER A}" !~ m/^<+<-Tagalog>>$/, q{Don't match internally inverted <Tagalog>} );
ok( "\x{50F2}" !~ m/^<+<Tagalog>>$/, q{Don't match unrelated <Tagalog>} );
ok( "\x{50F2}" =~ m/^<-<Tagalog>>$/, q{Match unrelated externally inverted <Tagalog>} );
ok( "\x{50F2}" =~ m/^<+<-Tagalog>>$/, q{Match unrelated internally inverted <Tagalog>} );
ok( "\x{50F2}\N{TAGALOG LETTER A}" =~ m/<+<Tagalog>>/, q{Match unanchored <Tagalog>} );
# Tagbanwa
ok( "\N{TAGBANWA LETTER A}" =~ m/^<+<Tagbanwa>>$/, q{Match <Tagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" =~ m/^<[A]+<Tagbanwa>>$/, q{Match compound <Tagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" !~ m/^<-<Tagbanwa>>$/, q{Don't match externally inverted <Tagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" !~ m/^<[A]-<Tagbanwa>>$/, q{Don't match compound inverted <Tagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" !~ m/^<+<-Tagbanwa>>$/, q{Don't match internally inverted <Tagbanwa>} );
ok( "\x{8843}" !~ m/^<+<Tagbanwa>>$/, q{Don't match unrelated <Tagbanwa>} );
ok( "\x{8843}" =~ m/^<-<Tagbanwa>>$/, q{Match unrelated externally inverted <Tagbanwa>} );
ok( "\x{8843}" =~ m/^<+<-Tagbanwa>>$/, q{Match unrelated internally inverted <Tagbanwa>} );
ok( "\x{8843}\N{TAGBANWA LETTER A}" =~ m/<+<Tagbanwa>>/, q{Match unanchored <Tagbanwa>} );
# Tamil
ok( "\N{TAMIL SIGN ANUSVARA}" =~ m/^<+<Tamil>>$/, q{Match <Tamil>} );
ok( "\N{TAMIL SIGN ANUSVARA}" =~ m/^<[A]+<Tamil>>$/, q{Match compound <Tamil>} );
ok( "\N{TAMIL SIGN ANUSVARA}" !~ m/^<-<Tamil>>$/, q{Don't match externally inverted <Tamil>} );
ok( "\N{TAMIL SIGN ANUSVARA}" !~ m/^<[A]-<Tamil>>$/, q{Don't match compound inverted <Tamil>} );
ok( "\N{TAMIL SIGN ANUSVARA}" !~ m/^<+<-Tamil>>$/, q{Don't match internally inverted <Tamil>} );
ok( "\x{76C0}" !~ m/^<+<Tamil>>$/, q{Don't match unrelated <Tamil>} );
ok( "\x{76C0}" =~ m/^<-<Tamil>>$/, q{Match unrelated externally inverted <Tamil>} );
ok( "\x{76C0}" =~ m/^<+<-Tamil>>$/, q{Match unrelated internally inverted <Tamil>} );
ok( "\x{76C0}\N{TAMIL SIGN ANUSVARA}" =~ m/<+<Tamil>>/, q{Match unanchored <Tamil>} );
# Telugu
ok( "\N{TELUGU SIGN CANDRABINDU}" =~ m/^<+<Telugu>>$/, q{Match <Telugu>} );
ok( "\N{TELUGU SIGN CANDRABINDU}" =~ m/^<[A]+<Telugu>>$/, q{Match compound <Telugu>} );
ok( "\N{TELUGU SIGN CANDRABINDU}" !~ m/^<-<Telugu>>$/, q{Don't match externally inverted <Telugu>} );
ok( "\N{TELUGU SIGN CANDRABINDU}" !~ m/^<[A]-<Telugu>>$/, q{Don't match compound inverted <Telugu>} );
ok( "\N{TELUGU SIGN CANDRABINDU}" !~ m/^<+<-Telugu>>$/, q{Don't match internally inverted <Telugu>} );
ok( "\x{60BD}" !~ m/^<+<Telugu>>$/, q{Don't match unrelated <Telugu>} );
ok( "\x{60BD}" =~ m/^<-<Telugu>>$/, q{Match unrelated externally inverted <Telugu>} );
ok( "\x{60BD}" =~ m/^<+<-Telugu>>$/, q{Match unrelated internally inverted <Telugu>} );
ok( "\x{60BD}\N{TELUGU SIGN CANDRABINDU}" =~ m/<+<Telugu>>/, q{Match unanchored <Telugu>} );
# Thaana
ok( "\N{THAANA LETTER HAA}" =~ m/^<+<Thaana>>$/, q{Match <Thaana>} );
ok( "\N{THAANA LETTER HAA}" =~ m/^<[A]+<Thaana>>$/, q{Match compound <Thaana>} );
ok( "\N{THAANA LETTER HAA}" !~ m/^<-<Thaana>>$/, q{Don't match externally inverted <Thaana>} );
ok( "\N{THAANA LETTER HAA}" !~ m/^<[A]-<Thaana>>$/, q{Don't match compound inverted <Thaana>} );
ok( "\N{THAANA LETTER HAA}" !~ m/^<+<-Thaana>>$/, q{Don't match internally inverted <Thaana>} );
ok( "\x{2E74}" !~ m/^<+<Thaana>>$/, q{Don't match unrelated <Thaana>} );
ok( "\x{2E74}" =~ m/^<-<Thaana>>$/, q{Match unrelated externally inverted <Thaana>} );
ok( "\x{2E74}" =~ m/^<+<-Thaana>>$/, q{Match unrelated internally inverted <Thaana>} );
ok( "\x{2E74}\N{THAANA LETTER HAA}" =~ m/<+<Thaana>>/, q{Match unanchored <Thaana>} );
# Thai
ok( "\N{THAI CHARACTER KO KAI}" =~ m/^<+<Thai>>$/, q{Match <Thai>} );
ok( "\N{THAI CHARACTER KO KAI}" =~ m/^<[A]+<Thai>>$/, q{Match compound <Thai>} );
ok( "\N{THAI CHARACTER KO KAI}" !~ m/^<-<Thai>>$/, q{Don't match externally inverted <Thai>} );
ok( "\N{THAI CHARACTER KO KAI}" !~ m/^<[A]-<Thai>>$/, q{Don't match compound inverted <Thai>} );
ok( "\N{THAI CHARACTER KO KAI}" !~ m/^<+<-Thai>>$/, q{Don't match internally inverted <Thai>} );
ok( "\x{A929}" !~ m/^<+<Thai>>$/, q{Don't match unrelated <Thai>} );
ok( "\x{A929}" =~ m/^<-<Thai>>$/, q{Match unrelated externally inverted <Thai>} );
ok( "\x{A929}" =~ m/^<+<-Thai>>$/, q{Match unrelated internally inverted <Thai>} );
ok( "\x{A929}\N{THAI CHARACTER KO KAI}" =~ m/<+<Thai>>/, q{Match unanchored <Thai>} );
# Tibetan
ok( "\N{TIBETAN SYLLABLE OM}" =~ m/^<+<Tibetan>>$/, q{Match <Tibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" =~ m/^<[A]+<Tibetan>>$/, q{Match compound <Tibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<-<Tibetan>>$/, q{Don't match externally inverted <Tibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<[A]-<Tibetan>>$/, q{Don't match compound inverted <Tibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<+<-Tibetan>>$/, q{Don't match internally inverted <Tibetan>} );
ok( "\x{19C9}" !~ m/^<+<Tibetan>>$/, q{Don't match unrelated <Tibetan>} );
ok( "\x{19C9}" =~ m/^<-<Tibetan>>$/, q{Match unrelated externally inverted <Tibetan>} );
ok( "\x{19C9}" =~ m/^<+<-Tibetan>>$/, q{Match unrelated internally inverted <Tibetan>} );
ok( "\x{19C9}\N{TIBETAN SYLLABLE OM}" =~ m/<+<Tibetan>>/, q{Match unanchored <Tibetan>} );
# Yi
ok( "\N{YI SYLLABLE IT}" =~ m/^<+<Yi>>$/, q{Match <Yi>} );
ok( "\N{YI SYLLABLE IT}" =~ m/^<[A]+<Yi>>$/, q{Match compound <Yi>} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<-<Yi>>$/, q{Don't match externally inverted <Yi>} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<[A]-<Yi>>$/, q{Don't match compound inverted <Yi>} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<+<-Yi>>$/, q{Don't match internally inverted <Yi>} );
ok( "\x{3A38}" !~ m/^<+<Yi>>$/, q{Don't match unrelated <Yi>} );
ok( "\x{3A38}" =~ m/^<-<Yi>>$/, q{Match unrelated externally inverted <Yi>} );
ok( "\x{3A38}" =~ m/^<+<-Yi>>$/, q{Match unrelated internally inverted <Yi>} );
ok( "\x{3A38}\N{YI SYLLABLE IT}" =~ m/<+<Yi>>/, q{Match unanchored <Yi>} );
# ASCIIHexDigit
ok( "\N{DIGIT ZERO}" =~ m/^<+<ASCIIHexDigit>>$/, q{Match <ASCIIHexDigit>} );
ok( "\N{DIGIT ZERO}" =~ m/^<[A]+<ASCIIHexDigit>>$/, q{Match compound <ASCIIHexDigit>} );
ok( "\N{DIGIT ZERO}" !~ m/^<-<ASCIIHexDigit>>$/, q{Don't match externally inverted <ASCIIHexDigit>} );
ok( "\N{DIGIT ZERO}" !~ m/^<[A]-<ASCIIHexDigit>>$/, q{Don't match compound inverted <ASCIIHexDigit>} );
ok( "\N{DIGIT ZERO}" !~ m/^<+<-ASCIIHexDigit>>$/, q{Don't match internally inverted <ASCIIHexDigit>} );
ok( "\x{55D7}" !~ m/^<+<ASCIIHexDigit>>$/, q{Don't match unrelated <ASCIIHexDigit>} );
ok( "\x{55D7}" =~ m/^<-<ASCIIHexDigit>>$/, q{Match unrelated externally inverted <ASCIIHexDigit>} );
ok( "\x{55D7}" =~ m/^<+<-ASCIIHexDigit>>$/, q{Match unrelated internally inverted <ASCIIHexDigit>} );
ok( "\x{55D7}\N{DIGIT ZERO}" =~ m/<+<ASCIIHexDigit>>/, q{Match unanchored <ASCIIHexDigit>} );
# Dash
ok( "\N{HYPHEN-MINUS}" =~ m/^<+<Dash>>$/, q{Match <Dash>} );
ok( "\N{HYPHEN-MINUS}" =~ m/^<[A]+<Dash>>$/, q{Match compound <Dash>} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<-<Dash>>$/, q{Don't match externally inverted <Dash>} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<[A]-<Dash>>$/, q{Don't match compound inverted <Dash>} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<+<-Dash>>$/, q{Don't match internally inverted <Dash>} );
ok( "\x{4C7F}" !~ m/^<+<Dash>>$/, q{Don't match unrelated <Dash>} );
ok( "\x{4C7F}" =~ m/^<-<Dash>>$/, q{Match unrelated externally inverted <Dash>} );
ok( "\x{4C7F}" =~ m/^<+<-Dash>>$/, q{Match unrelated internally inverted <Dash>} );
ok( "\x{4C7F}\N{HYPHEN-MINUS}" =~ m/<+<Dash>>/, q{Match unanchored <Dash>} );
# Diacritic
ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^<+<Diacritic>>$/, q{Match <Diacritic>} );
ok( "\N{CIRCUMFLEX ACCENT}" =~ m/^<[A]+<Diacritic>>$/, q{Match compound <Diacritic>} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<-<Diacritic>>$/, q{Don't match externally inverted <Diacritic>} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<[A]-<Diacritic>>$/, q{Don't match compound inverted <Diacritic>} );
ok( "\N{CIRCUMFLEX ACCENT}" !~ m/^<+<-Diacritic>>$/, q{Don't match internally inverted <Diacritic>} );
ok( "\x{398E}" !~ m/^<+<Diacritic>>$/, q{Don't match unrelated <Diacritic>} );
ok( "\x{398E}" =~ m/^<-<Diacritic>>$/, q{Match unrelated externally inverted <Diacritic>} );
ok( "\x{398E}" =~ m/^<+<-Diacritic>>$/, q{Match unrelated internally inverted <Diacritic>} );
ok( "\x{398E}\N{CIRCUMFLEX ACCENT}" =~ m/<+<Diacritic>>/, q{Match unanchored <Diacritic>} );
# Extender
ok( "\N{MIDDLE DOT}" =~ m/^<+<Extender>>$/, q{Match <Extender>} );
ok( "\N{MIDDLE DOT}" =~ m/^<[A]+<Extender>>$/, q{Match compound <Extender>} );
ok( "\N{MIDDLE DOT}" !~ m/^<-<Extender>>$/, q{Don't match externally inverted <Extender>} );
ok( "\N{MIDDLE DOT}" !~ m/^<[A]-<Extender>>$/, q{Don't match compound inverted <Extender>} );
ok( "\N{MIDDLE DOT}" !~ m/^<+<-Extender>>$/, q{Don't match internally inverted <Extender>} );
ok( "\x{3F66}" !~ m/^<+<Extender>>$/, q{Don't match unrelated <Extender>} );
ok( "\x{3F66}" =~ m/^<-<Extender>>$/, q{Match unrelated externally inverted <Extender>} );
ok( "\x{3F66}" =~ m/^<+<-Extender>>$/, q{Match unrelated internally inverted <Extender>} );
ok( "\x{3F66}\N{MIDDLE DOT}" =~ m/<+<Extender>>/, q{Match unanchored <Extender>} );
# GraphemeLink
ok( "\N{COMBINING GRAPHEME JOINER}" =~ m/^<+<GraphemeLink>>$/, q{Match <GraphemeLink>} );
ok( "\N{COMBINING GRAPHEME JOINER}" =~ m/^<[A]+<GraphemeLink>>$/, q{Match compound <GraphemeLink>} );
ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^<-<GraphemeLink>>$/, q{Don't match externally inverted <GraphemeLink>} );
ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^<[A]-<GraphemeLink>>$/, q{Don't match compound inverted <GraphemeLink>} );
ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^<+<-GraphemeLink>>$/, q{Don't match internally inverted <GraphemeLink>} );
ok( "\x{34DA}" !~ m/^<+<GraphemeLink>>$/, q{Don't match unrelated <GraphemeLink>} );
ok( "\x{34DA}" =~ m/^<-<GraphemeLink>>$/, q{Match unrelated externally inverted <GraphemeLink>} );
ok( "\x{34DA}" =~ m/^<+<-GraphemeLink>>$/, q{Match unrelated internally inverted <GraphemeLink>} );
ok( "\x{34DA}\N{COMBINING GRAPHEME JOINER}" =~ m/<+<GraphemeLink>>/, q{Match unanchored <GraphemeLink>} );
# HexDigit
ok( "\N{DIGIT ZERO}" =~ m/^<+<HexDigit>>$/, q{Match <HexDigit>} );
ok( "\N{DIGIT ZERO}" =~ m/^<[A]+<HexDigit>>$/, q{Match compound <HexDigit>} );
ok( "\N{DIGIT ZERO}" !~ m/^<-<HexDigit>>$/, q{Don't match externally inverted <HexDigit>} );
ok( "\N{DIGIT ZERO}" !~ m/^<[A]-<HexDigit>>$/, q{Don't match compound inverted <HexDigit>} );
ok( "\N{DIGIT ZERO}" !~ m/^<+<-HexDigit>>$/, q{Don't match internally inverted <HexDigit>} );
ok( "\x{D446}" !~ m/^<+<HexDigit>>$/, q{Don't match unrelated <HexDigit>} );
ok( "\x{D446}" =~ m/^<-<HexDigit>>$/, q{Match unrelated externally inverted <HexDigit>} );
ok( "\x{D446}" =~ m/^<+<-HexDigit>>$/, q{Match unrelated internally inverted <HexDigit>} );
ok( "\x{D446}\N{DIGIT ZERO}" =~ m/<+<HexDigit>>/, q{Match unanchored <HexDigit>} );
# Hyphen
ok( "\N{HYPHEN-MINUS}" =~ m/^<+<Hyphen>>$/, q{Match <Hyphen>} );
ok( "\N{HYPHEN-MINUS}" =~ m/^<[A]+<Hyphen>>$/, q{Match compound <Hyphen>} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<-<Hyphen>>$/, q{Don't match externally inverted <Hyphen>} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<[A]-<Hyphen>>$/, q{Don't match compound inverted <Hyphen>} );
ok( "\N{HYPHEN-MINUS}" !~ m/^<+<-Hyphen>>$/, q{Don't match internally inverted <Hyphen>} );
ok( "\N{YI SYLLABLE WOX}" !~ m/^<+<Hyphen>>$/, q{Don't match unrelated <Hyphen>} );
ok( "\N{YI SYLLABLE WOX}" =~ m/^<-<Hyphen>>$/, q{Match unrelated externally inverted <Hyphen>} );
ok( "\N{YI SYLLABLE WOX}" =~ m/^<+<-Hyphen>>$/, q{Match unrelated internally inverted <Hyphen>} );
ok( "\N{YI SYLLABLE WOX}\N{HYPHEN-MINUS}" =~ m/<+<Hyphen>>/, q{Match unanchored <Hyphen>} );
# Ideographic
ok( "\N{IDEOGRAPHIC CLOSING MARK}" =~ m/^<+<Ideographic>>$/, q{Match <Ideographic>} );
ok( "\N{IDEOGRAPHIC CLOSING MARK}" =~ m/^<[A]+<Ideographic>>$/, q{Match compound <Ideographic>} );
ok( "\N{IDEOGRAPHIC CLOSING MARK}" !~ m/^<-<Ideographic>>$/, q{Don't match externally inverted <Ideographic>} );
ok( "\N{IDEOGRAPHIC CLOSING MARK}" !~ m/^<[A]-<Ideographic>>$/, q{Don't match compound inverted <Ideographic>} );
ok( "\N{IDEOGRAPHIC CLOSING MARK}" !~ m/^<+<-Ideographic>>$/, q{Don't match internally inverted <Ideographic>} );
ok( "\x{CB86}" !~ m/^<+<Ideographic>>$/, q{Don't match unrelated <Ideographic>} );
ok( "\x{CB86}" =~ m/^<-<Ideographic>>$/, q{Match unrelated externally inverted <Ideographic>} );
ok( "\x{CB86}" =~ m/^<+<-Ideographic>>$/, q{Match unrelated internally inverted <Ideographic>} );
ok( "\x{CB86}\N{IDEOGRAPHIC CLOSING MARK}" =~ m/<+<Ideographic>>/, q{Match unanchored <Ideographic>} );
# IDSBinaryOperator
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/^<+<IDSBinaryOperator>>$/, q{Match <IDSBinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/^<[A]+<IDSBinaryOperator>>$/, q{Match compound <IDSBinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<-<IDSBinaryOperator>>$/, q{Don't match externally inverted <IDSBinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<[A]-<IDSBinaryOperator>>$/, q{Don't match compound inverted <IDSBinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<+<-IDSBinaryOperator>>$/, q{Don't match internally inverted <IDSBinaryOperator>} );
ok( "\x{54A0}" !~ m/^<+<IDSBinaryOperator>>$/, q{Don't match unrelated <IDSBinaryOperator>} );
ok( "\x{54A0}" =~ m/^<-<IDSBinaryOperator>>$/, q{Match unrelated externally inverted <IDSBinaryOperator>} );
ok( "\x{54A0}" =~ m/^<+<-IDSBinaryOperator>>$/, q{Match unrelated internally inverted <IDSBinaryOperator>} );
ok( "\x{54A0}\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/<+<IDSBinaryOperator>>/, q{Match unanchored <IDSBinaryOperator>} );
# IDSTrinaryOperator
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" =~ m/^<+<IDSTrinaryOperator>>$/, q{Match <IDSTrinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" =~ m/^<[A]+<IDSTrinaryOperator>>$/, q{Match compound <IDSTrinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" !~ m/^<-<IDSTrinaryOperator>>$/, q{Don't match externally inverted <IDSTrinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" !~ m/^<[A]-<IDSTrinaryOperator>>$/, q{Don't match compound inverted <IDSTrinaryOperator>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" !~ m/^<+<-IDSTrinaryOperator>>$/, q{Don't match internally inverted <IDSTrinaryOperator>} );
ok( "\x{4900}" !~ m/^<+<IDSTrinaryOperator>>$/, q{Don't match unrelated <IDSTrinaryOperator>} );
ok( "\x{4900}" =~ m/^<-<IDSTrinaryOperator>>$/, q{Match unrelated externally inverted <IDSTrinaryOperator>} );
ok( "\x{4900}" =~ m/^<+<-IDSTrinaryOperator>>$/, q{Match unrelated internally inverted <IDSTrinaryOperator>} );
ok( "\x{4900}\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT}" =~ m/<+<IDSTrinaryOperator>>/, q{Match unanchored <IDSTrinaryOperator>} );
# JoinControl
ok( "\N{ZERO WIDTH NON-JOINER}" =~ m/^<+<JoinControl>>$/, q{Match <JoinControl>} );
ok( "\N{ZERO WIDTH NON-JOINER}" =~ m/^<[A]+<JoinControl>>$/, q{Match compound <JoinControl>} );
ok( "\N{ZERO WIDTH NON-JOINER}" !~ m/^<-<JoinControl>>$/, q{Don't match externally inverted <JoinControl>} );
ok( "\N{ZERO WIDTH NON-JOINER}" !~ m/^<[A]-<JoinControl>>$/, q{Don't match compound inverted <JoinControl>} );
ok( "\N{ZERO WIDTH NON-JOINER}" !~ m/^<+<-JoinControl>>$/, q{Don't match internally inverted <JoinControl>} );
ok( "\N{CYRILLIC CAPITAL LETTER OT}" !~ m/^<+<JoinControl>>$/, q{Don't match unrelated <JoinControl>} );
ok( "\N{CYRILLIC CAPITAL LETTER OT}" =~ m/^<-<JoinControl>>$/, q{Match unrelated externally inverted <JoinControl>} );
ok( "\N{CYRILLIC CAPITAL LETTER OT}" =~ m/^<+<-JoinControl>>$/, q{Match unrelated internally inverted <JoinControl>} );
ok( "\N{CYRILLIC CAPITAL LETTER OT}\N{ZERO WIDTH NON-JOINER}" =~ m/<+<JoinControl>>/, q{Match unanchored <JoinControl>} );
# LogicalOrderException
ok( "\N{THAI CHARACTER SARA E}" =~ m/^<+<LogicalOrderException>>$/, q{Match <LogicalOrderException>} );
ok( "\N{THAI CHARACTER SARA E}" =~ m/^<[A]+<LogicalOrderException>>$/, q{Match compound <LogicalOrderException>} );
ok( "\N{THAI CHARACTER SARA E}" !~ m/^<-<LogicalOrderException>>$/, q{Don't match externally inverted <LogicalOrderException>} );
ok( "\N{THAI CHARACTER SARA E}" !~ m/^<[A]-<LogicalOrderException>>$/, q{Don't match compound inverted <LogicalOrderException>} );
ok( "\N{THAI CHARACTER SARA E}" !~ m/^<+<-LogicalOrderException>>$/, q{Don't match internally inverted <LogicalOrderException>} );
ok( "\x{88D2}" !~ m/^<+<LogicalOrderException>>$/, q{Don't match unrelated <LogicalOrderException>} );
ok( "\x{88D2}" =~ m/^<-<LogicalOrderException>>$/, q{Match unrelated externally inverted <LogicalOrderException>} );
ok( "\x{88D2}" =~ m/^<+<-LogicalOrderException>>$/, q{Match unrelated internally inverted <LogicalOrderException>} );
ok( "\x{88D2}" !~ m/^<+<LogicalOrderException>>$/, q{Don't match related <LogicalOrderException>} );
ok( "\x{88D2}" =~ m/^<+<-LogicalOrderException>>$/, q{Match related internally inverted <LogicalOrderException>} );
ok( "\x{88D2}" =~ m/^<-<LogicalOrderException>>$/, q{Match related externally inverted <LogicalOrderException>} );
ok( "\x{88D2}\x{88D2}\N{THAI CHARACTER SARA E}" =~ m/<+<LogicalOrderException>>/, q{Match unanchored <LogicalOrderException>} );
# NoncharacterCodePoint
ok( "\N{CIRCLED HANGUL NIEUN A}" !~ m/^<+<NoncharacterCodePoint>>$/, q{Don't match unrelated <NoncharacterCodePoint>} );
ok( "\N{CIRCLED HANGUL NIEUN A}" =~ m/^<-<NoncharacterCodePoint>>$/, q{Match unrelated externally inverted <NoncharacterCodePoint>} );
ok( "\N{CIRCLED HANGUL NIEUN A}" =~ m/^<+<-NoncharacterCodePoint>>$/, q{Match unrelated internally inverted <NoncharacterCodePoint>} );
ok( "\N{CIRCLED IDEOGRAPH ONE}" !~ m/^<+<NoncharacterCodePoint>>$/, q{Don't match related <NoncharacterCodePoint>} );
ok( "\N{CIRCLED IDEOGRAPH ONE}" =~ m/^<+<-NoncharacterCodePoint>>$/, q{Match related internally inverted <NoncharacterCodePoint>} );
ok( "\N{CIRCLED IDEOGRAPH ONE}" =~ m/^<-<NoncharacterCodePoint>>$/, q{Match related externally inverted <NoncharacterCodePoint>} );
# OtherAlphabetic
ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" =~ m/^<+<OtherAlphabetic>>$/, q{Match <OtherAlphabetic>} );
ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" =~ m/^<[A]+<OtherAlphabetic>>$/, q{Match compound <OtherAlphabetic>} );
ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" !~ m/^<-<OtherAlphabetic>>$/, q{Don't match externally inverted <OtherAlphabetic>} );
ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" !~ m/^<[A]-<OtherAlphabetic>>$/, q{Don't match compound inverted <OtherAlphabetic>} );
ok( "\N{COMBINING GREEK YPOGEGRAMMENI}" !~ m/^<+<-OtherAlphabetic>>$/, q{Don't match internally inverted <OtherAlphabetic>} );
ok( "\x{7B02}" !~ m/^<+<OtherAlphabetic>>$/, q{Don't match unrelated <OtherAlphabetic>} );
ok( "\x{7B02}" =~ m/^<-<OtherAlphabetic>>$/, q{Match unrelated externally inverted <OtherAlphabetic>} );
ok( "\x{7B02}" =~ m/^<+<-OtherAlphabetic>>$/, q{Match unrelated internally inverted <OtherAlphabetic>} );
ok( "\x{7B02}\N{COMBINING GREEK YPOGEGRAMMENI}" =~ m/<+<OtherAlphabetic>>/, q{Match unanchored <OtherAlphabetic>} );
# OtherDefaultIgnorableCodePoint
ok( "\N{COMBINING GRAPHEME JOINER}" =~ m/^<+<OtherDefaultIgnorableCodePoint>>$/, q{Match <OtherDefaultIgnorableCodePoint>} );
ok( "\N{COMBINING GRAPHEME JOINER}" =~ m/^<[A]+<OtherDefaultIgnorableCodePoint>>$/, q{Match compound <OtherDefaultIgnorableCodePoint>} );
ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^<-<OtherDefaultIgnorableCodePoint>>$/, q{Don't match externally inverted <OtherDefaultIgnorableCodePoint>} );
ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^<[A]-<OtherDefaultIgnorableCodePoint>>$/, q{Don't match compound inverted <OtherDefaultIgnorableCodePoint>} );
ok( "\N{COMBINING GRAPHEME JOINER}" !~ m/^<+<-OtherDefaultIgnorableCodePoint>>$/, q{Don't match internally inverted <OtherDefaultIgnorableCodePoint>} );
ok( "\x{42DA}" !~ m/^<+<OtherDefaultIgnorableCodePoint>>$/, q{Don't match unrelated <OtherDefaultIgnorableCodePoint>} );
ok( "\x{42DA}" =~ m/^<-<OtherDefaultIgnorableCodePoint>>$/, q{Match unrelated externally inverted <OtherDefaultIgnorableCodePoint>} );
ok( "\x{42DA}" =~ m/^<+<-OtherDefaultIgnorableCodePoint>>$/, q{Match unrelated internally inverted <OtherDefaultIgnorableCodePoint>} );
ok( "\x{42DA}\N{COMBINING GRAPHEME JOINER}" =~ m/<+<OtherDefaultIgnorableCodePoint>>/, q{Match unanchored <OtherDefaultIgnorableCodePoint>} );
# OtherGraphemeExtend
ok( "\N{BENGALI VOWEL SIGN AA}" =~ m/^<+<OtherGraphemeExtend>>$/, q{Match <OtherGraphemeExtend>} );
ok( "\N{BENGALI VOWEL SIGN AA}" =~ m/^<[A]+<OtherGraphemeExtend>>$/, q{Match compound <OtherGraphemeExtend>} );
ok( "\N{BENGALI VOWEL SIGN AA}" !~ m/^<-<OtherGraphemeExtend>>$/, q{Don't match externally inverted <OtherGraphemeExtend>} );
ok( "\N{BENGALI VOWEL SIGN AA}" !~ m/^<[A]-<OtherGraphemeExtend>>$/, q{Don't match compound inverted <OtherGraphemeExtend>} );
ok( "\N{BENGALI VOWEL SIGN AA}" !~ m/^<+<-OtherGraphemeExtend>>$/, q{Don't match internally inverted <OtherGraphemeExtend>} );
ok( "\N{TAI LE LETTER KHA}" !~ m/^<+<OtherGraphemeExtend>>$/, q{Don't match unrelated <OtherGraphemeExtend>} );
ok( "\N{TAI LE LETTER KHA}" =~ m/^<-<OtherGraphemeExtend>>$/, q{Match unrelated externally inverted <OtherGraphemeExtend>} );
ok( "\N{TAI LE LETTER KHA}" =~ m/^<+<-OtherGraphemeExtend>>$/, q{Match unrelated internally inverted <OtherGraphemeExtend>} );
ok( "\N{TAI LE LETTER KHA}\N{BENGALI VOWEL SIGN AA}" =~ m/<+<OtherGraphemeExtend>>/, q{Match unanchored <OtherGraphemeExtend>} );
# OtherLowercase
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<+<OtherLowercase>>$/, q{Match <OtherLowercase>} );
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<[A]+<OtherLowercase>>$/, q{Match compound <OtherLowercase>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<-<OtherLowercase>>$/, q{Don't match externally inverted <OtherLowercase>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<[A]-<OtherLowercase>>$/, q{Don't match compound inverted <OtherLowercase>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<+<-OtherLowercase>>$/, q{Don't match internally inverted <OtherLowercase>} );
ok( "\x{8153}" !~ m/^<+<OtherLowercase>>$/, q{Don't match unrelated <OtherLowercase>} );
ok( "\x{8153}" =~ m/^<-<OtherLowercase>>$/, q{Match unrelated externally inverted <OtherLowercase>} );
ok( "\x{8153}" =~ m/^<+<-OtherLowercase>>$/, q{Match unrelated internally inverted <OtherLowercase>} );
ok( "\x{8153}\N{MODIFIER LETTER SMALL H}" =~ m/<+<OtherLowercase>>/, q{Match unanchored <OtherLowercase>} );
# OtherMath
ok( "\N{LEFT PARENTHESIS}" =~ m/^<+<OtherMath>>$/, q{Match <OtherMath>} );
ok( "\N{LEFT PARENTHESIS}" =~ m/^<[A]+<OtherMath>>$/, q{Match compound <OtherMath>} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<-<OtherMath>>$/, q{Don't match externally inverted <OtherMath>} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<[A]-<OtherMath>>$/, q{Don't match compound inverted <OtherMath>} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<+<-OtherMath>>$/, q{Don't match internally inverted <OtherMath>} );
ok( "\x{6D2F}" !~ m/^<+<OtherMath>>$/, q{Don't match unrelated <OtherMath>} );
ok( "\x{6D2F}" =~ m/^<-<OtherMath>>$/, q{Match unrelated externally inverted <OtherMath>} );
ok( "\x{6D2F}" =~ m/^<+<-OtherMath>>$/, q{Match unrelated internally inverted <OtherMath>} );
ok( "\x{6D2F}\N{LEFT PARENTHESIS}" =~ m/<+<OtherMath>>/, q{Match unanchored <OtherMath>} );
# OtherUppercase
ok( "\N{ROMAN NUMERAL ONE}" =~ m/^<+<OtherUppercase>>$/, q{Match <OtherUppercase>} );
ok( "\N{ROMAN NUMERAL ONE}" =~ m/^<[A]+<OtherUppercase>>$/, q{Match compound <OtherUppercase>} );
ok( "\N{ROMAN NUMERAL ONE}" !~ m/^<-<OtherUppercase>>$/, q{Don't match externally inverted <OtherUppercase>} );
ok( "\N{ROMAN NUMERAL ONE}" !~ m/^<[A]-<OtherUppercase>>$/, q{Don't match compound inverted <OtherUppercase>} );
ok( "\N{ROMAN NUMERAL ONE}" !~ m/^<+<-OtherUppercase>>$/, q{Don't match internally inverted <OtherUppercase>} );
ok( "\x{A746}" !~ m/^<+<OtherUppercase>>$/, q{Don't match unrelated <OtherUppercase>} );
ok( "\x{A746}" =~ m/^<-<OtherUppercase>>$/, q{Match unrelated externally inverted <OtherUppercase>} );
ok( "\x{A746}" =~ m/^<+<-OtherUppercase>>$/, q{Match unrelated internally inverted <OtherUppercase>} );
ok( "\x{A746}\N{ROMAN NUMERAL ONE}" =~ m/<+<OtherUppercase>>/, q{Match unanchored <OtherUppercase>} );
# QuotationMark
ok( "\N{LEFT SINGLE QUOTATION MARK}" =~ m/^<+<QuotationMark>>$/, q{Match <QuotationMark>} );
ok( "\N{LEFT SINGLE QUOTATION MARK}" =~ m/^<[A]+<QuotationMark>>$/, q{Match compound <QuotationMark>} );
ok( "\N{LEFT SINGLE QUOTATION MARK}" !~ m/^<-<QuotationMark>>$/, q{Don't match externally inverted <QuotationMark>} );
ok( "\N{LEFT SINGLE QUOTATION MARK}" !~ m/^<[A]-<QuotationMark>>$/, q{Don't match compound inverted <QuotationMark>} );
ok( "\N{LEFT SINGLE QUOTATION MARK}" !~ m/^<+<-QuotationMark>>$/, q{Don't match internally inverted <QuotationMark>} );
ok( "\N{GURMUKHI VOWEL SIGN AI}" !~ m/^<+<QuotationMark>>$/, q{Don't match unrelated <QuotationMark>} );
ok( "\N{GURMUKHI VOWEL SIGN AI}" =~ m/^<-<QuotationMark>>$/, q{Match unrelated externally inverted <QuotationMark>} );
ok( "\N{GURMUKHI VOWEL SIGN AI}" =~ m/^<+<-QuotationMark>>$/, q{Match unrelated internally inverted <QuotationMark>} );
ok( "\N{GURMUKHI VOWEL SIGN AI}\N{LEFT SINGLE QUOTATION MARK}" =~ m/<+<QuotationMark>>/, q{Match unanchored <QuotationMark>} );
# Radical
ok( "\N{CJK RADICAL REPEAT}" =~ m/^<+<Radical>>$/, q{Match <Radical>} );
ok( "\N{CJK RADICAL REPEAT}" =~ m/^<[A]+<Radical>>$/, q{Match compound <Radical>} );
ok( "\N{CJK RADICAL REPEAT}" !~ m/^<-<Radical>>$/, q{Don't match externally inverted <Radical>} );
ok( "\N{CJK RADICAL REPEAT}" !~ m/^<[A]-<Radical>>$/, q{Don't match compound inverted <Radical>} );
ok( "\N{CJK RADICAL REPEAT}" !~ m/^<+<-Radical>>$/, q{Don't match internally inverted <Radical>} );
ok( "\N{RUNIC LETTER ETH}" !~ m/^<+<Radical>>$/, q{Don't match unrelated <Radical>} );
ok( "\N{RUNIC LETTER ETH}" =~ m/^<-<Radical>>$/, q{Match unrelated externally inverted <Radical>} );
ok( "\N{RUNIC LETTER ETH}" =~ m/^<+<-Radical>>$/, q{Match unrelated internally inverted <Radical>} );
ok( "\N{RUNIC LETTER ETH}\N{CJK RADICAL REPEAT}" =~ m/<+<Radical>>/, q{Match unanchored <Radical>} );
# SoftDotted
ok( "\N{LATIN SMALL LETTER I WITH TILDE BELOW}" =~ m/^<+<SoftDotted>>$/, q{Match <SoftDotted>} );
ok( "\N{LATIN SMALL LETTER I WITH TILDE BELOW}" =~ m/^<[A]+<SoftDotted>>$/, q{Match compound <SoftDotted>} );
ok( "\N{LATIN SMALL LETTER I WITH TILDE BELOW}" !~ m/^<-<SoftDotted>>$/, q{Don't match externally inverted <SoftDotted>} );
ok( "\N{LATIN SMALL LETTER I WITH TILDE BELOW}" !~ m/^<[A]-<SoftDotted>>$/, q{Don't match compound inverted <SoftDotted>} );
ok( "\N{LATIN SMALL LETTER I WITH TILDE BELOW}" !~ m/^<+<-SoftDotted>>$/, q{Don't match internally inverted <SoftDotted>} );
ok( "\N{LATIN CAPITAL LETTER B WITH DOT ABOVE}" !~ m/^<+<SoftDotted>>$/, q{Don't match unrelated <SoftDotted>} );
ok( "\N{LATIN CAPITAL LETTER B WITH DOT ABOVE}" =~ m/^<-<SoftDotted>>$/, q{Match unrelated externally inverted <SoftDotted>} );
ok( "\N{LATIN CAPITAL LETTER B WITH DOT ABOVE}" =~ m/^<+<-SoftDotted>>$/, q{Match unrelated internally inverted <SoftDotted>} );
ok( "\N{GREEK KORONIS}" !~ m/^<+<SoftDotted>>$/, q{Don't match related <SoftDotted>} );
ok( "\N{GREEK KORONIS}" =~ m/^<+<-SoftDotted>>$/, q{Match related internally inverted <SoftDotted>} );
ok( "\N{GREEK KORONIS}" =~ m/^<-<SoftDotted>>$/, q{Match related externally inverted <SoftDotted>} );
ok( "\N{LATIN CAPITAL LETTER B WITH DOT ABOVE}\N{GREEK KORONIS}\N{LATIN SMALL LETTER I WITH TILDE BELOW}" =~ m/<+<SoftDotted>>/, q{Match unanchored <SoftDotted>} );
# TerminalPunctuation
ok( "\N{EXCLAMATION MARK}" =~ m/^<+<TerminalPunctuation>>$/, q{Match <TerminalPunctuation>} );
ok( "\N{EXCLAMATION MARK}" =~ m/^<[A]+<TerminalPunctuation>>$/, q{Match compound <TerminalPunctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<-<TerminalPunctuation>>$/, q{Don't match externally inverted <TerminalPunctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<[A]-<TerminalPunctuation>>$/, q{Don't match compound inverted <TerminalPunctuation>} );
ok( "\N{EXCLAMATION MARK}" !~ m/^<+<-TerminalPunctuation>>$/, q{Don't match internally inverted <TerminalPunctuation>} );
ok( "\x{B43A}" !~ m/^<+<TerminalPunctuation>>$/, q{Don't match unrelated <TerminalPunctuation>} );
ok( "\x{B43A}" =~ m/^<-<TerminalPunctuation>>$/, q{Match unrelated externally inverted <TerminalPunctuation>} );
ok( "\x{B43A}" =~ m/^<+<-TerminalPunctuation>>$/, q{Match unrelated internally inverted <TerminalPunctuation>} );
ok( "\x{B43A}\N{EXCLAMATION MARK}" =~ m/<+<TerminalPunctuation>>/, q{Match unanchored <TerminalPunctuation>} );
# UnifiedIdeograph
ok( "\x{88D8}" =~ m/^<+<UnifiedIdeograph>>$/, q{Match <UnifiedIdeograph>} );
ok( "\x{88D8}" =~ m/^<[A]+<UnifiedIdeograph>>$/, q{Match compound <UnifiedIdeograph>} );
ok( "\x{88D8}" !~ m/^<-<UnifiedIdeograph>>$/, q{Don't match externally inverted <UnifiedIdeograph>} );
ok( "\x{88D8}" !~ m/^<[A]-<UnifiedIdeograph>>$/, q{Don't match compound inverted <UnifiedIdeograph>} );
ok( "\x{88D8}" !~ m/^<+<-UnifiedIdeograph>>$/, q{Don't match internally inverted <UnifiedIdeograph>} );
ok( "\x{9FA6}" !~ m/^<+<UnifiedIdeograph>>$/, q{Don't match unrelated <UnifiedIdeograph>} );
ok( "\x{9FA6}" =~ m/^<-<UnifiedIdeograph>>$/, q{Match unrelated externally inverted <UnifiedIdeograph>} );
ok( "\x{9FA6}" =~ m/^<+<-UnifiedIdeograph>>$/, q{Match unrelated internally inverted <UnifiedIdeograph>} );
ok( "\x{9FA6}\x{88D8}" =~ m/<+<UnifiedIdeograph>>/, q{Match unanchored <UnifiedIdeograph>} );
# WhiteSpace
ok( "\N{CHARACTER TABULATION}" =~ m/^<+<WhiteSpace>>$/, q{Match <WhiteSpace>} );
ok( "\N{CHARACTER TABULATION}" =~ m/^<[A]+<WhiteSpace>>$/, q{Match compound <WhiteSpace>} );
ok( "\N{CHARACTER TABULATION}" !~ m/^<-<WhiteSpace>>$/, q{Don't match externally inverted <WhiteSpace>} );
ok( "\N{CHARACTER TABULATION}" !~ m/^<[A]-<WhiteSpace>>$/, q{Don't match compound inverted <WhiteSpace>} );
ok( "\N{CHARACTER TABULATION}" !~ m/^<+<-WhiteSpace>>$/, q{Don't match internally inverted <WhiteSpace>} );
ok( "\x{4345}" !~ m/^<+<WhiteSpace>>$/, q{Don't match unrelated <WhiteSpace>} );
ok( "\x{4345}" =~ m/^<-<WhiteSpace>>$/, q{Match unrelated externally inverted <WhiteSpace>} );
ok( "\x{4345}" =~ m/^<+<-WhiteSpace>>$/, q{Match unrelated internally inverted <WhiteSpace>} );
ok( "\x{4345}\N{CHARACTER TABULATION}" =~ m/<+<WhiteSpace>>/, q{Match unanchored <WhiteSpace>} );
# Alphabetic # Lu + Ll + Lt + Lm + Lo + OtherAlphabetic
ok( "\x{3816}" =~ m/^<+<Alphabetic>>$/, q{Match (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{3816}" =~ m/^<[A]+<Alphabetic>>$/, q{Match compound (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{3816}" !~ m/^<-<Alphabetic>>$/, q{Don't match externally inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{3816}" !~ m/^<[A]-<Alphabetic>>$/, q{Don't match compound inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{3816}" !~ m/^<+<-Alphabetic>>$/, q{Don't match internally inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{4DB6}" !~ m/^<+<Alphabetic>>$/, q{Don't match unrelated (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{4DB6}" =~ m/^<-<Alphabetic>>$/, q{Match unrelated externally inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{4DB6}" =~ m/^<+<-Alphabetic>>$/, q{Match unrelated internally inverted (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
ok( "\x{4DB6}\x{3816}" =~ m/<+<Alphabetic>>/, q{Match unanchored (Lu + Ll + Lt + Lm + Lo + OtherAlphabetic)} );
# Lowercase # Ll + OtherLowercase
ok( "\N{LATIN LETTER SMALL CAPITAL A}" =~ m/^<+<Lowercase>>$/, q{Match (Ll + OtherLowercase)} );
ok( "\N{LATIN LETTER SMALL CAPITAL A}" =~ m/^<[A]+<Lowercase>>$/, q{Match compound (Ll + OtherLowercase)} );
ok( "\N{LATIN LETTER SMALL CAPITAL A}" !~ m/^<-<Lowercase>>$/, q{Don't match externally inverted (Ll + OtherLowercase)} );
ok( "\N{LATIN LETTER SMALL CAPITAL A}" !~ m/^<[A]-<Lowercase>>$/, q{Don't match compound inverted (Ll + OtherLowercase)} );
ok( "\N{LATIN LETTER SMALL CAPITAL A}" !~ m/^<+<-Lowercase>>$/, q{Don't match internally inverted (Ll + OtherLowercase)} );
ok( "\x{0D3D}" !~ m/^<+<Lowercase>>$/, q{Don't match unrelated (Ll + OtherLowercase)} );
ok( "\x{0D3D}" =~ m/^<-<Lowercase>>$/, q{Match unrelated externally inverted (Ll + OtherLowercase)} );
ok( "\x{0D3D}" =~ m/^<+<-Lowercase>>$/, q{Match unrelated internally inverted (Ll + OtherLowercase)} );
ok( "\N{MALAYALAM LETTER VOCALIC RR}" !~ m/^<+<Lowercase>>$/, q{Don't match related (Ll + OtherLowercase)} );
ok( "\N{MALAYALAM LETTER VOCALIC RR}" =~ m/^<+<-Lowercase>>$/, q{Match related internally inverted (Ll + OtherLowercase)} );
ok( "\N{MALAYALAM LETTER VOCALIC RR}" =~ m/^<-<Lowercase>>$/, q{Match related externally inverted (Ll + OtherLowercase)} );
ok( "\x{0D3D}\N{MALAYALAM LETTER VOCALIC RR}\N{LATIN LETTER SMALL CAPITAL A}" =~ m/<+<Lowercase>>/, q{Match unanchored (Ll + OtherLowercase)} );
# Uppercase # Lu + OtherUppercase
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<+<Uppercase>>$/, q{Match (Lu + OtherUppercase)} );
ok( "\N{LATIN CAPITAL LETTER A}" =~ m/^<[A]+<Uppercase>>$/, q{Match compound (Lu + OtherUppercase)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<-<Uppercase>>$/, q{Don't match externally inverted (Lu + OtherUppercase)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<[A]-<Uppercase>>$/, q{Don't match compound inverted (Lu + OtherUppercase)} );
ok( "\N{LATIN CAPITAL LETTER A}" !~ m/^<+<-Uppercase>>$/, q{Don't match internally inverted (Lu + OtherUppercase)} );
ok( "\x{C107}" !~ m/^<+<Uppercase>>$/, q{Don't match unrelated (Lu + OtherUppercase)} );
ok( "\x{C107}" =~ m/^<-<Uppercase>>$/, q{Match unrelated externally inverted (Lu + OtherUppercase)} );
ok( "\x{C107}" =~ m/^<+<-Uppercase>>$/, q{Match unrelated internally inverted (Lu + OtherUppercase)} );
ok( "\x{C107}\N{LATIN CAPITAL LETTER A}" =~ m/<+<Uppercase>>/, q{Match unanchored (Lu + OtherUppercase)} );
# Math # Sm + OtherMath
ok( "\N{LEFT PARENTHESIS}" =~ m/^<+<Math>>$/, q{Match (Sm + OtherMath)} );
ok( "\N{LEFT PARENTHESIS}" =~ m/^<[A]+<Math>>$/, q{Match compound (Sm + OtherMath)} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<-<Math>>$/, q{Don't match externally inverted (Sm + OtherMath)} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<[A]-<Math>>$/, q{Don't match compound inverted (Sm + OtherMath)} );
ok( "\N{LEFT PARENTHESIS}" !~ m/^<+<-Math>>$/, q{Don't match internally inverted (Sm + OtherMath)} );
ok( "\x{D73F}" !~ m/^<+<Math>>$/, q{Don't match unrelated (Sm + OtherMath)} );
ok( "\x{D73F}" =~ m/^<-<Math>>$/, q{Match unrelated externally inverted (Sm + OtherMath)} );
ok( "\x{D73F}" =~ m/^<+<-Math>>$/, q{Match unrelated internally inverted (Sm + OtherMath)} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<Math>>$/, q{Don't match related (Sm + OtherMath)} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<-Math>>$/, q{Match related internally inverted (Sm + OtherMath)} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<-<Math>>$/, q{Match related externally inverted (Sm + OtherMath)} );
ok( "\x{D73F}\N{COMBINING GRAVE ACCENT}\N{LEFT PARENTHESIS}" =~ m/<+<Math>>/, q{Match unanchored (Sm + OtherMath)} );
# ID_Start # Lu + Ll + Lt + Lm + Lo + Nl
ok( "\x{4E5B}" =~ m/^<+<ID_Start>>$/, q{Match (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{4E5B}" =~ m/^<[A]+<ID_Start>>$/, q{Match compound (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{4E5B}" !~ m/^<-<ID_Start>>$/, q{Don't match externally inverted (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{4E5B}" !~ m/^<[A]-<ID_Start>>$/, q{Don't match compound inverted (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{4E5B}" !~ m/^<+<-ID_Start>>$/, q{Don't match internally inverted (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{9FA6}" !~ m/^<+<ID_Start>>$/, q{Don't match unrelated (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{9FA6}" =~ m/^<-<ID_Start>>$/, q{Match unrelated externally inverted (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{9FA6}" =~ m/^<+<-ID_Start>>$/, q{Match unrelated internally inverted (Lu + Ll + Lt + Lm + Lo + Nl)} );
ok( "\x{9FA6}\x{4E5B}" =~ m/<+<ID_Start>>/, q{Match unanchored (Lu + Ll + Lt + Lm + Lo + Nl)} );
# ID_Continue # ID_Start + Mn + Mc + Nd + Pc
ok( "\N{IDEOGRAPHIC ITERATION MARK}" =~ m/^<+<ID_Continue>>$/, q{Match (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{IDEOGRAPHIC ITERATION MARK}" =~ m/^<[A]+<ID_Continue>>$/, q{Match compound (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{IDEOGRAPHIC ITERATION MARK}" !~ m/^<-<ID_Continue>>$/, q{Don't match externally inverted (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{IDEOGRAPHIC ITERATION MARK}" !~ m/^<[A]-<ID_Continue>>$/, q{Don't match compound inverted (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{IDEOGRAPHIC ITERATION MARK}" !~ m/^<+<-ID_Continue>>$/, q{Don't match internally inverted (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{APL FUNCTIONAL SYMBOL UP TACK JOT}" !~ m/^<+<ID_Continue>>$/, q{Don't match unrelated (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{APL FUNCTIONAL SYMBOL UP TACK JOT}" =~ m/^<-<ID_Continue>>$/, q{Match unrelated externally inverted (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{APL FUNCTIONAL SYMBOL UP TACK JOT}" =~ m/^<+<-ID_Continue>>$/, q{Match unrelated internally inverted (ID_Start + Mn + Mc + Nd + Pc)} );
ok( "\N{APL FUNCTIONAL SYMBOL UP TACK JOT}\N{IDEOGRAPHIC ITERATION MARK}" =~ m/<+<ID_Continue>>/, q{Match unanchored (ID_Start + Mn + Mc + Nd + Pc)} );
# Any # Any character
ok( "\N{SYRIAC LETTER TAW}" =~ m/^<+<Any>>$/, q{Match (Any character)} );
ok( "\N{SYRIAC LETTER TAW}" =~ m/^<[A]+<Any>>$/, q{Match compound (Any character)} );
ok( "\N{SYRIAC LETTER TAW}" !~ m/^<-<Any>>$/, q{Don't match externally inverted (Any character)} );
ok( "\N{SYRIAC LETTER TAW}" !~ m/^<[A]-<Any>>$/, q{Don't match compound inverted (Any character)} );
ok( "\N{SYRIAC LETTER TAW}" !~ m/^<+<-Any>>$/, q{Don't match internally inverted (Any character)} );
ok( "\N{SYRIAC LETTER TAW}" =~ m/<+<Any>>/, q{Match unanchored (Any character)} );
# Assigned # Any non-Cn character (i.e. synonym for \P{Cn})
ok( "\x{AC00}" =~ m/^<+<Assigned>>$/, q{Match (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AC00}" =~ m/^<[A]+<Assigned>>$/, q{Match compound (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AC00}" !~ m/^<-<Assigned>>$/, q{Don't match externally inverted (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AC00}" !~ m/^<[A]-<Assigned>>$/, q{Don't match compound inverted (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AC00}" !~ m/^<+<-Assigned>>$/, q{Don't match internally inverted (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AB08}" !~ m/^<+<Assigned>>$/, q{Don't match unrelated (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AB08}" =~ m/^<-<Assigned>>$/, q{Match unrelated externally inverted (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AB08}" =~ m/^<+<-Assigned>>$/, q{Match unrelated internally inverted (Any non-Cn character (i.e. synonym for \P{Cn}))} );
ok( "\x{AB08}\x{AC00}" =~ m/<+<Assigned>>/, q{Match unanchored (Any non-Cn character (i.e. synonym for \P{Cn}))} );
# Unassigned # Synonym for \p{Cn}
ok( "\x{1738}" =~ m/^<+<Unassigned>>$/, q{Match (Synonym for \p{Cn})} );
ok( "\x{1738}" =~ m/^<[A]+<Unassigned>>$/, q{Match compound (Synonym for \p{Cn})} );
ok( "\x{1738}" !~ m/^<-<Unassigned>>$/, q{Don't match externally inverted (Synonym for \p{Cn})} );
ok( "\x{1738}" !~ m/^<[A]-<Unassigned>>$/, q{Don't match compound inverted (Synonym for \p{Cn})} );
ok( "\x{1738}" !~ m/^<+<-Unassigned>>$/, q{Don't match internally inverted (Synonym for \p{Cn})} );
ok( "\N{BUHID LETTER A}" !~ m/^<+<Unassigned>>$/, q{Don't match unrelated (Synonym for \p{Cn})} );
ok( "\N{BUHID LETTER A}" =~ m/^<-<Unassigned>>$/, q{Match unrelated externally inverted (Synonym for \p{Cn})} );
ok( "\N{BUHID LETTER A}" =~ m/^<+<-Unassigned>>$/, q{Match unrelated internally inverted (Synonym for \p{Cn})} );
ok( "\N{BUHID LETTER A}\x{1738}" =~ m/<+<Unassigned>>/, q{Match unanchored (Synonym for \p{Cn})} );
# Common # Codepoint not explicitly assigned to a script
ok( "\N{LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE}" =~ m/^<+<Common>>$/, q{Match (Codepoint not explicitly assigned to a script)} );
ok( "\N{LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE}" =~ m/^<[A]+<Common>>$/, q{Match compound (Codepoint not explicitly assigned to a script)} );
ok( "\N{LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE}" !~ m/^<-<Common>>$/, q{Don't match externally inverted (Codepoint not explicitly assigned to a script)} );
ok( "\N{LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE}" !~ m/^<[A]-<Common>>$/, q{Don't match compound inverted (Codepoint not explicitly assigned to a script)} );
ok( "\N{LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE}" !~ m/^<+<-Common>>$/, q{Don't match internally inverted (Codepoint not explicitly assigned to a script)} );
ok( "\N{CJK RADICAL REPEAT}" !~ m/^<+<Common>>$/, q{Don't match unrelated (Codepoint not explicitly assigned to a script)} );
ok( "\N{CJK RADICAL REPEAT}" =~ m/^<-<Common>>$/, q{Match unrelated externally inverted (Codepoint not explicitly assigned to a script)} );
ok( "\N{CJK RADICAL REPEAT}" =~ m/^<+<-Common>>$/, q{Match unrelated internally inverted (Codepoint not explicitly assigned to a script)} );
ok( "\N{ARABIC END OF AYAH}" !~ m/^<+<Common>>$/, q{Don't match related (Codepoint not explicitly assigned to a script)} );
ok( "\N{ARABIC END OF AYAH}" =~ m/^<+<-Common>>$/, q{Match related internally inverted (Codepoint not explicitly assigned to a script)} );
ok( "\N{ARABIC END OF AYAH}" =~ m/^<-<Common>>$/, q{Match related externally inverted (Codepoint not explicitly assigned to a script)} );
ok( "\N{CJK RADICAL REPEAT}\N{ARABIC END OF AYAH}\N{LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE}" =~ m/<+<Common>>/, q{Match unanchored (Codepoint not explicitly assigned to a script)} );
# InAlphabeticPresentationForms
ok( "\x{5A81}" !~ m/^<+<InAlphabeticPresentationForms>>$/, q{Don't match unrelated <InAlphabeticPresentationForms>} );
ok( "\x{5A81}" =~ m/^<-<InAlphabeticPresentationForms>>$/, q{Match unrelated externally inverted <InAlphabeticPresentationForms>} );
ok( "\x{5A81}" =~ m/^<+<-InAlphabeticPresentationForms>>$/, q{Match unrelated internally inverted <InAlphabeticPresentationForms>} );
# InArabic
ok( "\N{ARABIC NUMBER SIGN}" =~ m/^<+<InArabic>>$/, q{Match <InArabic>} );
ok( "\N{ARABIC NUMBER SIGN}" =~ m/^<[A]+<InArabic>>$/, q{Match compound <InArabic>} );
ok( "\N{ARABIC NUMBER SIGN}" !~ m/^<-<InArabic>>$/, q{Don't match externally inverted <InArabic>} );
ok( "\N{ARABIC NUMBER SIGN}" !~ m/^<[A]-<InArabic>>$/, q{Don't match compound inverted <InArabic>} );
ok( "\N{ARABIC NUMBER SIGN}" !~ m/^<+<-InArabic>>$/, q{Don't match internally inverted <InArabic>} );
ok( "\x{8D16}" !~ m/^<+<InArabic>>$/, q{Don't match unrelated <InArabic>} );
ok( "\x{8D16}" =~ m/^<-<InArabic>>$/, q{Match unrelated externally inverted <InArabic>} );
ok( "\x{8D16}" =~ m/^<+<-InArabic>>$/, q{Match unrelated internally inverted <InArabic>} );
ok( "\x{8D16}\N{ARABIC NUMBER SIGN}" =~ m/<+<InArabic>>/, q{Match unanchored <InArabic>} );
# InArabicPresentationFormsA
ok( "\x{C775}" !~ m/^<+<InArabicPresentationFormsA>>$/, q{Don't match unrelated <InArabicPresentationFormsA>} );
ok( "\x{C775}" =~ m/^<-<InArabicPresentationFormsA>>$/, q{Match unrelated externally inverted <InArabicPresentationFormsA>} );
ok( "\x{C775}" =~ m/^<+<-InArabicPresentationFormsA>>$/, q{Match unrelated internally inverted <InArabicPresentationFormsA>} );
# InArabicPresentationFormsB
ok( "\x{B2EA}" !~ m/^<+<InArabicPresentationFormsB>>$/, q{Don't match unrelated <InArabicPresentationFormsB>} );
ok( "\x{B2EA}" =~ m/^<-<InArabicPresentationFormsB>>$/, q{Match unrelated externally inverted <InArabicPresentationFormsB>} );
ok( "\x{B2EA}" =~ m/^<+<-InArabicPresentationFormsB>>$/, q{Match unrelated internally inverted <InArabicPresentationFormsB>} );
# InArmenian
ok( "\x{0530}" =~ m/^<+<InArmenian>>$/, q{Match <InArmenian>} );
ok( "\x{0530}" =~ m/^<[A]+<InArmenian>>$/, q{Match compound <InArmenian>} );
ok( "\x{0530}" !~ m/^<-<InArmenian>>$/, q{Don't match externally inverted <InArmenian>} );
ok( "\x{0530}" !~ m/^<[A]-<InArmenian>>$/, q{Don't match compound inverted <InArmenian>} );
ok( "\x{0530}" !~ m/^<+<-InArmenian>>$/, q{Don't match internally inverted <InArmenian>} );
ok( "\N{ETHIOPIC SYLLABLE QHWAA}" !~ m/^<+<InArmenian>>$/, q{Don't match unrelated <InArmenian>} );
ok( "\N{ETHIOPIC SYLLABLE QHWAA}" =~ m/^<-<InArmenian>>$/, q{Match unrelated externally inverted <InArmenian>} );
ok( "\N{ETHIOPIC SYLLABLE QHWAA}" =~ m/^<+<-InArmenian>>$/, q{Match unrelated internally inverted <InArmenian>} );
ok( "\N{ETHIOPIC SYLLABLE QHWAA}\x{0530}" =~ m/<+<InArmenian>>/, q{Match unanchored <InArmenian>} );
# InArrows
ok( "\N{LEFTWARDS ARROW}" =~ m/^<+<InArrows>>$/, q{Match <InArrows>} );
ok( "\N{LEFTWARDS ARROW}" =~ m/^<[A]+<InArrows>>$/, q{Match compound <InArrows>} );
ok( "\N{LEFTWARDS ARROW}" !~ m/^<-<InArrows>>$/, q{Don't match externally inverted <InArrows>} );
ok( "\N{LEFTWARDS ARROW}" !~ m/^<[A]-<InArrows>>$/, q{Don't match compound inverted <InArrows>} );
ok( "\N{LEFTWARDS ARROW}" !~ m/^<+<-InArrows>>$/, q{Don't match internally inverted <InArrows>} );
ok( "\x{74FA}" !~ m/^<+<InArrows>>$/, q{Don't match unrelated <InArrows>} );
ok( "\x{74FA}" =~ m/^<-<InArrows>>$/, q{Match unrelated externally inverted <InArrows>} );
ok( "\x{74FA}" =~ m/^<+<-InArrows>>$/, q{Match unrelated internally inverted <InArrows>} );
ok( "\x{74FA}\N{LEFTWARDS ARROW}" =~ m/<+<InArrows>>/, q{Match unanchored <InArrows>} );
# InBasicLatin
ok( "\N{NULL}" =~ m/^<+<InBasicLatin>>$/, q{Match <InBasicLatin>} );
ok( "\N{NULL}" =~ m/^<[A]+<InBasicLatin>>$/, q{Match compound <InBasicLatin>} );
ok( "\N{NULL}" !~ m/^<-<InBasicLatin>>$/, q{Don't match externally inverted <InBasicLatin>} );
ok( "\N{NULL}" !~ m/^<[A]-<InBasicLatin>>$/, q{Don't match compound inverted <InBasicLatin>} );
ok( "\N{NULL}" !~ m/^<+<-InBasicLatin>>$/, q{Don't match internally inverted <InBasicLatin>} );
ok( "\x{ADFF}" !~ m/^<+<InBasicLatin>>$/, q{Don't match unrelated <InBasicLatin>} );
ok( "\x{ADFF}" =~ m/^<-<InBasicLatin>>$/, q{Match unrelated externally inverted <InBasicLatin>} );
ok( "\x{ADFF}" =~ m/^<+<-InBasicLatin>>$/, q{Match unrelated internally inverted <InBasicLatin>} );
ok( "\x{ADFF}\N{NULL}" =~ m/<+<InBasicLatin>>/, q{Match unanchored <InBasicLatin>} );
# InBengali
ok( "\x{0980}" =~ m/^<+<InBengali>>$/, q{Match <InBengali>} );
ok( "\x{0980}" =~ m/^<[A]+<InBengali>>$/, q{Match compound <InBengali>} );
ok( "\x{0980}" !~ m/^<-<InBengali>>$/, q{Don't match externally inverted <InBengali>} );
ok( "\x{0980}" !~ m/^<[A]-<InBengali>>$/, q{Don't match compound inverted <InBengali>} );
ok( "\x{0980}" !~ m/^<+<-InBengali>>$/, q{Don't match internally inverted <InBengali>} );
ok( "\x{3409}" !~ m/^<+<InBengali>>$/, q{Don't match unrelated <InBengali>} );
ok( "\x{3409}" =~ m/^<-<InBengali>>$/, q{Match unrelated externally inverted <InBengali>} );
ok( "\x{3409}" =~ m/^<+<-InBengali>>$/, q{Match unrelated internally inverted <InBengali>} );
ok( "\x{3409}\x{0980}" =~ m/<+<InBengali>>/, q{Match unanchored <InBengali>} );
# InBlockElements
ok( "\N{UPPER HALF BLOCK}" =~ m/^<+<InBlockElements>>$/, q{Match <InBlockElements>} );
ok( "\N{UPPER HALF BLOCK}" =~ m/^<[A]+<InBlockElements>>$/, q{Match compound <InBlockElements>} );
ok( "\N{UPPER HALF BLOCK}" !~ m/^<-<InBlockElements>>$/, q{Don't match externally inverted <InBlockElements>} );
ok( "\N{UPPER HALF BLOCK}" !~ m/^<[A]-<InBlockElements>>$/, q{Don't match compound inverted <InBlockElements>} );
ok( "\N{UPPER HALF BLOCK}" !~ m/^<+<-InBlockElements>>$/, q{Don't match internally inverted <InBlockElements>} );
ok( "\x{77B1}" !~ m/^<+<InBlockElements>>$/, q{Don't match unrelated <InBlockElements>} );
ok( "\x{77B1}" =~ m/^<-<InBlockElements>>$/, q{Match unrelated externally inverted <InBlockElements>} );
ok( "\x{77B1}" =~ m/^<+<-InBlockElements>>$/, q{Match unrelated internally inverted <InBlockElements>} );
ok( "\x{77B1}\N{UPPER HALF BLOCK}" =~ m/<+<InBlockElements>>/, q{Match unanchored <InBlockElements>} );
# InBopomofo
ok( "\x{3100}" =~ m/^<+<InBopomofo>>$/, q{Match <InBopomofo>} );
ok( "\x{3100}" =~ m/^<[A]+<InBopomofo>>$/, q{Match compound <InBopomofo>} );
ok( "\x{3100}" !~ m/^<-<InBopomofo>>$/, q{Don't match externally inverted <InBopomofo>} );
ok( "\x{3100}" !~ m/^<[A]-<InBopomofo>>$/, q{Don't match compound inverted <InBopomofo>} );
ok( "\x{3100}" !~ m/^<+<-InBopomofo>>$/, q{Don't match internally inverted <InBopomofo>} );
ok( "\x{701E}" !~ m/^<+<InBopomofo>>$/, q{Don't match unrelated <InBopomofo>} );
ok( "\x{701E}" =~ m/^<-<InBopomofo>>$/, q{Match unrelated externally inverted <InBopomofo>} );
ok( "\x{701E}" =~ m/^<+<-InBopomofo>>$/, q{Match unrelated internally inverted <InBopomofo>} );
ok( "\x{701E}\x{3100}" =~ m/<+<InBopomofo>>/, q{Match unanchored <InBopomofo>} );
# InBopomofoExtended
ok( "\N{BOPOMOFO LETTER BU}" =~ m/^<+<InBopomofoExtended>>$/, q{Match <InBopomofoExtended>} );
ok( "\N{BOPOMOFO LETTER BU}" =~ m/^<[A]+<InBopomofoExtended>>$/, q{Match compound <InBopomofoExtended>} );
ok( "\N{BOPOMOFO LETTER BU}" !~ m/^<-<InBopomofoExtended>>$/, q{Don't match externally inverted <InBopomofoExtended>} );
ok( "\N{BOPOMOFO LETTER BU}" !~ m/^<[A]-<InBopomofoExtended>>$/, q{Don't match compound inverted <InBopomofoExtended>} );
ok( "\N{BOPOMOFO LETTER BU}" !~ m/^<+<-InBopomofoExtended>>$/, q{Don't match internally inverted <InBopomofoExtended>} );
ok( "\N{YI SYLLABLE TIE}" !~ m/^<+<InBopomofoExtended>>$/, q{Don't match unrelated <InBopomofoExtended>} );
ok( "\N{YI SYLLABLE TIE}" =~ m/^<-<InBopomofoExtended>>$/, q{Match unrelated externally inverted <InBopomofoExtended>} );
ok( "\N{YI SYLLABLE TIE}" =~ m/^<+<-InBopomofoExtended>>$/, q{Match unrelated internally inverted <InBopomofoExtended>} );
ok( "\N{YI SYLLABLE TIE}\N{BOPOMOFO LETTER BU}" =~ m/<+<InBopomofoExtended>>/, q{Match unanchored <InBopomofoExtended>} );
# InBoxDrawing
ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" =~ m/^<+<InBoxDrawing>>$/, q{Match <InBoxDrawing>} );
ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" =~ m/^<[A]+<InBoxDrawing>>$/, q{Match compound <InBoxDrawing>} );
ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" !~ m/^<-<InBoxDrawing>>$/, q{Don't match externally inverted <InBoxDrawing>} );
ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" !~ m/^<[A]-<InBoxDrawing>>$/, q{Don't match compound inverted <InBoxDrawing>} );
ok( "\N{BOX DRAWINGS LIGHT HORIZONTAL}" !~ m/^<+<-InBoxDrawing>>$/, q{Don't match internally inverted <InBoxDrawing>} );
ok( "\x{D2FB}" !~ m/^<+<InBoxDrawing>>$/, q{Don't match unrelated <InBoxDrawing>} );
ok( "\x{D2FB}" =~ m/^<-<InBoxDrawing>>$/, q{Match unrelated externally inverted <InBoxDrawing>} );
ok( "\x{D2FB}" =~ m/^<+<-InBoxDrawing>>$/, q{Match unrelated internally inverted <InBoxDrawing>} );
ok( "\x{D2FB}\N{BOX DRAWINGS LIGHT HORIZONTAL}" =~ m/<+<InBoxDrawing>>/, q{Match unanchored <InBoxDrawing>} );
# InBraillePatterns
ok( "\N{BRAILLE PATTERN BLANK}" =~ m/^<+<InBraillePatterns>>$/, q{Match <InBraillePatterns>} );
ok( "\N{BRAILLE PATTERN BLANK}" =~ m/^<[A]+<InBraillePatterns>>$/, q{Match compound <InBraillePatterns>} );
ok( "\N{BRAILLE PATTERN BLANK}" !~ m/^<-<InBraillePatterns>>$/, q{Don't match externally inverted <InBraillePatterns>} );
ok( "\N{BRAILLE PATTERN BLANK}" !~ m/^<[A]-<InBraillePatterns>>$/, q{Don't match compound inverted <InBraillePatterns>} );
ok( "\N{BRAILLE PATTERN BLANK}" !~ m/^<+<-InBraillePatterns>>$/, q{Don't match internally inverted <InBraillePatterns>} );
ok( "\x{4FE4}" !~ m/^<+<InBraillePatterns>>$/, q{Don't match unrelated <InBraillePatterns>} );
ok( "\x{4FE4}" =~ m/^<-<InBraillePatterns>>$/, q{Match unrelated externally inverted <InBraillePatterns>} );
ok( "\x{4FE4}" =~ m/^<+<-InBraillePatterns>>$/, q{Match unrelated internally inverted <InBraillePatterns>} );
ok( "\x{4FE4}\N{BRAILLE PATTERN BLANK}" =~ m/<+<InBraillePatterns>>/, q{Match unanchored <InBraillePatterns>} );
# InBuhid
ok( "\N{BUHID LETTER A}" =~ m/^<+<InBuhid>>$/, q{Match <InBuhid>} );
ok( "\N{BUHID LETTER A}" =~ m/^<[A]+<InBuhid>>$/, q{Match compound <InBuhid>} );
ok( "\N{BUHID LETTER A}" !~ m/^<-<InBuhid>>$/, q{Don't match externally inverted <InBuhid>} );
ok( "\N{BUHID LETTER A}" !~ m/^<[A]-<InBuhid>>$/, q{Don't match compound inverted <InBuhid>} );
ok( "\N{BUHID LETTER A}" !~ m/^<+<-InBuhid>>$/, q{Don't match internally inverted <InBuhid>} );
ok( "\x{996F}" !~ m/^<+<InBuhid>>$/, q{Don't match unrelated <InBuhid>} );
ok( "\x{996F}" =~ m/^<-<InBuhid>>$/, q{Match unrelated externally inverted <InBuhid>} );
ok( "\x{996F}" =~ m/^<+<-InBuhid>>$/, q{Match unrelated internally inverted <InBuhid>} );
ok( "\x{996F}\N{BUHID LETTER A}" =~ m/<+<InBuhid>>/, q{Match unanchored <InBuhid>} );
# InByzantineMusicalSymbols
ok( "\x{802A}" !~ m/^<+<InByzantineMusicalSymbols>>$/, q{Don't match unrelated <InByzantineMusicalSymbols>} );
ok( "\x{802A}" =~ m/^<-<InByzantineMusicalSymbols>>$/, q{Match unrelated externally inverted <InByzantineMusicalSymbols>} );
ok( "\x{802A}" =~ m/^<+<-InByzantineMusicalSymbols>>$/, q{Match unrelated internally inverted <InByzantineMusicalSymbols>} );
# InCJKCompatibility
ok( "\N{SQUARE APAATO}" =~ m/^<+<InCJKCompatibility>>$/, q{Match <InCJKCompatibility>} );
ok( "\N{SQUARE APAATO}" =~ m/^<[A]+<InCJKCompatibility>>$/, q{Match compound <InCJKCompatibility>} );
ok( "\N{SQUARE APAATO}" !~ m/^<-<InCJKCompatibility>>$/, q{Don't match externally inverted <InCJKCompatibility>} );
ok( "\N{SQUARE APAATO}" !~ m/^<[A]-<InCJKCompatibility>>$/, q{Don't match compound inverted <InCJKCompatibility>} );
ok( "\N{SQUARE APAATO}" !~ m/^<+<-InCJKCompatibility>>$/, q{Don't match internally inverted <InCJKCompatibility>} );
ok( "\x{2B99}" !~ m/^<+<InCJKCompatibility>>$/, q{Don't match unrelated <InCJKCompatibility>} );
ok( "\x{2B99}" =~ m/^<-<InCJKCompatibility>>$/, q{Match unrelated externally inverted <InCJKCompatibility>} );
ok( "\x{2B99}" =~ m/^<+<-InCJKCompatibility>>$/, q{Match unrelated internally inverted <InCJKCompatibility>} );
ok( "\x{2B99}\N{SQUARE APAATO}" =~ m/<+<InCJKCompatibility>>/, q{Match unanchored <InCJKCompatibility>} );
# InCJKCompatibilityForms
ok( "\x{342B}" !~ m/^<+<InCJKCompatibilityForms>>$/, q{Don't match unrelated <InCJKCompatibilityForms>} );
ok( "\x{342B}" =~ m/^<-<InCJKCompatibilityForms>>$/, q{Match unrelated externally inverted <InCJKCompatibilityForms>} );
ok( "\x{342B}" =~ m/^<+<-InCJKCompatibilityForms>>$/, q{Match unrelated internally inverted <InCJKCompatibilityForms>} );
# InCJKCompatibilityIdeographs
ok( "\N{BLACK SQUARE}" !~ m/^<+<InCJKCompatibilityIdeographs>>$/, q{Don't match unrelated <InCJKCompatibilityIdeographs>} );
ok( "\N{BLACK SQUARE}" =~ m/^<-<InCJKCompatibilityIdeographs>>$/, q{Match unrelated externally inverted <InCJKCompatibilityIdeographs>} );
ok( "\N{BLACK SQUARE}" =~ m/^<+<-InCJKCompatibilityIdeographs>>$/, q{Match unrelated internally inverted <InCJKCompatibilityIdeographs>} );
# InCJKCompatibilityIdeographsSupplement
ok( "\x{A90E}" !~ m/^<+<InCJKCompatibilityIdeographsSupplement>>$/, q{Don't match unrelated <InCJKCompatibilityIdeographsSupplement>} );
ok( "\x{A90E}" =~ m/^<-<InCJKCompatibilityIdeographsSupplement>>$/, q{Match unrelated externally inverted <InCJKCompatibilityIdeographsSupplement>} );
ok( "\x{A90E}" =~ m/^<+<-InCJKCompatibilityIdeographsSupplement>>$/, q{Match unrelated internally inverted <InCJKCompatibilityIdeographsSupplement>} );
# InCJKRadicalsSupplement
ok( "\N{CJK RADICAL REPEAT}" =~ m/^<+<InCJKRadicalsSupplement>>$/, q{Match <InCJKRadicalsSupplement>} );
ok( "\N{CJK RADICAL REPEAT}" =~ m/^<[A]+<InCJKRadicalsSupplement>>$/, q{Match compound <InCJKRadicalsSupplement>} );
ok( "\N{CJK RADICAL REPEAT}" !~ m/^<-<InCJKRadicalsSupplement>>$/, q{Don't match externally inverted <InCJKRadicalsSupplement>} );
ok( "\N{CJK RADICAL REPEAT}" !~ m/^<[A]-<InCJKRadicalsSupplement>>$/, q{Don't match compound inverted <InCJKRadicalsSupplement>} );
ok( "\N{CJK RADICAL REPEAT}" !~ m/^<+<-InCJKRadicalsSupplement>>$/, q{Don't match internally inverted <InCJKRadicalsSupplement>} );
ok( "\x{563B}" !~ m/^<+<InCJKRadicalsSupplement>>$/, q{Don't match unrelated <InCJKRadicalsSupplement>} );
ok( "\x{563B}" =~ m/^<-<InCJKRadicalsSupplement>>$/, q{Match unrelated externally inverted <InCJKRadicalsSupplement>} );
ok( "\x{563B}" =~ m/^<+<-InCJKRadicalsSupplement>>$/, q{Match unrelated internally inverted <InCJKRadicalsSupplement>} );
ok( "\x{563B}\N{CJK RADICAL REPEAT}" =~ m/<+<InCJKRadicalsSupplement>>/, q{Match unanchored <InCJKRadicalsSupplement>} );
# InCJKSymbolsAndPunctuation
ok( "\N{IDEOGRAPHIC SPACE}" =~ m/^<+<InCJKSymbolsAndPunctuation>>$/, q{Match <InCJKSymbolsAndPunctuation>} );
ok( "\N{IDEOGRAPHIC SPACE}" =~ m/^<[A]+<InCJKSymbolsAndPunctuation>>$/, q{Match compound <InCJKSymbolsAndPunctuation>} );
ok( "\N{IDEOGRAPHIC SPACE}" !~ m/^<-<InCJKSymbolsAndPunctuation>>$/, q{Don't match externally inverted <InCJKSymbolsAndPunctuation>} );
ok( "\N{IDEOGRAPHIC SPACE}" !~ m/^<[A]-<InCJKSymbolsAndPunctuation>>$/, q{Don't match compound inverted <InCJKSymbolsAndPunctuation>} );
ok( "\N{IDEOGRAPHIC SPACE}" !~ m/^<+<-InCJKSymbolsAndPunctuation>>$/, q{Don't match internally inverted <InCJKSymbolsAndPunctuation>} );
ok( "\x{3BE6}" !~ m/^<+<InCJKSymbolsAndPunctuation>>$/, q{Don't match unrelated <InCJKSymbolsAndPunctuation>} );
ok( "\x{3BE6}" =~ m/^<-<InCJKSymbolsAndPunctuation>>$/, q{Match unrelated externally inverted <InCJKSymbolsAndPunctuation>} );
ok( "\x{3BE6}" =~ m/^<+<-InCJKSymbolsAndPunctuation>>$/, q{Match unrelated internally inverted <InCJKSymbolsAndPunctuation>} );
ok( "\x{3BE6}\N{IDEOGRAPHIC SPACE}" =~ m/<+<InCJKSymbolsAndPunctuation>>/, q{Match unanchored <InCJKSymbolsAndPunctuation>} );
# InCJKUnifiedIdeographs
ok( "\x{4E00}" =~ m/^<+<InCJKUnifiedIdeographs>>$/, q{Match <InCJKUnifiedIdeographs>} );
ok( "\x{4E00}" =~ m/^<[A]+<InCJKUnifiedIdeographs>>$/, q{Match compound <InCJKUnifiedIdeographs>} );
ok( "\x{4E00}" !~ m/^<-<InCJKUnifiedIdeographs>>$/, q{Don't match externally inverted <InCJKUnifiedIdeographs>} );
ok( "\x{4E00}" !~ m/^<[A]-<InCJKUnifiedIdeographs>>$/, q{Don't match compound inverted <InCJKUnifiedIdeographs>} );
ok( "\x{4E00}" !~ m/^<+<-InCJKUnifiedIdeographs>>$/, q{Don't match internally inverted <InCJKUnifiedIdeographs>} );
ok( "\x{436E}" !~ m/^<+<InCJKUnifiedIdeographs>>$/, q{Don't match unrelated <InCJKUnifiedIdeographs>} );
ok( "\x{436E}" =~ m/^<-<InCJKUnifiedIdeographs>>$/, q{Match unrelated externally inverted <InCJKUnifiedIdeographs>} );
ok( "\x{436E}" =~ m/^<+<-InCJKUnifiedIdeographs>>$/, q{Match unrelated internally inverted <InCJKUnifiedIdeographs>} );
ok( "\x{436E}\x{4E00}" =~ m/<+<InCJKUnifiedIdeographs>>/, q{Match unanchored <InCJKUnifiedIdeographs>} );
# InCJKUnifiedIdeographsExtensionA
ok( "\x{4993}" =~ m/^<+<InCJKUnifiedIdeographsExtensionA>>$/, q{Match <InCJKUnifiedIdeographsExtensionA>} );
ok( "\x{4993}" =~ m/^<[A]+<InCJKUnifiedIdeographsExtensionA>>$/, q{Match compound <InCJKUnifiedIdeographsExtensionA>} );
ok( "\x{4993}" !~ m/^<-<InCJKUnifiedIdeographsExtensionA>>$/, q{Don't match externally inverted <InCJKUnifiedIdeographsExtensionA>} );
ok( "\x{4993}" !~ m/^<[A]-<InCJKUnifiedIdeographsExtensionA>>$/, q{Don't match compound inverted <InCJKUnifiedIdeographsExtensionA>} );
ok( "\x{4993}" !~ m/^<+<-InCJKUnifiedIdeographsExtensionA>>$/, q{Don't match internally inverted <InCJKUnifiedIdeographsExtensionA>} );
ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" !~ m/^<+<InCJKUnifiedIdeographsExtensionA>>$/, q{Don't match unrelated <InCJKUnifiedIdeographsExtensionA>} );
ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m/^<-<InCJKUnifiedIdeographsExtensionA>>$/, q{Match unrelated externally inverted <InCJKUnifiedIdeographsExtensionA>} );
ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}" =~ m/^<+<-InCJKUnifiedIdeographsExtensionA>>$/, q{Match unrelated internally inverted <InCJKUnifiedIdeographsExtensionA>} );
ok( "\N{HEXAGRAM FOR THE CREATIVE HEAVEN}\x{4993}" =~ m/<+<InCJKUnifiedIdeographsExtensionA>>/, q{Match unanchored <InCJKUnifiedIdeographsExtensionA>} );
# InCJKUnifiedIdeographsExtensionB
ok( "\x{3E5A}" !~ m/^<+<InCJKUnifiedIdeographsExtensionB>>$/, q{Don't match unrelated <InCJKUnifiedIdeographsExtensionB>} );
ok( "\x{3E5A}" =~ m/^<-<InCJKUnifiedIdeographsExtensionB>>$/, q{Match unrelated externally inverted <InCJKUnifiedIdeographsExtensionB>} );
ok( "\x{3E5A}" =~ m/^<+<-InCJKUnifiedIdeographsExtensionB>>$/, q{Match unrelated internally inverted <InCJKUnifiedIdeographsExtensionB>} );
# InCherokee
ok( "\N{CHEROKEE LETTER A}" =~ m/^<+<InCherokee>>$/, q{Match <InCherokee>} );
ok( "\N{CHEROKEE LETTER A}" =~ m/^<[A]+<InCherokee>>$/, q{Match compound <InCherokee>} );
ok( "\N{CHEROKEE LETTER A}" !~ m/^<-<InCherokee>>$/, q{Don't match externally inverted <InCherokee>} );
ok( "\N{CHEROKEE LETTER A}" !~ m/^<[A]-<InCherokee>>$/, q{Don't match compound inverted <InCherokee>} );
ok( "\N{CHEROKEE LETTER A}" !~ m/^<+<-InCherokee>>$/, q{Don't match internally inverted <InCherokee>} );
ok( "\x{B311}" !~ m/^<+<InCherokee>>$/, q{Don't match unrelated <InCherokee>} );
ok( "\x{B311}" =~ m/^<-<InCherokee>>$/, q{Match unrelated externally inverted <InCherokee>} );
ok( "\x{B311}" =~ m/^<+<-InCherokee>>$/, q{Match unrelated internally inverted <InCherokee>} );
ok( "\x{B311}\N{CHEROKEE LETTER A}" =~ m/<+<InCherokee>>/, q{Match unanchored <InCherokee>} );
# InCombiningDiacriticalMarks
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<+<InCombiningDiacriticalMarks>>$/, q{Match <InCombiningDiacriticalMarks>} );
ok( "\N{COMBINING GRAVE ACCENT}" =~ m/^<[A]+<InCombiningDiacriticalMarks>>$/, q{Match compound <InCombiningDiacriticalMarks>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<-<InCombiningDiacriticalMarks>>$/, q{Don't match externally inverted <InCombiningDiacriticalMarks>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<[A]-<InCombiningDiacriticalMarks>>$/, q{Don't match compound inverted <InCombiningDiacriticalMarks>} );
ok( "\N{COMBINING GRAVE ACCENT}" !~ m/^<+<-InCombiningDiacriticalMarks>>$/, q{Don't match internally inverted <InCombiningDiacriticalMarks>} );
ok( "\x{81B8}" !~ m/^<+<InCombiningDiacriticalMarks>>$/, q{Don't match unrelated <InCombiningDiacriticalMarks>} );
ok( "\x{81B8}" =~ m/^<-<InCombiningDiacriticalMarks>>$/, q{Match unrelated externally inverted <InCombiningDiacriticalMarks>} );
ok( "\x{81B8}" =~ m/^<+<-InCombiningDiacriticalMarks>>$/, q{Match unrelated internally inverted <InCombiningDiacriticalMarks>} );
ok( "\x{81B8}\N{COMBINING GRAVE ACCENT}" =~ m/<+<InCombiningDiacriticalMarks>>/, q{Match unanchored <InCombiningDiacriticalMarks>} );
# InCombiningDiacriticalMarksforSymbols
ok( "\N{COMBINING LEFT HARPOON ABOVE}" =~ m/^<+<InCombiningDiacriticalMarksforSymbols>>$/, q{Match <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{COMBINING LEFT HARPOON ABOVE}" =~ m/^<[A]+<InCombiningDiacriticalMarksforSymbols>>$/, q{Match compound <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{COMBINING LEFT HARPOON ABOVE}" !~ m/^<-<InCombiningDiacriticalMarksforSymbols>>$/, q{Don't match externally inverted <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{COMBINING LEFT HARPOON ABOVE}" !~ m/^<[A]-<InCombiningDiacriticalMarksforSymbols>>$/, q{Don't match compound inverted <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{COMBINING LEFT HARPOON ABOVE}" !~ m/^<+<-InCombiningDiacriticalMarksforSymbols>>$/, q{Don't match internally inverted <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{YI SYLLABLE NZOX}" !~ m/^<+<InCombiningDiacriticalMarksforSymbols>>$/, q{Don't match unrelated <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{YI SYLLABLE NZOX}" =~ m/^<-<InCombiningDiacriticalMarksforSymbols>>$/, q{Match unrelated externally inverted <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{YI SYLLABLE NZOX}" =~ m/^<+<-InCombiningDiacriticalMarksforSymbols>>$/, q{Match unrelated internally inverted <InCombiningDiacriticalMarksforSymbols>} );
ok( "\N{YI SYLLABLE NZOX}\N{COMBINING LEFT HARPOON ABOVE}" =~ m/<+<InCombiningDiacriticalMarksforSymbols>>/, q{Match unanchored <InCombiningDiacriticalMarksforSymbols>} );
# InCombiningHalfMarks
ok( "\x{7140}" !~ m/^<+<InCombiningHalfMarks>>$/, q{Don't match unrelated <InCombiningHalfMarks>} );
ok( "\x{7140}" =~ m/^<-<InCombiningHalfMarks>>$/, q{Match unrelated externally inverted <InCombiningHalfMarks>} );
ok( "\x{7140}" =~ m/^<+<-InCombiningHalfMarks>>$/, q{Match unrelated internally inverted <InCombiningHalfMarks>} );
# InControlPictures
ok( "\N{SYMBOL FOR NULL}" =~ m/^<+<InControlPictures>>$/, q{Match <InControlPictures>} );
ok( "\N{SYMBOL FOR NULL}" =~ m/^<[A]+<InControlPictures>>$/, q{Match compound <InControlPictures>} );
ok( "\N{SYMBOL FOR NULL}" !~ m/^<-<InControlPictures>>$/, q{Don't match externally inverted <InControlPictures>} );
ok( "\N{SYMBOL FOR NULL}" !~ m/^<[A]-<InControlPictures>>$/, q{Don't match compound inverted <InControlPictures>} );
ok( "\N{SYMBOL FOR NULL}" !~ m/^<+<-InControlPictures>>$/, q{Don't match internally inverted <InControlPictures>} );
ok( "\x{CBBF}" !~ m/^<+<InControlPictures>>$/, q{Don't match unrelated <InControlPictures>} );
ok( "\x{CBBF}" =~ m/^<-<InControlPictures>>$/, q{Match unrelated externally inverted <InControlPictures>} );
ok( "\x{CBBF}" =~ m/^<+<-InControlPictures>>$/, q{Match unrelated internally inverted <InControlPictures>} );
ok( "\x{CBBF}\N{SYMBOL FOR NULL}" =~ m/<+<InControlPictures>>/, q{Match unanchored <InControlPictures>} );
# InCurrencySymbols
ok( "\N{EURO-CURRENCY SIGN}" =~ m/^<+<InCurrencySymbols>>$/, q{Match <InCurrencySymbols>} );
ok( "\N{EURO-CURRENCY SIGN}" =~ m/^<[A]+<InCurrencySymbols>>$/, q{Match compound <InCurrencySymbols>} );
ok( "\N{EURO-CURRENCY SIGN}" !~ m/^<-<InCurrencySymbols>>$/, q{Don't match externally inverted <InCurrencySymbols>} );
ok( "\N{EURO-CURRENCY SIGN}" !~ m/^<[A]-<InCurrencySymbols>>$/, q{Don't match compound inverted <InCurrencySymbols>} );
ok( "\N{EURO-CURRENCY SIGN}" !~ m/^<+<-InCurrencySymbols>>$/, q{Don't match internally inverted <InCurrencySymbols>} );
ok( "\x{D040}" !~ m/^<+<InCurrencySymbols>>$/, q{Don't match unrelated <InCurrencySymbols>} );
ok( "\x{D040}" =~ m/^<-<InCurrencySymbols>>$/, q{Match unrelated externally inverted <InCurrencySymbols>} );
ok( "\x{D040}" =~ m/^<+<-InCurrencySymbols>>$/, q{Match unrelated internally inverted <InCurrencySymbols>} );
ok( "\x{D040}\N{EURO-CURRENCY SIGN}" =~ m/<+<InCurrencySymbols>>/, q{Match unanchored <InCurrencySymbols>} );
# InCyrillic
ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" =~ m/^<+<InCyrillic>>$/, q{Match <InCyrillic>} );
ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" =~ m/^<[A]+<InCyrillic>>$/, q{Match compound <InCyrillic>} );
ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" !~ m/^<-<InCyrillic>>$/, q{Don't match externally inverted <InCyrillic>} );
ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" !~ m/^<[A]-<InCyrillic>>$/, q{Don't match compound inverted <InCyrillic>} );
ok( "\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" !~ m/^<+<-InCyrillic>>$/, q{Don't match internally inverted <InCyrillic>} );
ok( "\x{9C58}" !~ m/^<+<InCyrillic>>$/, q{Don't match unrelated <InCyrillic>} );
ok( "\x{9C58}" =~ m/^<-<InCyrillic>>$/, q{Match unrelated externally inverted <InCyrillic>} );
ok( "\x{9C58}" =~ m/^<+<-InCyrillic>>$/, q{Match unrelated internally inverted <InCyrillic>} );
ok( "\x{9C58}\N{CYRILLIC CAPITAL LETTER IE WITH GRAVE}" =~ m/<+<InCyrillic>>/, q{Match unanchored <InCyrillic>} );
# InCyrillicSupplementary
ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" =~ m/^<+<InCyrillicSupplementary>>$/, q{Match <InCyrillicSupplementary>} );
ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" =~ m/^<[A]+<InCyrillicSupplementary>>$/, q{Match compound <InCyrillicSupplementary>} );
ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" !~ m/^<-<InCyrillicSupplementary>>$/, q{Don't match externally inverted <InCyrillicSupplementary>} );
ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" !~ m/^<[A]-<InCyrillicSupplementary>>$/, q{Don't match compound inverted <InCyrillicSupplementary>} );
ok( "\N{CYRILLIC CAPITAL LETTER KOMI DE}" !~ m/^<+<-InCyrillicSupplementary>>$/, q{Don't match internally inverted <InCyrillicSupplementary>} );
ok( "\x{857A}" !~ m/^<+<InCyrillicSupplementary>>$/, q{Don't match unrelated <InCyrillicSupplementary>} );
ok( "\x{857A}" =~ m/^<-<InCyrillicSupplementary>>$/, q{Match unrelated externally inverted <InCyrillicSupplementary>} );
ok( "\x{857A}" =~ m/^<+<-InCyrillicSupplementary>>$/, q{Match unrelated internally inverted <InCyrillicSupplementary>} );
ok( "\x{857A}\N{CYRILLIC CAPITAL LETTER KOMI DE}" =~ m/<+<InCyrillicSupplementary>>/, q{Match unanchored <InCyrillicSupplementary>} );
# InDeseret
ok( "\N{LATIN SMALL LETTER I WITH DOUBLE GRAVE}" !~ m/^<+<InDeseret>>$/, q{Don't match unrelated <InDeseret>} );
ok( "\N{LATIN SMALL LETTER I WITH DOUBLE GRAVE}" =~ m/^<-<InDeseret>>$/, q{Match unrelated externally inverted <InDeseret>} );
ok( "\N{LATIN SMALL LETTER I WITH DOUBLE GRAVE}" =~ m/^<+<-InDeseret>>$/, q{Match unrelated internally inverted <InDeseret>} );
# InDevanagari
ok( "\x{0900}" =~ m/^<+<InDevanagari>>$/, q{Match <InDevanagari>} );
ok( "\x{0900}" =~ m/^<[A]+<InDevanagari>>$/, q{Match compound <InDevanagari>} );
ok( "\x{0900}" !~ m/^<-<InDevanagari>>$/, q{Don't match externally inverted <InDevanagari>} );
ok( "\x{0900}" !~ m/^<[A]-<InDevanagari>>$/, q{Don't match compound inverted <InDevanagari>} );
ok( "\x{0900}" !~ m/^<+<-InDevanagari>>$/, q{Don't match internally inverted <InDevanagari>} );
ok( "\x{3837}" !~ m/^<+<InDevanagari>>$/, q{Don't match unrelated <InDevanagari>} );
ok( "\x{3837}" =~ m/^<-<InDevanagari>>$/, q{Match unrelated externally inverted <InDevanagari>} );
ok( "\x{3837}" =~ m/^<+<-InDevanagari>>$/, q{Match unrelated internally inverted <InDevanagari>} );
ok( "\x{3837}\x{0900}" =~ m/<+<InDevanagari>>/, q{Match unanchored <InDevanagari>} );
# InDingbats
ok( "\x{2700}" =~ m/^<+<InDingbats>>$/, q{Match <InDingbats>} );
ok( "\x{2700}" =~ m/^<[A]+<InDingbats>>$/, q{Match compound <InDingbats>} );
ok( "\x{2700}" !~ m/^<-<InDingbats>>$/, q{Don't match externally inverted <InDingbats>} );
ok( "\x{2700}" !~ m/^<[A]-<InDingbats>>$/, q{Don't match compound inverted <InDingbats>} );
ok( "\x{2700}" !~ m/^<+<-InDingbats>>$/, q{Don't match internally inverted <InDingbats>} );
ok( "\x{C9CC}" !~ m/^<+<InDingbats>>$/, q{Don't match unrelated <InDingbats>} );
ok( "\x{C9CC}" =~ m/^<-<InDingbats>>$/, q{Match unrelated externally inverted <InDingbats>} );
ok( "\x{C9CC}" =~ m/^<+<-InDingbats>>$/, q{Match unrelated internally inverted <InDingbats>} );
ok( "\x{C9CC}\x{2700}" =~ m/<+<InDingbats>>/, q{Match unanchored <InDingbats>} );
# InEnclosedAlphanumerics
ok( "\N{CIRCLED DIGIT ONE}" =~ m/^<+<InEnclosedAlphanumerics>>$/, q{Match <InEnclosedAlphanumerics>} );
ok( "\N{CIRCLED DIGIT ONE}" =~ m/^<[A]+<InEnclosedAlphanumerics>>$/, q{Match compound <InEnclosedAlphanumerics>} );
ok( "\N{CIRCLED DIGIT ONE}" !~ m/^<-<InEnclosedAlphanumerics>>$/, q{Don't match externally inverted <InEnclosedAlphanumerics>} );
ok( "\N{CIRCLED DIGIT ONE}" !~ m/^<[A]-<InEnclosedAlphanumerics>>$/, q{Don't match compound inverted <InEnclosedAlphanumerics>} );
ok( "\N{CIRCLED DIGIT ONE}" !~ m/^<+<-InEnclosedAlphanumerics>>$/, q{Don't match internally inverted <InEnclosedAlphanumerics>} );
ok( "\x{CCB8}" !~ m/^<+<InEnclosedAlphanumerics>>$/, q{Don't match unrelated <InEnclosedAlphanumerics>} );
ok( "\x{CCB8}" =~ m/^<-<InEnclosedAlphanumerics>>$/, q{Match unrelated externally inverted <InEnclosedAlphanumerics>} );
ok( "\x{CCB8}" =~ m/^<+<-InEnclosedAlphanumerics>>$/, q{Match unrelated internally inverted <InEnclosedAlphanumerics>} );
ok( "\x{CCB8}\N{CIRCLED DIGIT ONE}" =~ m/<+<InEnclosedAlphanumerics>>/, q{Match unanchored <InEnclosedAlphanumerics>} );
# InEnclosedCJKLettersAndMonths
ok( "\N{PARENTHESIZED HANGUL KIYEOK}" =~ m/^<+<InEnclosedCJKLettersAndMonths>>$/, q{Match <InEnclosedCJKLettersAndMonths>} );
ok( "\N{PARENTHESIZED HANGUL KIYEOK}" =~ m/^<[A]+<InEnclosedCJKLettersAndMonths>>$/, q{Match compound <InEnclosedCJKLettersAndMonths>} );
ok( "\N{PARENTHESIZED HANGUL KIYEOK}" !~ m/^<-<InEnclosedCJKLettersAndMonths>>$/, q{Don't match externally inverted <InEnclosedCJKLettersAndMonths>} );
ok( "\N{PARENTHESIZED HANGUL KIYEOK}" !~ m/^<[A]-<InEnclosedCJKLettersAndMonths>>$/, q{Don't match compound inverted <InEnclosedCJKLettersAndMonths>} );
ok( "\N{PARENTHESIZED HANGUL KIYEOK}" !~ m/^<+<-InEnclosedCJKLettersAndMonths>>$/, q{Don't match internally inverted <InEnclosedCJKLettersAndMonths>} );
ok( "\x{8883}" !~ m/^<+<InEnclosedCJKLettersAndMonths>>$/, q{Don't match unrelated <InEnclosedCJKLettersAndMonths>} );
ok( "\x{8883}" =~ m/^<-<InEnclosedCJKLettersAndMonths>>$/, q{Match unrelated externally inverted <InEnclosedCJKLettersAndMonths>} );
ok( "\x{8883}" =~ m/^<+<-InEnclosedCJKLettersAndMonths>>$/, q{Match unrelated internally inverted <InEnclosedCJKLettersAndMonths>} );
ok( "\x{8883}\N{PARENTHESIZED HANGUL KIYEOK}" =~ m/<+<InEnclosedCJKLettersAndMonths>>/, q{Match unanchored <InEnclosedCJKLettersAndMonths>} );
# InEthiopic
ok( "\N{ETHIOPIC SYLLABLE HA}" =~ m/^<+<InEthiopic>>$/, q{Match <InEthiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" =~ m/^<[A]+<InEthiopic>>$/, q{Match compound <InEthiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<-<InEthiopic>>$/, q{Don't match externally inverted <InEthiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<[A]-<InEthiopic>>$/, q{Don't match compound inverted <InEthiopic>} );
ok( "\N{ETHIOPIC SYLLABLE HA}" !~ m/^<+<-InEthiopic>>$/, q{Don't match internally inverted <InEthiopic>} );
ok( "\N{MALAYALAM DIGIT NINE}" !~ m/^<+<InEthiopic>>$/, q{Don't match unrelated <InEthiopic>} );
ok( "\N{MALAYALAM DIGIT NINE}" =~ m/^<-<InEthiopic>>$/, q{Match unrelated externally inverted <InEthiopic>} );
ok( "\N{MALAYALAM DIGIT NINE}" =~ m/^<+<-InEthiopic>>$/, q{Match unrelated internally inverted <InEthiopic>} );
ok( "\N{MALAYALAM DIGIT NINE}\N{ETHIOPIC SYLLABLE HA}" =~ m/<+<InEthiopic>>/, q{Match unanchored <InEthiopic>} );
# InGeneralPunctuation
ok( "\N{EN QUAD}" =~ m/^<+<InGeneralPunctuation>>$/, q{Match <InGeneralPunctuation>} );
ok( "\N{EN QUAD}" =~ m/^<[A]+<InGeneralPunctuation>>$/, q{Match compound <InGeneralPunctuation>} );
ok( "\N{EN QUAD}" !~ m/^<-<InGeneralPunctuation>>$/, q{Don't match externally inverted <InGeneralPunctuation>} );
ok( "\N{EN QUAD}" !~ m/^<[A]-<InGeneralPunctuation>>$/, q{Don't match compound inverted <InGeneralPunctuation>} );
ok( "\N{EN QUAD}" !~ m/^<+<-InGeneralPunctuation>>$/, q{Don't match internally inverted <InGeneralPunctuation>} );
ok( "\x{BBC9}" !~ m/^<+<InGeneralPunctuation>>$/, q{Don't match unrelated <InGeneralPunctuation>} );
ok( "\x{BBC9}" =~ m/^<-<InGeneralPunctuation>>$/, q{Match unrelated externally inverted <InGeneralPunctuation>} );
ok( "\x{BBC9}" =~ m/^<+<-InGeneralPunctuation>>$/, q{Match unrelated internally inverted <InGeneralPunctuation>} );
ok( "\x{BBC9}\N{EN QUAD}" =~ m/<+<InGeneralPunctuation>>/, q{Match unanchored <InGeneralPunctuation>} );
# InGeometricShapes
ok( "\N{BLACK SQUARE}" =~ m/^<+<InGeometricShapes>>$/, q{Match <InGeometricShapes>} );
ok( "\N{BLACK SQUARE}" =~ m/^<[A]+<InGeometricShapes>>$/, q{Match compound <InGeometricShapes>} );
ok( "\N{BLACK SQUARE}" !~ m/^<-<InGeometricShapes>>$/, q{Don't match externally inverted <InGeometricShapes>} );
ok( "\N{BLACK SQUARE}" !~ m/^<[A]-<InGeometricShapes>>$/, q{Don't match compound inverted <InGeometricShapes>} );
ok( "\N{BLACK SQUARE}" !~ m/^<+<-InGeometricShapes>>$/, q{Don't match internally inverted <InGeometricShapes>} );
ok( "\x{C58A}" !~ m/^<+<InGeometricShapes>>$/, q{Don't match unrelated <InGeometricShapes>} );
ok( "\x{C58A}" =~ m/^<-<InGeometricShapes>>$/, q{Match unrelated externally inverted <InGeometricShapes>} );
ok( "\x{C58A}" =~ m/^<+<-InGeometricShapes>>$/, q{Match unrelated internally inverted <InGeometricShapes>} );
ok( "\x{C58A}\N{BLACK SQUARE}" =~ m/<+<InGeometricShapes>>/, q{Match unanchored <InGeometricShapes>} );
# InGeorgian
ok( "\N{GEORGIAN CAPITAL LETTER AN}" =~ m/^<+<InGeorgian>>$/, q{Match <InGeorgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" =~ m/^<[A]+<InGeorgian>>$/, q{Match compound <InGeorgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<-<InGeorgian>>$/, q{Don't match externally inverted <InGeorgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<[A]-<InGeorgian>>$/, q{Don't match compound inverted <InGeorgian>} );
ok( "\N{GEORGIAN CAPITAL LETTER AN}" !~ m/^<+<-InGeorgian>>$/, q{Don't match internally inverted <InGeorgian>} );
ok( "\N{ARMENIAN CAPITAL LETTER BEN}" !~ m/^<+<InGeorgian>>$/, q{Don't match unrelated <InGeorgian>} );
ok( "\N{ARMENIAN CAPITAL LETTER BEN}" =~ m/^<-<InGeorgian>>$/, q{Match unrelated externally inverted <InGeorgian>} );
ok( "\N{ARMENIAN CAPITAL LETTER BEN}" =~ m/^<+<-InGeorgian>>$/, q{Match unrelated internally inverted <InGeorgian>} );
ok( "\N{ARMENIAN CAPITAL LETTER BEN}\N{GEORGIAN CAPITAL LETTER AN}" =~ m/<+<InGeorgian>>/, q{Match unanchored <InGeorgian>} );
# InGothic
ok( "\x{1A5A}" !~ m/^<+<InGothic>>$/, q{Don't match unrelated <InGothic>} );
ok( "\x{1A5A}" =~ m/^<-<InGothic>>$/, q{Match unrelated externally inverted <InGothic>} );
ok( "\x{1A5A}" =~ m/^<+<-InGothic>>$/, q{Match unrelated internally inverted <InGothic>} );
# InGreekExtended
ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" =~ m/^<+<InGreekExtended>>$/, q{Match <InGreekExtended>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" =~ m/^<[A]+<InGreekExtended>>$/, q{Match compound <InGreekExtended>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" !~ m/^<-<InGreekExtended>>$/, q{Don't match externally inverted <InGreekExtended>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" !~ m/^<[A]-<InGreekExtended>>$/, q{Don't match compound inverted <InGreekExtended>} );
ok( "\N{GREEK SMALL LETTER ALPHA WITH PSILI}" !~ m/^<+<-InGreekExtended>>$/, q{Don't match internally inverted <InGreekExtended>} );
ok( "\x{39F3}" !~ m/^<+<InGreekExtended>>$/, q{Don't match unrelated <InGreekExtended>} );
ok( "\x{39F3}" =~ m/^<-<InGreekExtended>>$/, q{Match unrelated externally inverted <InGreekExtended>} );
ok( "\x{39F3}" =~ m/^<+<-InGreekExtended>>$/, q{Match unrelated internally inverted <InGreekExtended>} );
ok( "\x{39F3}\N{GREEK SMALL LETTER ALPHA WITH PSILI}" =~ m/<+<InGreekExtended>>/, q{Match unanchored <InGreekExtended>} );
# InGreekAndCoptic
ok( "\x{0370}" =~ m/^<+<InGreekAndCoptic>>$/, q{Match <InGreekAndCoptic>} );
ok( "\x{0370}" =~ m/^<[A]+<InGreekAndCoptic>>$/, q{Match compound <InGreekAndCoptic>} );
ok( "\x{0370}" !~ m/^<-<InGreekAndCoptic>>$/, q{Don't match externally inverted <InGreekAndCoptic>} );
ok( "\x{0370}" !~ m/^<[A]-<InGreekAndCoptic>>$/, q{Don't match compound inverted <InGreekAndCoptic>} );
ok( "\x{0370}" !~ m/^<+<-InGreekAndCoptic>>$/, q{Don't match internally inverted <InGreekAndCoptic>} );
ok( "\x{8CFE}" !~ m/^<+<InGreekAndCoptic>>$/, q{Don't match unrelated <InGreekAndCoptic>} );
ok( "\x{8CFE}" =~ m/^<-<InGreekAndCoptic>>$/, q{Match unrelated externally inverted <InGreekAndCoptic>} );
ok( "\x{8CFE}" =~ m/^<+<-InGreekAndCoptic>>$/, q{Match unrelated internally inverted <InGreekAndCoptic>} );
ok( "\x{8CFE}\x{0370}" =~ m/<+<InGreekAndCoptic>>/, q{Match unanchored <InGreekAndCoptic>} );
# InGujarati
ok( "\x{0A80}" =~ m/^<+<InGujarati>>$/, q{Match <InGujarati>} );
ok( "\x{0A80}" =~ m/^<[A]+<InGujarati>>$/, q{Match compound <InGujarati>} );
ok( "\x{0A80}" !~ m/^<-<InGujarati>>$/, q{Don't match externally inverted <InGujarati>} );
ok( "\x{0A80}" !~ m/^<[A]-<InGujarati>>$/, q{Don't match compound inverted <InGujarati>} );
ok( "\x{0A80}" !~ m/^<+<-InGujarati>>$/, q{Don't match internally inverted <InGujarati>} );
ok( "\x{B022}" !~ m/^<+<InGujarati>>$/, q{Don't match unrelated <InGujarati>} );
ok( "\x{B022}" =~ m/^<-<InGujarati>>$/, q{Match unrelated externally inverted <InGujarati>} );
ok( "\x{B022}" =~ m/^<+<-InGujarati>>$/, q{Match unrelated internally inverted <InGujarati>} );
ok( "\x{B022}\x{0A80}" =~ m/<+<InGujarati>>/, q{Match unanchored <InGujarati>} );
# InGurmukhi
ok( "\x{0A00}" =~ m/^<+<InGurmukhi>>$/, q{Match <InGurmukhi>} );
ok( "\x{0A00}" =~ m/^<[A]+<InGurmukhi>>$/, q{Match compound <InGurmukhi>} );
ok( "\x{0A00}" !~ m/^<-<InGurmukhi>>$/, q{Don't match externally inverted <InGurmukhi>} );
ok( "\x{0A00}" !~ m/^<[A]-<InGurmukhi>>$/, q{Don't match compound inverted <InGurmukhi>} );
ok( "\x{0A00}" !~ m/^<+<-InGurmukhi>>$/, q{Don't match internally inverted <InGurmukhi>} );
ok( "\x{8FC3}" !~ m/^<+<InGurmukhi>>$/, q{Don't match unrelated <InGurmukhi>} );
ok( "\x{8FC3}" =~ m/^<-<InGurmukhi>>$/, q{Match unrelated externally inverted <InGurmukhi>} );
ok( "\x{8FC3}" =~ m/^<+<-InGurmukhi>>$/, q{Match unrelated internally inverted <InGurmukhi>} );
ok( "\x{8FC3}\x{0A00}" =~ m/<+<InGurmukhi>>/, q{Match unanchored <InGurmukhi>} );
# InHalfwidthAndFullwidthForms
ok( "\x{36A3}" !~ m/^<+<InHalfwidthAndFullwidthForms>>$/, q{Don't match unrelated <InHalfwidthAndFullwidthForms>} );
ok( "\x{36A3}" =~ m/^<-<InHalfwidthAndFullwidthForms>>$/, q{Match unrelated externally inverted <InHalfwidthAndFullwidthForms>} );
ok( "\x{36A3}" =~ m/^<+<-InHalfwidthAndFullwidthForms>>$/, q{Match unrelated internally inverted <InHalfwidthAndFullwidthForms>} );
# InHangulCompatibilityJamo
ok( "\x{3130}" =~ m/^<+<InHangulCompatibilityJamo>>$/, q{Match <InHangulCompatibilityJamo>} );
ok( "\x{3130}" =~ m/^<[A]+<InHangulCompatibilityJamo>>$/, q{Match compound <InHangulCompatibilityJamo>} );
ok( "\x{3130}" !~ m/^<-<InHangulCompatibilityJamo>>$/, q{Don't match externally inverted <InHangulCompatibilityJamo>} );
ok( "\x{3130}" !~ m/^<[A]-<InHangulCompatibilityJamo>>$/, q{Don't match compound inverted <InHangulCompatibilityJamo>} );
ok( "\x{3130}" !~ m/^<+<-InHangulCompatibilityJamo>>$/, q{Don't match internally inverted <InHangulCompatibilityJamo>} );
ok( "\x{BAF0}" !~ m/^<+<InHangulCompatibilityJamo>>$/, q{Don't match unrelated <InHangulCompatibilityJamo>} );
ok( "\x{BAF0}" =~ m/^<-<InHangulCompatibilityJamo>>$/, q{Match unrelated externally inverted <InHangulCompatibilityJamo>} );
ok( "\x{BAF0}" =~ m/^<+<-InHangulCompatibilityJamo>>$/, q{Match unrelated internally inverted <InHangulCompatibilityJamo>} );
ok( "\x{BAF0}\x{3130}" =~ m/<+<InHangulCompatibilityJamo>>/, q{Match unanchored <InHangulCompatibilityJamo>} );
# InHangulJamo
ok( "\N{HANGUL CHOSEONG KIYEOK}" =~ m/^<+<InHangulJamo>>$/, q{Match <InHangulJamo>} );
ok( "\N{HANGUL CHOSEONG KIYEOK}" =~ m/^<[A]+<InHangulJamo>>$/, q{Match compound <InHangulJamo>} );
ok( "\N{HANGUL CHOSEONG KIYEOK}" !~ m/^<-<InHangulJamo>>$/, q{Don't match externally inverted <InHangulJamo>} );
ok( "\N{HANGUL CHOSEONG KIYEOK}" !~ m/^<[A]-<InHangulJamo>>$/, q{Don't match compound inverted <InHangulJamo>} );
ok( "\N{HANGUL CHOSEONG KIYEOK}" !~ m/^<+<-InHangulJamo>>$/, q{Don't match internally inverted <InHangulJamo>} );
ok( "\x{4EB3}" !~ m/^<+<InHangulJamo>>$/, q{Don't match unrelated <InHangulJamo>} );
ok( "\x{4EB3}" =~ m/^<-<InHangulJamo>>$/, q{Match unrelated externally inverted <InHangulJamo>} );
ok( "\x{4EB3}" =~ m/^<+<-InHangulJamo>>$/, q{Match unrelated internally inverted <InHangulJamo>} );
ok( "\x{4EB3}\N{HANGUL CHOSEONG KIYEOK}" =~ m/<+<InHangulJamo>>/, q{Match unanchored <InHangulJamo>} );
# InHangulSyllables
ok( "\x{AC00}" =~ m/^<+<InHangulSyllables>>$/, q{Match <InHangulSyllables>} );
ok( "\x{AC00}" =~ m/^<[A]+<InHangulSyllables>>$/, q{Match compound <InHangulSyllables>} );
ok( "\x{AC00}" !~ m/^<-<InHangulSyllables>>$/, q{Don't match externally inverted <InHangulSyllables>} );
ok( "\x{AC00}" !~ m/^<[A]-<InHangulSyllables>>$/, q{Don't match compound inverted <InHangulSyllables>} );
ok( "\x{AC00}" !~ m/^<+<-InHangulSyllables>>$/, q{Don't match internally inverted <InHangulSyllables>} );
ok( "\x{7D7E}" !~ m/^<+<InHangulSyllables>>$/, q{Don't match unrelated <InHangulSyllables>} );
ok( "\x{7D7E}" =~ m/^<-<InHangulSyllables>>$/, q{Match unrelated externally inverted <InHangulSyllables>} );
ok( "\x{7D7E}" =~ m/^<+<-InHangulSyllables>>$/, q{Match unrelated internally inverted <InHangulSyllables>} );
ok( "\x{7D7E}\x{AC00}" =~ m/<+<InHangulSyllables>>/, q{Match unanchored <InHangulSyllables>} );
# InHanunoo
ok( "\N{HANUNOO LETTER A}" =~ m/^<+<InHanunoo>>$/, q{Match <InHanunoo>} );
ok( "\N{HANUNOO LETTER A}" =~ m/^<[A]+<InHanunoo>>$/, q{Match compound <InHanunoo>} );
ok( "\N{HANUNOO LETTER A}" !~ m/^<-<InHanunoo>>$/, q{Don't match externally inverted <InHanunoo>} );
ok( "\N{HANUNOO LETTER A}" !~ m/^<[A]-<InHanunoo>>$/, q{Don't match compound inverted <InHanunoo>} );
ok( "\N{HANUNOO LETTER A}" !~ m/^<+<-InHanunoo>>$/, q{Don't match internally inverted <InHanunoo>} );
ok( "\x{BD8A}" !~ m/^<+<InHanunoo>>$/, q{Don't match unrelated <InHanunoo>} );
ok( "\x{BD8A}" =~ m/^<-<InHanunoo>>$/, q{Match unrelated externally inverted <InHanunoo>} );
ok( "\x{BD8A}" =~ m/^<+<-InHanunoo>>$/, q{Match unrelated internally inverted <InHanunoo>} );
ok( "\x{BD8A}\N{HANUNOO LETTER A}" =~ m/<+<InHanunoo>>/, q{Match unanchored <InHanunoo>} );
# InHebrew
ok( "\x{0590}" =~ m/^<+<InHebrew>>$/, q{Match <InHebrew>} );
ok( "\x{0590}" =~ m/^<[A]+<InHebrew>>$/, q{Match compound <InHebrew>} );
ok( "\x{0590}" !~ m/^<-<InHebrew>>$/, q{Don't match externally inverted <InHebrew>} );
ok( "\x{0590}" !~ m/^<[A]-<InHebrew>>$/, q{Don't match compound inverted <InHebrew>} );
ok( "\x{0590}" !~ m/^<+<-InHebrew>>$/, q{Don't match internally inverted <InHebrew>} );
ok( "\x{7EB3}" !~ m/^<+<InHebrew>>$/, q{Don't match unrelated <InHebrew>} );
ok( "\x{7EB3}" =~ m/^<-<InHebrew>>$/, q{Match unrelated externally inverted <InHebrew>} );
ok( "\x{7EB3}" =~ m/^<+<-InHebrew>>$/, q{Match unrelated internally inverted <InHebrew>} );
ok( "\x{7EB3}\x{0590}" =~ m/<+<InHebrew>>/, q{Match unanchored <InHebrew>} );
# InHighPrivateUseSurrogates
ok( "\x{9EC6}" !~ m/^<+<InHighPrivateUseSurrogates>>$/, q{Don't match unrelated <InHighPrivateUseSurrogates>} );
ok( "\x{9EC6}" =~ m/^<-<InHighPrivateUseSurrogates>>$/, q{Match unrelated externally inverted <InHighPrivateUseSurrogates>} );
ok( "\x{9EC6}" =~ m/^<+<-InHighPrivateUseSurrogates>>$/, q{Match unrelated internally inverted <InHighPrivateUseSurrogates>} );
# InHighSurrogates
ok( "\x{BC8F}" !~ m/^<+<InHighSurrogates>>$/, q{Don't match unrelated <InHighSurrogates>} );
ok( "\x{BC8F}" =~ m/^<-<InHighSurrogates>>$/, q{Match unrelated externally inverted <InHighSurrogates>} );
ok( "\x{BC8F}" =~ m/^<+<-InHighSurrogates>>$/, q{Match unrelated internally inverted <InHighSurrogates>} );
# InHiragana
ok( "\x{3040}" =~ m/^<+<InHiragana>>$/, q{Match <InHiragana>} );
ok( "\x{3040}" =~ m/^<[A]+<InHiragana>>$/, q{Match compound <InHiragana>} );
ok( "\x{3040}" !~ m/^<-<InHiragana>>$/, q{Don't match externally inverted <InHiragana>} );
ok( "\x{3040}" !~ m/^<[A]-<InHiragana>>$/, q{Don't match compound inverted <InHiragana>} );
ok( "\x{3040}" !~ m/^<+<-InHiragana>>$/, q{Don't match internally inverted <InHiragana>} );
ok( "\N{ARABIC SIGN ALAYHE ASSALLAM}" !~ m/^<+<InHiragana>>$/, q{Don't match unrelated <InHiragana>} );
ok( "\N{ARABIC SIGN ALAYHE ASSALLAM}" =~ m/^<-<InHiragana>>$/, q{Match unrelated externally inverted <InHiragana>} );
ok( "\N{ARABIC SIGN ALAYHE ASSALLAM}" =~ m/^<+<-InHiragana>>$/, q{Match unrelated internally inverted <InHiragana>} );
ok( "\N{ARABIC SIGN ALAYHE ASSALLAM}\x{3040}" =~ m/<+<InHiragana>>/, q{Match unanchored <InHiragana>} );
# InIPAExtensions
ok( "\N{LATIN SMALL LETTER TURNED A}" =~ m/^<+<InIPAExtensions>>$/, q{Match <InIPAExtensions>} );
ok( "\N{LATIN SMALL LETTER TURNED A}" =~ m/^<[A]+<InIPAExtensions>>$/, q{Match compound <InIPAExtensions>} );
ok( "\N{LATIN SMALL LETTER TURNED A}" !~ m/^<-<InIPAExtensions>>$/, q{Don't match externally inverted <InIPAExtensions>} );
ok( "\N{LATIN SMALL LETTER TURNED A}" !~ m/^<[A]-<InIPAExtensions>>$/, q{Don't match compound inverted <InIPAExtensions>} );
ok( "\N{LATIN SMALL LETTER TURNED A}" !~ m/^<+<-InIPAExtensions>>$/, q{Don't match internally inverted <InIPAExtensions>} );
ok( "\x{0DFC}" !~ m/^<+<InIPAExtensions>>$/, q{Don't match unrelated <InIPAExtensions>} );
ok( "\x{0DFC}" =~ m/^<-<InIPAExtensions>>$/, q{Match unrelated externally inverted <InIPAExtensions>} );
ok( "\x{0DFC}" =~ m/^<+<-InIPAExtensions>>$/, q{Match unrelated internally inverted <InIPAExtensions>} );
ok( "\x{0DFC}\N{LATIN SMALL LETTER TURNED A}" =~ m/<+<InIPAExtensions>>/, q{Match unanchored <InIPAExtensions>} );
# InIdeographicDescriptionCharacters
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/^<+<InIdeographicDescriptionCharacters>>$/, q{Match <InIdeographicDescriptionCharacters>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/^<[A]+<InIdeographicDescriptionCharacters>>$/, q{Match compound <InIdeographicDescriptionCharacters>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<-<InIdeographicDescriptionCharacters>>$/, q{Don't match externally inverted <InIdeographicDescriptionCharacters>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<[A]-<InIdeographicDescriptionCharacters>>$/, q{Don't match compound inverted <InIdeographicDescriptionCharacters>} );
ok( "\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" !~ m/^<+<-InIdeographicDescriptionCharacters>>$/, q{Don't match internally inverted <InIdeographicDescriptionCharacters>} );
ok( "\N{LATIN CAPITAL LETTER AE}" !~ m/^<+<InIdeographicDescriptionCharacters>>$/, q{Don't match unrelated <InIdeographicDescriptionCharacters>} );
ok( "\N{LATIN CAPITAL LETTER AE}" =~ m/^<-<InIdeographicDescriptionCharacters>>$/, q{Match unrelated externally inverted <InIdeographicDescriptionCharacters>} );
ok( "\N{LATIN CAPITAL LETTER AE}" =~ m/^<+<-InIdeographicDescriptionCharacters>>$/, q{Match unrelated internally inverted <InIdeographicDescriptionCharacters>} );
ok( "\N{LATIN CAPITAL LETTER AE}\N{IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT}" =~ m/<+<InIdeographicDescriptionCharacters>>/, q{Match unanchored <InIdeographicDescriptionCharacters>} );
# InKanbun
ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" =~ m/^<+<InKanbun>>$/, q{Match <InKanbun>} );
ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" =~ m/^<[A]+<InKanbun>>$/, q{Match compound <InKanbun>} );
ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" !~ m/^<-<InKanbun>>$/, q{Don't match externally inverted <InKanbun>} );
ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" !~ m/^<[A]-<InKanbun>>$/, q{Don't match compound inverted <InKanbun>} );
ok( "\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" !~ m/^<+<-InKanbun>>$/, q{Don't match internally inverted <InKanbun>} );
ok( "\x{93AB}" !~ m/^<+<InKanbun>>$/, q{Don't match unrelated <InKanbun>} );
ok( "\x{93AB}" =~ m/^<-<InKanbun>>$/, q{Match unrelated externally inverted <InKanbun>} );
ok( "\x{93AB}" =~ m/^<+<-InKanbun>>$/, q{Match unrelated internally inverted <InKanbun>} );
ok( "\x{93AB}\N{IDEOGRAPHIC ANNOTATION LINKING MARK}" =~ m/<+<InKanbun>>/, q{Match unanchored <InKanbun>} );
# InKangxiRadicals
ok( "\N{KANGXI RADICAL ONE}" =~ m/^<+<InKangxiRadicals>>$/, q{Match <InKangxiRadicals>} );
ok( "\N{KANGXI RADICAL ONE}" =~ m/^<[A]+<InKangxiRadicals>>$/, q{Match compound <InKangxiRadicals>} );
ok( "\N{KANGXI RADICAL ONE}" !~ m/^<-<InKangxiRadicals>>$/, q{Don't match externally inverted <InKangxiRadicals>} );
ok( "\N{KANGXI RADICAL ONE}" !~ m/^<[A]-<InKangxiRadicals>>$/, q{Don't match compound inverted <InKangxiRadicals>} );
ok( "\N{KANGXI RADICAL ONE}" !~ m/^<+<-InKangxiRadicals>>$/, q{Don't match internally inverted <InKangxiRadicals>} );
ok( "\x{363D}" !~ m/^<+<InKangxiRadicals>>$/, q{Don't match unrelated <InKangxiRadicals>} );
ok( "\x{363D}" =~ m/^<-<InKangxiRadicals>>$/, q{Match unrelated externally inverted <InKangxiRadicals>} );
ok( "\x{363D}" =~ m/^<+<-InKangxiRadicals>>$/, q{Match unrelated internally inverted <InKangxiRadicals>} );
ok( "\x{363D}\N{KANGXI RADICAL ONE}" =~ m/<+<InKangxiRadicals>>/, q{Match unanchored <InKangxiRadicals>} );
# InKannada
ok( "\x{0C80}" =~ m/^<+<InKannada>>$/, q{Match <InKannada>} );
ok( "\x{0C80}" =~ m/^<[A]+<InKannada>>$/, q{Match compound <InKannada>} );
ok( "\x{0C80}" !~ m/^<-<InKannada>>$/, q{Don't match externally inverted <InKannada>} );
ok( "\x{0C80}" !~ m/^<[A]-<InKannada>>$/, q{Don't match compound inverted <InKannada>} );
ok( "\x{0C80}" !~ m/^<+<-InKannada>>$/, q{Don't match internally inverted <InKannada>} );
ok( "\x{9093}" !~ m/^<+<InKannada>>$/, q{Don't match unrelated <InKannada>} );
ok( "\x{9093}" =~ m/^<-<InKannada>>$/, q{Match unrelated externally inverted <InKannada>} );
ok( "\x{9093}" =~ m/^<+<-InKannada>>$/, q{Match unrelated internally inverted <InKannada>} );
ok( "\x{9093}\x{0C80}" =~ m/<+<InKannada>>/, q{Match unanchored <InKannada>} );
# InKatakana
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/^<+<InKatakana>>$/, q{Match <InKatakana>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/^<[A]+<InKatakana>>$/, q{Match compound <InKatakana>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<-<InKatakana>>$/, q{Don't match externally inverted <InKatakana>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<[A]-<InKatakana>>$/, q{Don't match compound inverted <InKatakana>} );
ok( "\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" !~ m/^<+<-InKatakana>>$/, q{Don't match internally inverted <InKatakana>} );
ok( "\x{75DA}" !~ m/^<+<InKatakana>>$/, q{Don't match unrelated <InKatakana>} );
ok( "\x{75DA}" =~ m/^<-<InKatakana>>$/, q{Match unrelated externally inverted <InKatakana>} );
ok( "\x{75DA}" =~ m/^<+<-InKatakana>>$/, q{Match unrelated internally inverted <InKatakana>} );
ok( "\x{75DA}\N{KATAKANA-HIRAGANA DOUBLE HYPHEN}" =~ m/<+<InKatakana>>/, q{Match unanchored <InKatakana>} );
# InKatakanaPhoneticExtensions
ok( "\N{KATAKANA LETTER SMALL KU}" =~ m/^<+<InKatakanaPhoneticExtensions>>$/, q{Match <InKatakanaPhoneticExtensions>} );
ok( "\N{KATAKANA LETTER SMALL KU}" =~ m/^<[A]+<InKatakanaPhoneticExtensions>>$/, q{Match compound <InKatakanaPhoneticExtensions>} );
ok( "\N{KATAKANA LETTER SMALL KU}" !~ m/^<-<InKatakanaPhoneticExtensions>>$/, q{Don't match externally inverted <InKatakanaPhoneticExtensions>} );
ok( "\N{KATAKANA LETTER SMALL KU}" !~ m/^<[A]-<InKatakanaPhoneticExtensions>>$/, q{Don't match compound inverted <InKatakanaPhoneticExtensions>} );
ok( "\N{KATAKANA LETTER SMALL KU}" !~ m/^<+<-InKatakanaPhoneticExtensions>>$/, q{Don't match internally inverted <InKatakanaPhoneticExtensions>} );
ok( "\N{GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA}" !~ m/^<+<InKatakanaPhoneticExtensions>>$/, q{Don't match unrelated <InKatakanaPhoneticExtensions>} );
ok( "\N{GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA}" =~ m/^<-<InKatakanaPhoneticExtensions>>$/, q{Match unrelated externally inverted <InKatakanaPhoneticExtensions>} );
ok( "\N{GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA}" =~ m/^<+<-InKatakanaPhoneticExtensions>>$/, q{Match unrelated internally inverted <InKatakanaPhoneticExtensions>} );
ok( "\N{GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA}\N{KATAKANA LETTER SMALL KU}" =~ m/<+<InKatakanaPhoneticExtensions>>/, q{Match unanchored <InKatakanaPhoneticExtensions>} );
# InKhmer
ok( "\N{KHMER LETTER KA}" =~ m/^<+<InKhmer>>$/, q{Match <InKhmer>} );
ok( "\N{KHMER LETTER KA}" =~ m/^<[A]+<InKhmer>>$/, q{Match compound <InKhmer>} );
ok( "\N{KHMER LETTER KA}" !~ m/^<-<InKhmer>>$/, q{Don't match externally inverted <InKhmer>} );
ok( "\N{KHMER LETTER KA}" !~ m/^<[A]-<InKhmer>>$/, q{Don't match compound inverted <InKhmer>} );
ok( "\N{KHMER LETTER KA}" !~ m/^<+<-InKhmer>>$/, q{Don't match internally inverted <InKhmer>} );
ok( "\x{508C}" !~ m/^<+<InKhmer>>$/, q{Don't match unrelated <InKhmer>} );
ok( "\x{508C}" =~ m/^<-<InKhmer>>$/, q{Match unrelated externally inverted <InKhmer>} );
ok( "\x{508C}" =~ m/^<+<-InKhmer>>$/, q{Match unrelated internally inverted <InKhmer>} );
ok( "\x{508C}\N{KHMER LETTER KA}" =~ m/<+<InKhmer>>/, q{Match unanchored <InKhmer>} );
# InLao
ok( "\x{0E80}" =~ m/^<+<InLao>>$/, q{Match <InLao>} );
ok( "\x{0E80}" =~ m/^<[A]+<InLao>>$/, q{Match compound <InLao>} );
ok( "\x{0E80}" !~ m/^<-<InLao>>$/, q{Don't match externally inverted <InLao>} );
ok( "\x{0E80}" !~ m/^<[A]-<InLao>>$/, q{Don't match compound inverted <InLao>} );
ok( "\x{0E80}" !~ m/^<+<-InLao>>$/, q{Don't match internally inverted <InLao>} );
ok( "\N{PARENTHESIZED IDEOGRAPH CONGRATULATION}" !~ m/^<+<InLao>>$/, q{Don't match unrelated <InLao>} );
ok( "\N{PARENTHESIZED IDEOGRAPH CONGRATULATION}" =~ m/^<-<InLao>>$/, q{Match unrelated externally inverted <InLao>} );
ok( "\N{PARENTHESIZED IDEOGRAPH CONGRATULATION}" =~ m/^<+<-InLao>>$/, q{Match unrelated internally inverted <InLao>} );
ok( "\N{PARENTHESIZED IDEOGRAPH CONGRATULATION}\x{0E80}" =~ m/<+<InLao>>/, q{Match unanchored <InLao>} );
# InLatin1Supplement
ok( "\x{0080}" =~ m/^<+<InLatin1Supplement>>$/, q{Match <InLatin1Supplement>} );
ok( "\x{0080}" =~ m/^<[A]+<InLatin1Supplement>>$/, q{Match compound <InLatin1Supplement>} );
ok( "\x{0080}" !~ m/^<-<InLatin1Supplement>>$/, q{Don't match externally inverted <InLatin1Supplement>} );
ok( "\x{0080}" !~ m/^<[A]-<InLatin1Supplement>>$/, q{Don't match compound inverted <InLatin1Supplement>} );
ok( "\x{0080}" !~ m/^<+<-InLatin1Supplement>>$/, q{Don't match internally inverted <InLatin1Supplement>} );
ok( "\x{3A43}" !~ m/^<+<InLatin1Supplement>>$/, q{Don't match unrelated <InLatin1Supplement>} );
ok( "\x{3A43}" =~ m/^<-<InLatin1Supplement>>$/, q{Match unrelated externally inverted <InLatin1Supplement>} );
ok( "\x{3A43}" =~ m/^<+<-InLatin1Supplement>>$/, q{Match unrelated internally inverted <InLatin1Supplement>} );
ok( "\x{3A43}\x{0080}" =~ m/<+<InLatin1Supplement>>/, q{Match unanchored <InLatin1Supplement>} );
# InLatinExtendedA
ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" =~ m/^<+<InLatinExtendedA>>$/, q{Match <InLatinExtendedA>} );
ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" =~ m/^<[A]+<InLatinExtendedA>>$/, q{Match compound <InLatinExtendedA>} );
ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" !~ m/^<-<InLatinExtendedA>>$/, q{Don't match externally inverted <InLatinExtendedA>} );
ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" !~ m/^<[A]-<InLatinExtendedA>>$/, q{Don't match compound inverted <InLatinExtendedA>} );
ok( "\N{LATIN CAPITAL LETTER A WITH MACRON}" !~ m/^<+<-InLatinExtendedA>>$/, q{Don't match internally inverted <InLatinExtendedA>} );
ok( "\N{ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS}" !~ m/^<+<InLatinExtendedA>>$/, q{Don't match unrelated <InLatinExtendedA>} );
ok( "\N{ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS}" =~ m/^<-<InLatinExtendedA>>$/, q{Match unrelated externally inverted <InLatinExtendedA>} );
ok( "\N{ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS}" =~ m/^<+<-InLatinExtendedA>>$/, q{Match unrelated internally inverted <InLatinExtendedA>} );
ok( "\N{ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS}\N{LATIN CAPITAL LETTER A WITH MACRON}" =~ m/<+<InLatinExtendedA>>/, q{Match unanchored <InLatinExtendedA>} );
# InLatinExtendedAdditional
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m/^<+<InLatinExtendedAdditional>>$/, q{Match <InLatinExtendedAdditional>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m/^<[A]+<InLatinExtendedAdditional>>$/, q{Match compound <InLatinExtendedAdditional>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^<-<InLatinExtendedAdditional>>$/, q{Don't match externally inverted <InLatinExtendedAdditional>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^<[A]-<InLatinExtendedAdditional>>$/, q{Don't match compound inverted <InLatinExtendedAdditional>} );
ok( "\N{LATIN CAPITAL LETTER A WITH RING BELOW}" !~ m/^<+<-InLatinExtendedAdditional>>$/, q{Don't match internally inverted <InLatinExtendedAdditional>} );
ok( "\x{36E7}" !~ m/^<+<InLatinExtendedAdditional>>$/, q{Don't match unrelated <InLatinExtendedAdditional>} );
ok( "\x{36E7}" =~ m/^<-<InLatinExtendedAdditional>>$/, q{Match unrelated externally inverted <InLatinExtendedAdditional>} );
ok( "\x{36E7}" =~ m/^<+<-InLatinExtendedAdditional>>$/, q{Match unrelated internally inverted <InLatinExtendedAdditional>} );
ok( "\x{36E7}\N{LATIN CAPITAL LETTER A WITH RING BELOW}" =~ m/<+<InLatinExtendedAdditional>>/, q{Match unanchored <InLatinExtendedAdditional>} );
# InLatinExtendedB
ok( "\N{LATIN SMALL LETTER B WITH STROKE}" =~ m/^<+<InLatinExtendedB>>$/, q{Match <InLatinExtendedB>} );
ok( "\N{LATIN SMALL LETTER B WITH STROKE}" =~ m/^<[A]+<InLatinExtendedB>>$/, q{Match compound <InLatinExtendedB>} );
ok( "\N{LATIN SMALL LETTER B WITH STROKE}" !~ m/^<-<InLatinExtendedB>>$/, q{Don't match externally inverted <InLatinExtendedB>} );
ok( "\N{LATIN SMALL LETTER B WITH STROKE}" !~ m/^<[A]-<InLatinExtendedB>>$/, q{Don't match compound inverted <InLatinExtendedB>} );
ok( "\N{LATIN SMALL LETTER B WITH STROKE}" !~ m/^<+<-InLatinExtendedB>>$/, q{Don't match internally inverted <InLatinExtendedB>} );
ok( "\x{877E}" !~ m/^<+<InLatinExtendedB>>$/, q{Don't match unrelated <InLatinExtendedB>} );
ok( "\x{877E}" =~ m/^<-<InLatinExtendedB>>$/, q{Match unrelated externally inverted <InLatinExtendedB>} );
ok( "\x{877E}" =~ m/^<+<-InLatinExtendedB>>$/, q{Match unrelated internally inverted <InLatinExtendedB>} );
ok( "\x{877E}\N{LATIN SMALL LETTER B WITH STROKE}" =~ m/<+<InLatinExtendedB>>/, q{Match unanchored <InLatinExtendedB>} );
# InLetterlikeSymbols
ok( "\N{ACCOUNT OF}" =~ m/^<+<InLetterlikeSymbols>>$/, q{Match <InLetterlikeSymbols>} );
ok( "\N{ACCOUNT OF}" =~ m/^<[A]+<InLetterlikeSymbols>>$/, q{Match compound <InLetterlikeSymbols>} );
ok( "\N{ACCOUNT OF}" !~ m/^<-<InLetterlikeSymbols>>$/, q{Don't match externally inverted <InLetterlikeSymbols>} );
ok( "\N{ACCOUNT OF}" !~ m/^<[A]-<InLetterlikeSymbols>>$/, q{Don't match compound inverted <InLetterlikeSymbols>} );
ok( "\N{ACCOUNT OF}" !~ m/^<+<-InLetterlikeSymbols>>$/, q{Don't match internally inverted <InLetterlikeSymbols>} );
ok( "\N{CIRCLED IDEOGRAPH TWO}" !~ m/^<+<InLetterlikeSymbols>>$/, q{Don't match unrelated <InLetterlikeSymbols>} );
ok( "\N{CIRCLED IDEOGRAPH TWO}" =~ m/^<-<InLetterlikeSymbols>>$/, q{Match unrelated externally inverted <InLetterlikeSymbols>} );
ok( "\N{CIRCLED IDEOGRAPH TWO}" =~ m/^<+<-InLetterlikeSymbols>>$/, q{Match unrelated internally inverted <InLetterlikeSymbols>} );
ok( "\N{CIRCLED IDEOGRAPH TWO}\N{ACCOUNT OF}" =~ m/<+<InLetterlikeSymbols>>/, q{Match unanchored <InLetterlikeSymbols>} );
# InLowSurrogates
ok( "\x{B611}" !~ m/^<+<InLowSurrogates>>$/, q{Don't match unrelated <InLowSurrogates>} );
ok( "\x{B611}" =~ m/^<-<InLowSurrogates>>$/, q{Match unrelated externally inverted <InLowSurrogates>} );
ok( "\x{B611}" =~ m/^<+<-InLowSurrogates>>$/, q{Match unrelated internally inverted <InLowSurrogates>} );
# InMalayalam
ok( "\x{0D00}" =~ m/^<+<InMalayalam>>$/, q{Match <InMalayalam>} );
ok( "\x{0D00}" =~ m/^<[A]+<InMalayalam>>$/, q{Match compound <InMalayalam>} );
ok( "\x{0D00}" !~ m/^<-<InMalayalam>>$/, q{Don't match externally inverted <InMalayalam>} );
ok( "\x{0D00}" !~ m/^<[A]-<InMalayalam>>$/, q{Don't match compound inverted <InMalayalam>} );
ok( "\x{0D00}" !~ m/^<+<-InMalayalam>>$/, q{Don't match internally inverted <InMalayalam>} );
ok( "\x{C011}" !~ m/^<+<InMalayalam>>$/, q{Don't match unrelated <InMalayalam>} );
ok( "\x{C011}" =~ m/^<-<InMalayalam>>$/, q{Match unrelated externally inverted <InMalayalam>} );
ok( "\x{C011}" =~ m/^<+<-InMalayalam>>$/, q{Match unrelated internally inverted <InMalayalam>} );
ok( "\x{C011}\x{0D00}" =~ m/<+<InMalayalam>>/, q{Match unanchored <InMalayalam>} );
# InMathematicalAlphanumericSymbols
ok( "\x{73FA}" !~ m/^<+<InMathematicalAlphanumericSymbols>>$/, q{Don't match unrelated <InMathematicalAlphanumericSymbols>} );
ok( "\x{73FA}" =~ m/^<-<InMathematicalAlphanumericSymbols>>$/, q{Match unrelated externally inverted <InMathematicalAlphanumericSymbols>} );
ok( "\x{73FA}" =~ m/^<+<-InMathematicalAlphanumericSymbols>>$/, q{Match unrelated internally inverted <InMathematicalAlphanumericSymbols>} );
# InMathematicalOperators
ok( "\N{FOR ALL}" =~ m/^<+<InMathematicalOperators>>$/, q{Match <InMathematicalOperators>} );
ok( "\N{FOR ALL}" =~ m/^<[A]+<InMathematicalOperators>>$/, q{Match compound <InMathematicalOperators>} );
ok( "\N{FOR ALL}" !~ m/^<-<InMathematicalOperators>>$/, q{Don't match externally inverted <InMathematicalOperators>} );
ok( "\N{FOR ALL}" !~ m/^<[A]-<InMathematicalOperators>>$/, q{Don't match compound inverted <InMathematicalOperators>} );
ok( "\N{FOR ALL}" !~ m/^<+<-InMathematicalOperators>>$/, q{Don't match internally inverted <InMathematicalOperators>} );
ok( "\x{B389}" !~ m/^<+<InMathematicalOperators>>$/, q{Don't match unrelated <InMathematicalOperators>} );
ok( "\x{B389}" =~ m/^<-<InMathematicalOperators>>$/, q{Match unrelated externally inverted <InMathematicalOperators>} );
ok( "\x{B389}" =~ m/^<+<-InMathematicalOperators>>$/, q{Match unrelated internally inverted <InMathematicalOperators>} );
ok( "\x{B389}\N{FOR ALL}" =~ m/<+<InMathematicalOperators>>/, q{Match unanchored <InMathematicalOperators>} );
# InMiscellaneousMathematicalSymbolsA
ok( "\x{27C0}" =~ m/^<+<InMiscellaneousMathematicalSymbolsA>>$/, q{Match <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{27C0}" =~ m/^<[A]+<InMiscellaneousMathematicalSymbolsA>>$/, q{Match compound <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{27C0}" !~ m/^<-<InMiscellaneousMathematicalSymbolsA>>$/, q{Don't match externally inverted <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{27C0}" !~ m/^<[A]-<InMiscellaneousMathematicalSymbolsA>>$/, q{Don't match compound inverted <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{27C0}" !~ m/^<+<-InMiscellaneousMathematicalSymbolsA>>$/, q{Don't match internally inverted <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{AAB2}" !~ m/^<+<InMiscellaneousMathematicalSymbolsA>>$/, q{Don't match unrelated <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{AAB2}" =~ m/^<-<InMiscellaneousMathematicalSymbolsA>>$/, q{Match unrelated externally inverted <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{AAB2}" =~ m/^<+<-InMiscellaneousMathematicalSymbolsA>>$/, q{Match unrelated internally inverted <InMiscellaneousMathematicalSymbolsA>} );
ok( "\x{AAB2}\x{27C0}" =~ m/<+<InMiscellaneousMathematicalSymbolsA>>/, q{Match unanchored <InMiscellaneousMathematicalSymbolsA>} );
# InMiscellaneousMathematicalSymbolsB
ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" =~ m/^<+<InMiscellaneousMathematicalSymbolsB>>$/, q{Match <InMiscellaneousMathematicalSymbolsB>} );
ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" =~ m/^<[A]+<InMiscellaneousMathematicalSymbolsB>>$/, q{Match compound <InMiscellaneousMathematicalSymbolsB>} );
ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" !~ m/^<-<InMiscellaneousMathematicalSymbolsB>>$/, q{Don't match externally inverted <InMiscellaneousMathematicalSymbolsB>} );
ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" !~ m/^<[A]-<InMiscellaneousMathematicalSymbolsB>>$/, q{Don't match compound inverted <InMiscellaneousMathematicalSymbolsB>} );
ok( "\N{TRIPLE VERTICAL BAR DELIMITER}" !~ m/^<+<-InMiscellaneousMathematicalSymbolsB>>$/, q{Don't match internally inverted <InMiscellaneousMathematicalSymbolsB>} );
ok( "\x{5793}" !~ m/^<+<InMiscellaneousMathematicalSymbolsB>>$/, q{Don't match unrelated <InMiscellaneousMathematicalSymbolsB>} );
ok( "\x{5793}" =~ m/^<-<InMiscellaneousMathematicalSymbolsB>>$/, q{Match unrelated externally inverted <InMiscellaneousMathematicalSymbolsB>} );
ok( "\x{5793}" =~ m/^<+<-InMiscellaneousMathematicalSymbolsB>>$/, q{Match unrelated internally inverted <InMiscellaneousMathematicalSymbolsB>} );
ok( "\x{5793}\N{TRIPLE VERTICAL BAR DELIMITER}" =~ m/<+<InMiscellaneousMathematicalSymbolsB>>/, q{Match unanchored <InMiscellaneousMathematicalSymbolsB>} );
# InMiscellaneousSymbols
ok( "\N{BLACK SUN WITH RAYS}" =~ m/^<+<InMiscellaneousSymbols>>$/, q{Match <InMiscellaneousSymbols>} );
ok( "\N{BLACK SUN WITH RAYS}" =~ m/^<[A]+<InMiscellaneousSymbols>>$/, q{Match compound <InMiscellaneousSymbols>} );
ok( "\N{BLACK SUN WITH RAYS}" !~ m/^<-<InMiscellaneousSymbols>>$/, q{Don't match externally inverted <InMiscellaneousSymbols>} );
ok( "\N{BLACK SUN WITH RAYS}" !~ m/^<[A]-<InMiscellaneousSymbols>>$/, q{Don't match compound inverted <InMiscellaneousSymbols>} );
ok( "\N{BLACK SUN WITH RAYS}" !~ m/^<+<-InMiscellaneousSymbols>>$/, q{Don't match internally inverted <InMiscellaneousSymbols>} );
ok( "\x{39D9}" !~ m/^<+<InMiscellaneousSymbols>>$/, q{Don't match unrelated <InMiscellaneousSymbols>} );
ok( "\x{39D9}" =~ m/^<-<InMiscellaneousSymbols>>$/, q{Match unrelated externally inverted <InMiscellaneousSymbols>} );
ok( "\x{39D9}" =~ m/^<+<-InMiscellaneousSymbols>>$/, q{Match unrelated internally inverted <InMiscellaneousSymbols>} );
ok( "\x{39D9}\N{BLACK SUN WITH RAYS}" =~ m/<+<InMiscellaneousSymbols>>/, q{Match unanchored <InMiscellaneousSymbols>} );
# InMiscellaneousTechnical
ok( "\N{DIAMETER SIGN}" =~ m/^<+<InMiscellaneousTechnical>>$/, q{Match <InMiscellaneousTechnical>} );
ok( "\N{DIAMETER SIGN}" =~ m/^<[A]+<InMiscellaneousTechnical>>$/, q{Match compound <InMiscellaneousTechnical>} );
ok( "\N{DIAMETER SIGN}" !~ m/^<-<InMiscellaneousTechnical>>$/, q{Don't match externally inverted <InMiscellaneousTechnical>} );
ok( "\N{DIAMETER SIGN}" !~ m/^<[A]-<InMiscellaneousTechnical>>$/, q{Don't match compound inverted <InMiscellaneousTechnical>} );
ok( "\N{DIAMETER SIGN}" !~ m/^<+<-InMiscellaneousTechnical>>$/, q{Don't match internally inverted <InMiscellaneousTechnical>} );
ok( "\x{528A}" !~ m/^<+<InMiscellaneousTechnical>>$/, q{Don't match unrelated <InMiscellaneousTechnical>} );
ok( "\x{528A}" =~ m/^<-<InMiscellaneousTechnical>>$/, q{Match unrelated externally inverted <InMiscellaneousTechnical>} );
ok( "\x{528A}" =~ m/^<+<-InMiscellaneousTechnical>>$/, q{Match unrelated internally inverted <InMiscellaneousTechnical>} );
ok( "\x{528A}\N{DIAMETER SIGN}" =~ m/<+<InMiscellaneousTechnical>>/, q{Match unanchored <InMiscellaneousTechnical>} );
# InMongolian
ok( "\N{MONGOLIAN BIRGA}" =~ m/^<+<InMongolian>>$/, q{Match <InMongolian>} );
ok( "\N{MONGOLIAN BIRGA}" =~ m/^<[A]+<InMongolian>>$/, q{Match compound <InMongolian>} );
ok( "\N{MONGOLIAN BIRGA}" !~ m/^<-<InMongolian>>$/, q{Don't match externally inverted <InMongolian>} );
ok( "\N{MONGOLIAN BIRGA}" !~ m/^<[A]-<InMongolian>>$/, q{Don't match compound inverted <InMongolian>} );
ok( "\N{MONGOLIAN BIRGA}" !~ m/^<+<-InMongolian>>$/, q{Don't match internally inverted <InMongolian>} );
ok( "\x{3985}" !~ m/^<+<InMongolian>>$/, q{Don't match unrelated <InMongolian>} );
ok( "\x{3985}" =~ m/^<-<InMongolian>>$/, q{Match unrelated externally inverted <InMongolian>} );
ok( "\x{3985}" =~ m/^<+<-InMongolian>>$/, q{Match unrelated internally inverted <InMongolian>} );
ok( "\x{3985}\N{MONGOLIAN BIRGA}" =~ m/<+<InMongolian>>/, q{Match unanchored <InMongolian>} );
# InMusicalSymbols
ok( "\x{7A59}" !~ m/^<+<InMusicalSymbols>>$/, q{Don't match unrelated <InMusicalSymbols>} );
ok( "\x{7A59}" =~ m/^<-<InMusicalSymbols>>$/, q{Match unrelated externally inverted <InMusicalSymbols>} );
ok( "\x{7A59}" =~ m/^<+<-InMusicalSymbols>>$/, q{Match unrelated internally inverted <InMusicalSymbols>} );
# InMyanmar
ok( "\N{MYANMAR LETTER KA}" =~ m/^<+<InMyanmar>>$/, q{Match <InMyanmar>} );
ok( "\N{MYANMAR LETTER KA}" =~ m/^<[A]+<InMyanmar>>$/, q{Match compound <InMyanmar>} );
ok( "\N{MYANMAR LETTER KA}" !~ m/^<-<InMyanmar>>$/, q{Don't match externally inverted <InMyanmar>} );
ok( "\N{MYANMAR LETTER KA}" !~ m/^<[A]-<InMyanmar>>$/, q{Don't match compound inverted <InMyanmar>} );
ok( "\N{MYANMAR LETTER KA}" !~ m/^<+<-InMyanmar>>$/, q{Don't match internally inverted <InMyanmar>} );
ok( "\x{5698}" !~ m/^<+<InMyanmar>>$/, q{Don't match unrelated <InMyanmar>} );
ok( "\x{5698}" =~ m/^<-<InMyanmar>>$/, q{Match unrelated externally inverted <InMyanmar>} );
ok( "\x{5698}" =~ m/^<+<-InMyanmar>>$/, q{Match unrelated internally inverted <InMyanmar>} );
ok( "\x{5698}\N{MYANMAR LETTER KA}" =~ m/<+<InMyanmar>>/, q{Match unanchored <InMyanmar>} );
# InNumberForms
ok( "\x{2150}" =~ m/^<+<InNumberForms>>$/, q{Match <InNumberForms>} );
ok( "\x{2150}" =~ m/^<[A]+<InNumberForms>>$/, q{Match compound <InNumberForms>} );
ok( "\x{2150}" !~ m/^<-<InNumberForms>>$/, q{Don't match externally inverted <InNumberForms>} );
ok( "\x{2150}" !~ m/^<[A]-<InNumberForms>>$/, q{Don't match compound inverted <InNumberForms>} );
ok( "\x{2150}" !~ m/^<+<-InNumberForms>>$/, q{Don't match internally inverted <InNumberForms>} );
ok( "\x{C41B}" !~ m/^<+<InNumberForms>>$/, q{Don't match unrelated <InNumberForms>} );
ok( "\x{C41B}" =~ m/^<-<InNumberForms>>$/, q{Match unrelated externally inverted <InNumberForms>} );
ok( "\x{C41B}" =~ m/^<+<-InNumberForms>>$/, q{Match unrelated internally inverted <InNumberForms>} );
ok( "\x{C41B}\x{2150}" =~ m/<+<InNumberForms>>/, q{Match unanchored <InNumberForms>} );
# InOgham
ok( "\N{OGHAM SPACE MARK}" =~ m/^<+<InOgham>>$/, q{Match <InOgham>} );
ok( "\N{OGHAM SPACE MARK}" =~ m/^<[A]+<InOgham>>$/, q{Match compound <InOgham>} );
ok( "\N{OGHAM SPACE MARK}" !~ m/^<-<InOgham>>$/, q{Don't match externally inverted <InOgham>} );
ok( "\N{OGHAM SPACE MARK}" !~ m/^<[A]-<InOgham>>$/, q{Don't match compound inverted <InOgham>} );
ok( "\N{OGHAM SPACE MARK}" !~ m/^<+<-InOgham>>$/, q{Don't match internally inverted <InOgham>} );
ok( "\x{2C8C}" !~ m/^<+<InOgham>>$/, q{Don't match unrelated <InOgham>} );
ok( "\x{2C8C}" =~ m/^<-<InOgham>>$/, q{Match unrelated externally inverted <InOgham>} );
ok( "\x{2C8C}" =~ m/^<+<-InOgham>>$/, q{Match unrelated internally inverted <InOgham>} );
ok( "\x{2C8C}\N{OGHAM SPACE MARK}" =~ m/<+<InOgham>>/, q{Match unanchored <InOgham>} );
# InOldItalic
ok( "\N{YI SYLLABLE MGAT}" !~ m/^<+<InOldItalic>>$/, q{Don't match unrelated <InOldItalic>} );
ok( "\N{YI SYLLABLE MGAT}" =~ m/^<-<InOldItalic>>$/, q{Match unrelated externally inverted <InOldItalic>} );
ok( "\N{YI SYLLABLE MGAT}" =~ m/^<+<-InOldItalic>>$/, q{Match unrelated internally inverted <InOldItalic>} );
# InOpticalCharacterRecognition
ok( "\N{OCR HOOK}" =~ m/^<+<InOpticalCharacterRecognition>>$/, q{Match <InOpticalCharacterRecognition>} );
ok( "\N{OCR HOOK}" =~ m/^<[A]+<InOpticalCharacterRecognition>>$/, q{Match compound <InOpticalCharacterRecognition>} );
ok( "\N{OCR HOOK}" !~ m/^<-<InOpticalCharacterRecognition>>$/, q{Don't match externally inverted <InOpticalCharacterRecognition>} );
ok( "\N{OCR HOOK}" !~ m/^<[A]-<InOpticalCharacterRecognition>>$/, q{Don't match compound inverted <InOpticalCharacterRecognition>} );
ok( "\N{OCR HOOK}" !~ m/^<+<-InOpticalCharacterRecognition>>$/, q{Don't match internally inverted <InOpticalCharacterRecognition>} );
ok( "\x{CB83}" !~ m/^<+<InOpticalCharacterRecognition>>$/, q{Don't match unrelated <InOpticalCharacterRecognition>} );
ok( "\x{CB83}" =~ m/^<-<InOpticalCharacterRecognition>>$/, q{Match unrelated externally inverted <InOpticalCharacterRecognition>} );
ok( "\x{CB83}" =~ m/^<+<-InOpticalCharacterRecognition>>$/, q{Match unrelated internally inverted <InOpticalCharacterRecognition>} );
ok( "\x{CB83}\N{OCR HOOK}" =~ m/<+<InOpticalCharacterRecognition>>/, q{Match unanchored <InOpticalCharacterRecognition>} );
# InOriya
ok( "\x{0B00}" =~ m/^<+<InOriya>>$/, q{Match <InOriya>} );
ok( "\x{0B00}" =~ m/^<[A]+<InOriya>>$/, q{Match compound <InOriya>} );
ok( "\x{0B00}" !~ m/^<-<InOriya>>$/, q{Don't match externally inverted <InOriya>} );
ok( "\x{0B00}" !~ m/^<[A]-<InOriya>>$/, q{Don't match compound inverted <InOriya>} );
ok( "\x{0B00}" !~ m/^<+<-InOriya>>$/, q{Don't match internally inverted <InOriya>} );
ok( "\x{6CE7}" !~ m/^<+<InOriya>>$/, q{Don't match unrelated <InOriya>} );
ok( "\x{6CE7}" =~ m/^<-<InOriya>>$/, q{Match unrelated externally inverted <InOriya>} );
ok( "\x{6CE7}" =~ m/^<+<-InOriya>>$/, q{Match unrelated internally inverted <InOriya>} );
ok( "\x{6CE7}\x{0B00}" =~ m/<+<InOriya>>/, q{Match unanchored <InOriya>} );
# InPrivateUseArea
ok( "\x{7662}" !~ m/^<+<InPrivateUseArea>>$/, q{Don't match unrelated <InPrivateUseArea>} );
ok( "\x{7662}" =~ m/^<-<InPrivateUseArea>>$/, q{Match unrelated externally inverted <InPrivateUseArea>} );
ok( "\x{7662}" =~ m/^<+<-InPrivateUseArea>>$/, q{Match unrelated internally inverted <InPrivateUseArea>} );
# InRunic
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/^<+<InRunic>>$/, q{Match <InRunic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/^<[A]+<InRunic>>$/, q{Match compound <InRunic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<-<InRunic>>$/, q{Don't match externally inverted <InRunic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<[A]-<InRunic>>$/, q{Don't match compound inverted <InRunic>} );
ok( "\N{RUNIC LETTER FEHU FEOH FE F}" !~ m/^<+<-InRunic>>$/, q{Don't match internally inverted <InRunic>} );
ok( "\x{47A1}" !~ m/^<+<InRunic>>$/, q{Don't match unrelated <InRunic>} );
ok( "\x{47A1}" =~ m/^<-<InRunic>>$/, q{Match unrelated externally inverted <InRunic>} );
ok( "\x{47A1}" =~ m/^<+<-InRunic>>$/, q{Match unrelated internally inverted <InRunic>} );
ok( "\x{47A1}\N{RUNIC LETTER FEHU FEOH FE F}" =~ m/<+<InRunic>>/, q{Match unanchored <InRunic>} );
# InSinhala
ok( "\x{0D80}" =~ m/^<+<InSinhala>>$/, q{Match <InSinhala>} );
ok( "\x{0D80}" =~ m/^<[A]+<InSinhala>>$/, q{Match compound <InSinhala>} );
ok( "\x{0D80}" !~ m/^<-<InSinhala>>$/, q{Don't match externally inverted <InSinhala>} );
ok( "\x{0D80}" !~ m/^<[A]-<InSinhala>>$/, q{Don't match compound inverted <InSinhala>} );
ok( "\x{0D80}" !~ m/^<+<-InSinhala>>$/, q{Don't match internally inverted <InSinhala>} );
ok( "\x{1C39}" !~ m/^<+<InSinhala>>$/, q{Don't match unrelated <InSinhala>} );
ok( "\x{1C39}" =~ m/^<-<InSinhala>>$/, q{Match unrelated externally inverted <InSinhala>} );
ok( "\x{1C39}" =~ m/^<+<-InSinhala>>$/, q{Match unrelated internally inverted <InSinhala>} );
ok( "\x{1C39}\x{0D80}" =~ m/<+<InSinhala>>/, q{Match unanchored <InSinhala>} );
# InSmallFormVariants
ok( "\N{YI SYLLABLE FAP}" !~ m/^<+<InSmallFormVariants>>$/, q{Don't match unrelated <InSmallFormVariants>} );
ok( "\N{YI SYLLABLE FAP}" =~ m/^<-<InSmallFormVariants>>$/, q{Match unrelated externally inverted <InSmallFormVariants>} );
ok( "\N{YI SYLLABLE FAP}" =~ m/^<+<-InSmallFormVariants>>$/, q{Match unrelated internally inverted <InSmallFormVariants>} );
# InSpacingModifierLetters
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<+<InSpacingModifierLetters>>$/, q{Match <InSpacingModifierLetters>} );
ok( "\N{MODIFIER LETTER SMALL H}" =~ m/^<[A]+<InSpacingModifierLetters>>$/, q{Match compound <InSpacingModifierLetters>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<-<InSpacingModifierLetters>>$/, q{Don't match externally inverted <InSpacingModifierLetters>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<[A]-<InSpacingModifierLetters>>$/, q{Don't match compound inverted <InSpacingModifierLetters>} );
ok( "\N{MODIFIER LETTER SMALL H}" !~ m/^<+<-InSpacingModifierLetters>>$/, q{Don't match internally inverted <InSpacingModifierLetters>} );
ok( "\x{08E8}" !~ m/^<+<InSpacingModifierLetters>>$/, q{Don't match unrelated <InSpacingModifierLetters>} );
ok( "\x{08E8}" =~ m/^<-<InSpacingModifierLetters>>$/, q{Match unrelated externally inverted <InSpacingModifierLetters>} );
ok( "\x{08E8}" =~ m/^<+<-InSpacingModifierLetters>>$/, q{Match unrelated internally inverted <InSpacingModifierLetters>} );
ok( "\x{08E8}\N{MODIFIER LETTER SMALL H}" =~ m/<+<InSpacingModifierLetters>>/, q{Match unanchored <InSpacingModifierLetters>} );
# InSpecials
ok( "\x{0C7E}" !~ m/^<+<InSpecials>>$/, q{Don't match unrelated <InSpecials>} );
ok( "\x{0C7E}" =~ m/^<-<InSpecials>>$/, q{Match unrelated externally inverted <InSpecials>} );
ok( "\x{0C7E}" =~ m/^<+<-InSpecials>>$/, q{Match unrelated internally inverted <InSpecials>} );
# InSuperscriptsAndSubscripts
ok( "\N{SUPERSCRIPT ZERO}" =~ m/^<+<InSuperscriptsAndSubscripts>>$/, q{Match <InSuperscriptsAndSubscripts>} );
ok( "\N{SUPERSCRIPT ZERO}" =~ m/^<[A]+<InSuperscriptsAndSubscripts>>$/, q{Match compound <InSuperscriptsAndSubscripts>} );
ok( "\N{SUPERSCRIPT ZERO}" !~ m/^<-<InSuperscriptsAndSubscripts>>$/, q{Don't match externally inverted <InSuperscriptsAndSubscripts>} );
ok( "\N{SUPERSCRIPT ZERO}" !~ m/^<[A]-<InSuperscriptsAndSubscripts>>$/, q{Don't match compound inverted <InSuperscriptsAndSubscripts>} );
ok( "\N{SUPERSCRIPT ZERO}" !~ m/^<+<-InSuperscriptsAndSubscripts>>$/, q{Don't match internally inverted <InSuperscriptsAndSubscripts>} );
ok( "\x{D378}" !~ m/^<+<InSuperscriptsAndSubscripts>>$/, q{Don't match unrelated <InSuperscriptsAndSubscripts>} );
ok( "\x{D378}" =~ m/^<-<InSuperscriptsAndSubscripts>>$/, q{Match unrelated externally inverted <InSuperscriptsAndSubscripts>} );
ok( "\x{D378}" =~ m/^<+<-InSuperscriptsAndSubscripts>>$/, q{Match unrelated internally inverted <InSuperscriptsAndSubscripts>} );
ok( "\x{D378}\N{SUPERSCRIPT ZERO}" =~ m/<+<InSuperscriptsAndSubscripts>>/, q{Match unanchored <InSuperscriptsAndSubscripts>} );
# InSupplementalArrowsA
ok( "\N{UPWARDS QUADRUPLE ARROW}" =~ m/^<+<InSupplementalArrowsA>>$/, q{Match <InSupplementalArrowsA>} );
ok( "\N{UPWARDS QUADRUPLE ARROW}" =~ m/^<[A]+<InSupplementalArrowsA>>$/, q{Match compound <InSupplementalArrowsA>} );
ok( "\N{UPWARDS QUADRUPLE ARROW}" !~ m/^<-<InSupplementalArrowsA>>$/, q{Don't match externally inverted <InSupplementalArrowsA>} );
ok( "\N{UPWARDS QUADRUPLE ARROW}" !~ m/^<[A]-<InSupplementalArrowsA>>$/, q{Don't match compound inverted <InSupplementalArrowsA>} );
ok( "\N{UPWARDS QUADRUPLE ARROW}" !~ m/^<+<-InSupplementalArrowsA>>$/, q{Don't match internally inverted <InSupplementalArrowsA>} );
ok( "\N{LIMBU DIGIT SEVEN}" !~ m/^<+<InSupplementalArrowsA>>$/, q{Don't match unrelated <InSupplementalArrowsA>} );
ok( "\N{LIMBU DIGIT SEVEN}" =~ m/^<-<InSupplementalArrowsA>>$/, q{Match unrelated externally inverted <InSupplementalArrowsA>} );
ok( "\N{LIMBU DIGIT SEVEN}" =~ m/^<+<-InSupplementalArrowsA>>$/, q{Match unrelated internally inverted <InSupplementalArrowsA>} );
ok( "\N{LIMBU DIGIT SEVEN}\N{UPWARDS QUADRUPLE ARROW}" =~ m/<+<InSupplementalArrowsA>>/, q{Match unanchored <InSupplementalArrowsA>} );
# InSupplementalArrowsB
ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" =~ m/^<+<InSupplementalArrowsB>>$/, q{Match <InSupplementalArrowsB>} );
ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" =~ m/^<[A]+<InSupplementalArrowsB>>$/, q{Match compound <InSupplementalArrowsB>} );
ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" !~ m/^<-<InSupplementalArrowsB>>$/, q{Don't match externally inverted <InSupplementalArrowsB>} );
ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" !~ m/^<[A]-<InSupplementalArrowsB>>$/, q{Don't match compound inverted <InSupplementalArrowsB>} );
ok( "\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" !~ m/^<+<-InSupplementalArrowsB>>$/, q{Don't match internally inverted <InSupplementalArrowsB>} );
ok( "\x{1D7D}" !~ m/^<+<InSupplementalArrowsB>>$/, q{Don't match unrelated <InSupplementalArrowsB>} );
ok( "\x{1D7D}" =~ m/^<-<InSupplementalArrowsB>>$/, q{Match unrelated externally inverted <InSupplementalArrowsB>} );
ok( "\x{1D7D}" =~ m/^<+<-InSupplementalArrowsB>>$/, q{Match unrelated internally inverted <InSupplementalArrowsB>} );
ok( "\x{1D7D}\N{RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE}" =~ m/<+<InSupplementalArrowsB>>/, q{Match unanchored <InSupplementalArrowsB>} );
# InSupplementalMathematicalOperators
ok( "\N{N-ARY CIRCLED DOT OPERATOR}" =~ m/^<+<InSupplementalMathematicalOperators>>$/, q{Match <InSupplementalMathematicalOperators>} );
ok( "\N{N-ARY CIRCLED DOT OPERATOR}" =~ m/^<[A]+<InSupplementalMathematicalOperators>>$/, q{Match compound <InSupplementalMathematicalOperators>} );
ok( "\N{N-ARY CIRCLED DOT OPERATOR}" !~ m/^<-<InSupplementalMathematicalOperators>>$/, q{Don't match externally inverted <InSupplementalMathematicalOperators>} );
ok( "\N{N-ARY CIRCLED DOT OPERATOR}" !~ m/^<[A]-<InSupplementalMathematicalOperators>>$/, q{Don't match compound inverted <InSupplementalMathematicalOperators>} );
ok( "\N{N-ARY CIRCLED DOT OPERATOR}" !~ m/^<+<-InSupplementalMathematicalOperators>>$/, q{Don't match internally inverted <InSupplementalMathematicalOperators>} );
ok( "\N{YI SYLLABLE TAX}" !~ m/^<+<InSupplementalMathematicalOperators>>$/, q{Don't match unrelated <InSupplementalMathematicalOperators>} );
ok( "\N{YI SYLLABLE TAX}" =~ m/^<-<InSupplementalMathematicalOperators>>$/, q{Match unrelated externally inverted <InSupplementalMathematicalOperators>} );
ok( "\N{YI SYLLABLE TAX}" =~ m/^<+<-InSupplementalMathematicalOperators>>$/, q{Match unrelated internally inverted <InSupplementalMathematicalOperators>} );
ok( "\N{YI SYLLABLE TAX}\N{N-ARY CIRCLED DOT OPERATOR}" =~ m/<+<InSupplementalMathematicalOperators>>/, q{Match unanchored <InSupplementalMathematicalOperators>} );
# InSupplementaryPrivateUseAreaA
ok( "\N{TIBETAN LETTER PHA}" !~ m/^<+<InSupplementaryPrivateUseAreaA>>$/, q{Don't match unrelated <InSupplementaryPrivateUseAreaA>} );
ok( "\N{TIBETAN LETTER PHA}" =~ m/^<-<InSupplementaryPrivateUseAreaA>>$/, q{Match unrelated externally inverted <InSupplementaryPrivateUseAreaA>} );
ok( "\N{TIBETAN LETTER PHA}" =~ m/^<+<-InSupplementaryPrivateUseAreaA>>$/, q{Match unrelated internally inverted <InSupplementaryPrivateUseAreaA>} );
# InSupplementaryPrivateUseAreaB
ok( "\x{7E65}" !~ m/^<+<InSupplementaryPrivateUseAreaB>>$/, q{Don't match unrelated <InSupplementaryPrivateUseAreaB>} );
ok( "\x{7E65}" =~ m/^<-<InSupplementaryPrivateUseAreaB>>$/, q{Match unrelated externally inverted <InSupplementaryPrivateUseAreaB>} );
ok( "\x{7E65}" =~ m/^<+<-InSupplementaryPrivateUseAreaB>>$/, q{Match unrelated internally inverted <InSupplementaryPrivateUseAreaB>} );
# InSyriac
ok( "\N{SYRIAC END OF PARAGRAPH}" =~ m/^<+<InSyriac>>$/, q{Match <InSyriac>} );
ok( "\N{SYRIAC END OF PARAGRAPH}" =~ m/^<[A]+<InSyriac>>$/, q{Match compound <InSyriac>} );
ok( "\N{SYRIAC END OF PARAGRAPH}" !~ m/^<-<InSyriac>>$/, q{Don't match externally inverted <InSyriac>} );
ok( "\N{SYRIAC END OF PARAGRAPH}" !~ m/^<[A]-<InSyriac>>$/, q{Don't match compound inverted <InSyriac>} );
ok( "\N{SYRIAC END OF PARAGRAPH}" !~ m/^<+<-InSyriac>>$/, q{Don't match internally inverted <InSyriac>} );
ok( "\x{CA1C}" !~ m/^<+<InSyriac>>$/, q{Don't match unrelated <InSyriac>} );
ok( "\x{CA1C}" =~ m/^<-<InSyriac>>$/, q{Match unrelated externally inverted <InSyriac>} );
ok( "\x{CA1C}" =~ m/^<+<-InSyriac>>$/, q{Match unrelated internally inverted <InSyriac>} );
ok( "\x{CA1C}\N{SYRIAC END OF PARAGRAPH}" =~ m/<+<InSyriac>>/, q{Match unanchored <InSyriac>} );
# InTagalog
ok( "\N{TAGALOG LETTER A}" =~ m/^<+<InTagalog>>$/, q{Match <InTagalog>} );
ok( "\N{TAGALOG LETTER A}" =~ m/^<[A]+<InTagalog>>$/, q{Match compound <InTagalog>} );
ok( "\N{TAGALOG LETTER A}" !~ m/^<-<InTagalog>>$/, q{Don't match externally inverted <InTagalog>} );
ok( "\N{TAGALOG LETTER A}" !~ m/^<[A]-<InTagalog>>$/, q{Don't match compound inverted <InTagalog>} );
ok( "\N{TAGALOG LETTER A}" !~ m/^<+<-InTagalog>>$/, q{Don't match internally inverted <InTagalog>} );
ok( "\x{D49E}" !~ m/^<+<InTagalog>>$/, q{Don't match unrelated <InTagalog>} );
ok( "\x{D49E}" =~ m/^<-<InTagalog>>$/, q{Match unrelated externally inverted <InTagalog>} );
ok( "\x{D49E}" =~ m/^<+<-InTagalog>>$/, q{Match unrelated internally inverted <InTagalog>} );
ok( "\x{D49E}\N{TAGALOG LETTER A}" =~ m/<+<InTagalog>>/, q{Match unanchored <InTagalog>} );
# InTagbanwa
ok( "\N{TAGBANWA LETTER A}" =~ m/^<+<InTagbanwa>>$/, q{Match <InTagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" =~ m/^<[A]+<InTagbanwa>>$/, q{Match compound <InTagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" !~ m/^<-<InTagbanwa>>$/, q{Don't match externally inverted <InTagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" !~ m/^<[A]-<InTagbanwa>>$/, q{Don't match compound inverted <InTagbanwa>} );
ok( "\N{TAGBANWA LETTER A}" !~ m/^<+<-InTagbanwa>>$/, q{Don't match internally inverted <InTagbanwa>} );
ok( "\x{AFAA}" !~ m/^<+<InTagbanwa>>$/, q{Don't match unrelated <InTagbanwa>} );
ok( "\x{AFAA}" =~ m/^<-<InTagbanwa>>$/, q{Match unrelated externally inverted <InTagbanwa>} );
ok( "\x{AFAA}" =~ m/^<+<-InTagbanwa>>$/, q{Match unrelated internally inverted <InTagbanwa>} );
ok( "\x{AFAA}\N{TAGBANWA LETTER A}" =~ m/<+<InTagbanwa>>/, q{Match unanchored <InTagbanwa>} );
# InTags
ok( "\x{CA38}" !~ m/^<+<InTags>>$/, q{Don't match unrelated <InTags>} );
ok( "\x{CA38}" =~ m/^<-<InTags>>$/, q{Match unrelated externally inverted <InTags>} );
ok( "\x{CA38}" =~ m/^<+<-InTags>>$/, q{Match unrelated internally inverted <InTags>} );
# InTamil
ok( "\x{0B80}" =~ m/^<+<InTamil>>$/, q{Match <InTamil>} );
ok( "\x{0B80}" =~ m/^<[A]+<InTamil>>$/, q{Match compound <InTamil>} );
ok( "\x{0B80}" !~ m/^<-<InTamil>>$/, q{Don't match externally inverted <InTamil>} );
ok( "\x{0B80}" !~ m/^<[A]-<InTamil>>$/, q{Don't match compound inverted <InTamil>} );
ok( "\x{0B80}" !~ m/^<+<-InTamil>>$/, q{Don't match internally inverted <InTamil>} );
ok( "\x{D44B}" !~ m/^<+<InTamil>>$/, q{Don't match unrelated <InTamil>} );
ok( "\x{D44B}" =~ m/^<-<InTamil>>$/, q{Match unrelated externally inverted <InTamil>} );
ok( "\x{D44B}" =~ m/^<+<-InTamil>>$/, q{Match unrelated internally inverted <InTamil>} );
ok( "\x{D44B}\x{0B80}" =~ m/<+<InTamil>>/, q{Match unanchored <InTamil>} );
# InTelugu
ok( "\x{0C00}" =~ m/^<+<InTelugu>>$/, q{Match <InTelugu>} );
ok( "\x{0C00}" =~ m/^<[A]+<InTelugu>>$/, q{Match compound <InTelugu>} );
ok( "\x{0C00}" !~ m/^<-<InTelugu>>$/, q{Don't match externally inverted <InTelugu>} );
ok( "\x{0C00}" !~ m/^<[A]-<InTelugu>>$/, q{Don't match compound inverted <InTelugu>} );
ok( "\x{0C00}" !~ m/^<+<-InTelugu>>$/, q{Don't match internally inverted <InTelugu>} );
ok( "\x{D3E7}" !~ m/^<+<InTelugu>>$/, q{Don't match unrelated <InTelugu>} );
ok( "\x{D3E7}" =~ m/^<-<InTelugu>>$/, q{Match unrelated externally inverted <InTelugu>} );
ok( "\x{D3E7}" =~ m/^<+<-InTelugu>>$/, q{Match unrelated internally inverted <InTelugu>} );
ok( "\x{D3E7}\x{0C00}" =~ m/<+<InTelugu>>/, q{Match unanchored <InTelugu>} );
# InThaana
ok( "\N{THAANA LETTER HAA}" =~ m/^<+<InThaana>>$/, q{Match <InThaana>} );
ok( "\N{THAANA LETTER HAA}" =~ m/^<[A]+<InThaana>>$/, q{Match compound <InThaana>} );
ok( "\N{THAANA LETTER HAA}" !~ m/^<-<InThaana>>$/, q{Don't match externally inverted <InThaana>} );
ok( "\N{THAANA LETTER HAA}" !~ m/^<[A]-<InThaana>>$/, q{Don't match compound inverted <InThaana>} );
ok( "\N{THAANA LETTER HAA}" !~ m/^<+<-InThaana>>$/, q{Don't match internally inverted <InThaana>} );
ok( "\N{YI SYLLABLE QIT}" !~ m/^<+<InThaana>>$/, q{Don't match unrelated <InThaana>} );
ok( "\N{YI SYLLABLE QIT}" =~ m/^<-<InThaana>>$/, q{Match unrelated externally inverted <InThaana>} );
ok( "\N{YI SYLLABLE QIT}" =~ m/^<+<-InThaana>>$/, q{Match unrelated internally inverted <InThaana>} );
ok( "\N{YI SYLLABLE QIT}\N{THAANA LETTER HAA}" =~ m/<+<InThaana>>/, q{Match unanchored <InThaana>} );
# InThai
ok( "\x{0E00}" =~ m/^<+<InThai>>$/, q{Match <InThai>} );
ok( "\x{0E00}" =~ m/^<[A]+<InThai>>$/, q{Match compound <InThai>} );
ok( "\x{0E00}" !~ m/^<-<InThai>>$/, q{Don't match externally inverted <InThai>} );
ok( "\x{0E00}" !~ m/^<[A]-<InThai>>$/, q{Don't match compound inverted <InThai>} );
ok( "\x{0E00}" !~ m/^<+<-InThai>>$/, q{Don't match internally inverted <InThai>} );
ok( "\x{BCED}" !~ m/^<+<InThai>>$/, q{Don't match unrelated <InThai>} );
ok( "\x{BCED}" =~ m/^<-<InThai>>$/, q{Match unrelated externally inverted <InThai>} );
ok( "\x{BCED}" =~ m/^<+<-InThai>>$/, q{Match unrelated internally inverted <InThai>} );
ok( "\x{BCED}\x{0E00}" =~ m/<+<InThai>>/, q{Match unanchored <InThai>} );
# InTibetan
ok( "\N{TIBETAN SYLLABLE OM}" =~ m/^<+<InTibetan>>$/, q{Match <InTibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" =~ m/^<[A]+<InTibetan>>$/, q{Match compound <InTibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<-<InTibetan>>$/, q{Don't match externally inverted <InTibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<[A]-<InTibetan>>$/, q{Don't match compound inverted <InTibetan>} );
ok( "\N{TIBETAN SYLLABLE OM}" !~ m/^<+<-InTibetan>>$/, q{Don't match internally inverted <InTibetan>} );
ok( "\N{ARABIC SIGN SINDHI AMPERSAND}" !~ m/^<+<InTibetan>>$/, q{Don't match unrelated <InTibetan>} );
ok( "\N{ARABIC SIGN SINDHI AMPERSAND}" =~ m/^<-<InTibetan>>$/, q{Match unrelated externally inverted <InTibetan>} );
ok( "\N{ARABIC SIGN SINDHI AMPERSAND}" =~ m/^<+<-InTibetan>>$/, q{Match unrelated internally inverted <InTibetan>} );
ok( "\N{ARABIC SIGN SINDHI AMPERSAND}\N{TIBETAN SYLLABLE OM}" =~ m/<+<InTibetan>>/, q{Match unanchored <InTibetan>} );
# InUnifiedCanadianAboriginalSyllabics
ok( "\x{1400}" =~ m/^<+<InUnifiedCanadianAboriginalSyllabics>>$/, q{Match <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{1400}" =~ m/^<[A]+<InUnifiedCanadianAboriginalSyllabics>>$/, q{Match compound <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{1400}" !~ m/^<-<InUnifiedCanadianAboriginalSyllabics>>$/, q{Don't match externally inverted <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{1400}" !~ m/^<[A]-<InUnifiedCanadianAboriginalSyllabics>>$/, q{Don't match compound inverted <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{1400}" !~ m/^<+<-InUnifiedCanadianAboriginalSyllabics>>$/, q{Don't match internally inverted <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{49D8}" !~ m/^<+<InUnifiedCanadianAboriginalSyllabics>>$/, q{Don't match unrelated <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{49D8}" =~ m/^<-<InUnifiedCanadianAboriginalSyllabics>>$/, q{Match unrelated externally inverted <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{49D8}" =~ m/^<+<-InUnifiedCanadianAboriginalSyllabics>>$/, q{Match unrelated internally inverted <InUnifiedCanadianAboriginalSyllabics>} );
ok( "\x{49D8}\x{1400}" =~ m/<+<InUnifiedCanadianAboriginalSyllabics>>/, q{Match unanchored <InUnifiedCanadianAboriginalSyllabics>} );
# InVariationSelectors
ok( "\x{5307}" !~ m/^<+<InVariationSelectors>>$/, q{Don't match unrelated <InVariationSelectors>} );
ok( "\x{5307}" =~ m/^<-<InVariationSelectors>>$/, q{Match unrelated externally inverted <InVariationSelectors>} );
ok( "\x{5307}" =~ m/^<+<-InVariationSelectors>>$/, q{Match unrelated internally inverted <InVariationSelectors>} );
# InYiRadicals
ok( "\N{YI RADICAL QOT}" =~ m/^<+<InYiRadicals>>$/, q{Match <InYiRadicals>} );
ok( "\N{YI RADICAL QOT}" =~ m/^<[A]+<InYiRadicals>>$/, q{Match compound <InYiRadicals>} );
ok( "\N{YI RADICAL QOT}" !~ m/^<-<InYiRadicals>>$/, q{Don't match externally inverted <InYiRadicals>} );
ok( "\N{YI RADICAL QOT}" !~ m/^<[A]-<InYiRadicals>>$/, q{Don't match compound inverted <InYiRadicals>} );
ok( "\N{YI RADICAL QOT}" !~ m/^<+<-InYiRadicals>>$/, q{Don't match internally inverted <InYiRadicals>} );
ok( "\x{7CAD}" !~ m/^<+<InYiRadicals>>$/, q{Don't match unrelated <InYiRadicals>} );
ok( "\x{7CAD}" =~ m/^<-<InYiRadicals>>$/, q{Match unrelated externally inverted <InYiRadicals>} );
ok( "\x{7CAD}" =~ m/^<+<-InYiRadicals>>$/, q{Match unrelated internally inverted <InYiRadicals>} );
ok( "\x{7CAD}\N{YI RADICAL QOT}" =~ m/<+<InYiRadicals>>/, q{Match unanchored <InYiRadicals>} );
# InYiSyllables
ok( "\N{YI SYLLABLE IT}" =~ m/^<+<InYiSyllables>>$/, q{Match <InYiSyllables>} );
ok( "\N{YI SYLLABLE IT}" =~ m/^<[A]+<InYiSyllables>>$/, q{Match compound <InYiSyllables>} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<-<InYiSyllables>>$/, q{Don't match externally inverted <InYiSyllables>} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<[A]-<InYiSyllables>>$/, q{Don't match compound inverted <InYiSyllables>} );
ok( "\N{YI SYLLABLE IT}" !~ m/^<+<-InYiSyllables>>$/, q{Don't match internally inverted <InYiSyllables>} );
ok( "\N{BRAILLE PATTERN DOTS-1578}" !~ m/^<+<InYiSyllables>>$/, q{Don't match unrelated <InYiSyllables>} );
ok( "\N{BRAILLE PATTERN DOTS-1578}" =~ m/^<-<InYiSyllables>>$/, q{Match unrelated externally inverted <InYiSyllables>} );
ok( "\N{BRAILLE PATTERN DOTS-1578}" =~ m/^<+<-InYiSyllables>>$/, q{Match unrelated internally inverted <InYiSyllables>} );
ok( "\N{BRAILLE PATTERN DOTS-1578}\N{YI SYLLABLE IT}" =~ m/<+<InYiSyllables>>/, q{Match unanchored <InYiSyllables>} );