The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
binmode Test::More->builder->$_ => ':utf8'
    for qw(output failure_output todo_output);

use Encode;
use Encode::UTF8Mac;

my $unicode = join('',
    "\x{3060}",         # HIRAGANA LETTER DA / NFD() => TA + MARK
    "\x{3093}",         # HIRAGANA LETTER N
    "\x{3053}",         # HIRAGANA LETTER KO
    "\x{304C}",         # HIRAGANA LETTER GA / NFD() => KA + MARK
    "\x{3044}",         # HIRAGANA LETTER I
    "\x{3071}",         # HIRAGANA LETTER PA / NFD() => HA + MARK
    "\x{30D1}",         # KATAKANA LETTER PA / NFD() => HA + MARK
    "\x{FA1B}",         # Chinese Kanji FUKU(lucky)   / NFD() => U+798F
    "\x{2F872}",        # Chinese Kanji JU(long-life) / NFD() => U+5BFF
);

my $utf8bytes = join('',
    "\xe3\x81\x9f",     # HIRAGANA LETTER TA
    "\xe3\x82\x99",     # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
    "\xe3\x82\x93",     # HIRAGANA LETTER N
    "\xe3\x81\x93",     # HIRAGANA LETTER KO
    "\xe3\x81\x8b",     # HIRAGANA LETTER KA
    "\xe3\x82\x99",     # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
    "\xe3\x81\x84",     # HIRAGANA LETTER I
    "\xe3\x81\xaf",     # HIRAGANA LETTER HA
    "\xe3\x82\x9a",     # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
    "\xe3\x83\x8f",     # KATAKANA LETTER HA
    "\xe3\x82\x9a",     # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
    "\xef\xa8\x9b",     # CJK COMPATIBILITY IDEOGRAPH-FA1B
    "\xf0\xaf\xa1\xb2", # CJK COMPATIBILITY IDEOGRAPH-2F872
);

is(Encode::decode('utf-8-mac', $utf8bytes), $unicode, 'decode()');
is(Encode::encode('utf-8-mac', $unicode), $utf8bytes, 'encode()');


for my $code (
    0x2000  .. 0x2FFF,
    0xF900  .. 0xFAFF,
    0x2F800 .. 0x2FAFF,
) {
    is(
        Encode::encode('utf-8-mac', chr $code),
        Encode::encode('utf-8', chr $code),
        sprintf('U+%X', $code)
    );
}

done_testing;