The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
BEGIN { $| = 1; print "1..513\n"; }
my $count = 0;
sub ok ($;$) {
    my $p = my $r = shift;
    if (@_) {
	my $x = shift;
	$p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
    }
    print $p ? "ok" : "not ok", ' ', ++$count, "\n";
}

use Lingua::KO::Hangul::Util qw(decomposeJamo composeJamo);

ok(1);

#########################

sub str2hex { join ' ', map sprintf("%04X", $_), unpack 'U*', shift }
sub hex2str { pack 'U*', map hex, split ' ', shift }

while (<DATA>) {
    next if !/\S/;
    chomp;
    my ($complex, $decomp) = split /\t/;
    ok(str2hex(decomposeJamo(hex2str($complex))), $decomp);
    ok(str2hex(composeJamo(hex2str($decomp))), $complex);
}

1;
__DATA__
1100	1100
1101	1100 1100
1102	1102
1103	1103
1104	1103 1103
1105	1105
1106	1106
1107	1107
1108	1107 1107
1109	1109
110A	1109 1109
110B	110B
110C	110C
110D	110C 110C
110E	110E
110F	110F
1110	1110
1111	1111
1112	1112
1113	1102 1100
1114	1102 1102
1115	1102 1103
1116	1102 1107
1117	1103 1100
1118	1105 1102
1119	1105 1105
111A	1105 1112
111B	1105 110B
111C	1106 1107
111D	1106 110B
111E	1107 1100
111F	1107 1102
1120	1107 1103
1121	1107 1109
1122	1107 1109 1100
1123	1107 1109 1103
1124	1107 1109 1107
1125	1107 1109 1109
1126	1107 1109 110C
1127	1107 110C
1128	1107 110E
1129	1107 1110
112A	1107 1111
112B	1107 110B
112C	1107 1107 110B
112D	1109 1100
112E	1109 1102
112F	1109 1103
1130	1109 1105
1131	1109 1106
1132	1109 1107
1133	1109 1107 1100
1134	1109 1109 1109
1135	1109 110B
1136	1109 110C
1137	1109 110E
1138	1109 110F
1139	1109 1110
113A	1109 1111
113B	1109 1112
113C	113C
113D	113C 113C
113E	113E
113F	113E 113E
1140	1140
1141	110B 1100
1142	110B 1103
1143	110B 1106
1144	110B 1107
1145	110B 1109
1146	110B 1140
1147	110B 110B
1148	110B 110C
1149	110B 110E
114A	110B 1110
114B	110B 1111
114C	114C
114D	110C 110B
114E	114E
114F	114E 114E
1150	1150
1151	1150 1150
1152	110E 110F
1153	110E 1112
1154	1154
1155	1155
1156	1111 1107
1157	1111 110B
1158	1112 1112
1159	1159
115A	115A
115B	115B
115C	115C
115D	115D
115E	115E
115F	115F
1160	1160
1161	1161
1162	1161 1175
1163	1163
1164	1163 1175
1165	1165
1166	1165 1175
1167	1167
1168	1167 1175
1169	1169
116A	1169 1161
116B	1169 1161 1175
116C	1169 1175
116D	116D
116E	116E
116F	116E 1165
1170	116E 1165 1175
1171	116E 1175
1172	1172
1173	1173
1174	1173 1175
1175	1175
1176	1161 1169
1177	1161 116E
1178	1163 1169
1179	1163 116D
117A	1165 1169
117B	1165 116E
117C	1165 1173
117D	1167 1169
117E	1167 116E
117F	1169 1165
1180	1169 1165 1175
1181	1169 1167 1175
1182	1169 1169
1183	1169 116E
1184	116D 1163
1185	116D 1163 1175
1186	116D 1167
1187	116D 1169
1188	116D 1175
1189	116E 1161
118A	116E 1161 1175
118B	116E 1165 1173
118C	116E 1167 1175
118D	116E 116E
118E	1172 1161
118F	1172 1165
1190	1172 1165 1175
1191	1172 1167
1192	1172 1167 1175
1193	1172 116E
1194	1172 1175
1195	1173 116E
1196	1173 1173
1197	1173 1175 116E
1198	1175 1161
1199	1175 1163
119A	1175 1169
119B	1175 116E
119C	1175 1173
119D	1175 119E
119E	119E
119F	119E 1165
11A0	119E 116E
11A1	119E 1175
11A2	119E 119E
11A3	11A3
11A4	11A4
11A5	11A5
11A6	11A6
11A7	11A7
11A8	11A8
11A9	11A8 11A8
11AA	11A8 11BA
11AB	11AB
11AC	11AB 11BD
11AD	11AB 11C2
11AE	11AE
11AF	11AF
11B0	11AF 11A8
11B1	11AF 11B7
11B2	11AF 11B8
11B3	11AF 11BA
11B4	11AF 11C0
11B5	11AF 11C1
11B6	11AF 11C2
11B7	11B7
11B8	11B8
11B9	11B8 11BA
11BA	11BA
11BB	11BA 11BA
11BC	11BC
11BD	11BD
11BE	11BE
11BF	11BF
11C0	11C0
11C1	11C1
11C2	11C2
11C3	11A8 11AF
11C4	11A8 11BA 11A8
11C5	11AB 11A8
11C6	11AB 11AE
11C7	11AB 11BA
11C8	11AB 11EB
11C9	11AB 11C0
11CA	11AE 11A8
11CB	11AE 11AF
11CC	11AF 11A8 11BA
11CD	11AF 11AB
11CE	11AF 11AE
11CF	11AF 11AE 11C2
11D0	11AF 11AF
11D1	11AF 11B7 11A8
11D2	11AF 11B7 11BA
11D3	11AF 11B8 11BA
11D4	11AF 11B8 11C2
11D5	11AF 11B8 11BC
11D6	11AF 11BA 11BA
11D7	11AF 11EB
11D8	11AF 11BF
11D9	11AF 11F9
11DA	11B7 11A8
11DB	11B7 11AF
11DC	11B7 11B8
11DD	11B7 11BA
11DE	11B7 11BA 11BA
11DF	11B7 11EB
11E0	11B7 11BE
11E1	11B7 11C2
11E2	11B7 11BC
11E3	11B8 11AF
11E4	11B8 11C1
11E5	11B8 11C2
11E6	11B8 11BC
11E7	11BA 11A8
11E8	11BA 11AE
11E9	11BA 11AF
11EA	11BA 11B8
11EB	11EB
11EC	11BC 11A8
11ED	11BC 11A8 11A8
11EE	11BC 11BC
11EF	11BC 11BF
11F0	11F0
11F1	11F0 11BA
11F2	11F0 11EB
11F3	11C1 11B8
11F4	11C1 11BC
11F5	11C2 11AB
11F6	11C2 11AF
11F7	11C2 11B7
11F8	11C2 11B8
11F9	11F9
11FA	11FA
11FB	11FB
11FC	11FC
11FD	11FD
11FE	11FE
11FF	11FF