BEGIN { $| = 1; print "1..9\n"; } END {print "not ok 1\n" unless $loaded;} use String::Multibyte; $^W = 1; $loaded = 1; print "ok 1\n"; $dgc = $] < 5.008 ? undef : String::Multibyte->new('Grapheme'); print ! $dgc || pack('U*', 0x300, 0, 0x0D, 0x41, 0x300, 0x301, 0x3042, 0xD, 0xA, 0xAC00, 0x11A8) eq $dgc->strrev( pack('U*', 0xAC00, 0x11A8, 0xD, 0xA, 0x3042, 0x41, 0x300, 0x301, 0xD, 0, 0x300)) ? "ok" : "not ok", " 2\n"; print ! $dgc || 7 == $dgc->length(pack('U*', 0xAC00, 0x11A8, 0xD, 0xA, 0x3042, 0x41, 0x300, 0x301, 0xD, 0, 0x300)) ? "ok" : "not ok", " 3\n"; unless ($dgc) { for (4..9) { print "ok $_\n" } } else { $reDGC = String::Multibyte->new('Grapheme')->{regexp}; print "\cM\cJ" =~ /^${reDGC}\z/ && "\cM\cJ" !~ /^${reDGC}{2}\z/ ? "ok" : "not ok", " 4\n"; print "\cM\cM" !~ /^${reDGC}\z/ && "\cM\cM" =~ /^${reDGC}{2}\z/ ? "ok" : "not ok", " 5\n"; print "\cJ\cJ" !~ /^${reDGC}\z/ && "\cJ\cJ" =~ /^${reDGC}{2}\z/ ? "ok" : "not ok", " 6\n"; print "\cJ\cM" !~ /^${reDGC}\z/ && "\cJ\cM" =~ /^${reDGC}{2}\z/ ? "ok" : "not ok", " 7\n"; $ct_cc = pack ('U*', 0x01, 0x300); print $ct_cc !~ /^${reDGC}\z/ && $ct_cc =~ /^${reDGC}{2}\z/ ? "ok" : "not ok", " 8\n"; $hangul = pack ('U*', 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF); print $hangul !~ /^${reDGC}\z/ && $hangul =~ /^${reDGC}{2}\z/ ? "ok" : "not ok", " 9\n"; } 1; __END__