OSDN Git Service

* Add support for JIS X0213:2004
[nkf/nkf.git] / nkf_test.pl
index 6a6ef94..4e79f6f 100644 (file)
@@ -1,6 +1,9 @@
 #!/usr/local/bin/perl
 #
-# nkf test program for nkf 1.7
+# nkf test program for nkf-2
+#
+# $Id: nkf_test.pl,v 1.29 2008/02/07 19:25:29 naruse Exp $
+#
 #    Shinji KONO <kono@ie.u-ryukyu.ac.jp>
 # Sun Aug 18 12:25:40 JST 1996
 # Sun Nov  8 00:16:06 JST 1998
@@ -40,13 +43,47 @@ M<F%G86YA(*2BI*2DIJ2HI*JD[Z3RI/,*2V%T86MA;F$@I:*EI*6FI:BEJJ7O
 >I?*E\R!+:6=O=2"AIJ'GH["CP:;!IMBGHJ?!J,`*
 eofeof
 
-$example{'utf'} = unpack('u',<<'eofeof');
+$example{'utf8'} = unpack('u',<<'eofeof');
+M[[N_1FER<W0@4W1A9V4@XX"%Z9FBY;^<YK.5YKJ`Z(65(%-E8V]N9"!3=&%G
+M92#DN+SI@:4@2&ER86=A;F$@XX&"XX&$XX&&XX&(XX&*XX*/XX*2XX*3"DMA
+M=&%K86YA(.."HN."I.."IN."J.."JN.#K^.#LN.#LR!+:6=O=2#C@[OBB)[O
+1O)#OO*'.L<^)T)'0K^*5@@H`
+eofeof
+
+$example{'utf8N'} = unpack('u',<<'eofeof');
 M1FER<W0@4W1A9V4@XX"%Z9FBY;^<YK.5YKJ`Z(65(%-E8V]N9"!3=&%G92#D
 MN+SI@:4@2&ER86=A;F$@XX&"XX&$XX&&XX&(XX&*XX*/XX*2XX*3"DMA=&%K
 M86YA(.."HN."I.."IN."J.."JN.#K^.#LN.#LR!+:6=O=2#C@[OBB)[OO)#O
 .O*'.L<^)T)'0K^*5@@H`
 eofeof
 
+$example{'u16L'} = unpack('u',<<'eofeof');
+M__Y&`&D`<@!S`'0`(`!3`'0`80!G`&4`(``%,&*6W%_5;(!N58$@`%,`90!C
+M`&\`;@!D`"``4P!T`&$`9P!E`"``/$YED"``2`!I`'(`80!G`&$`;@!A`"``
+M0C!$,$8P2#!*,(\PDC"3,`H`2P!A`'0`80!K`&$`;@!A`"``HC"D,*8PJ#"J
+I,.\P\C#S,"``2P!I`&<`;P!U`"``^S`>(A#_(?^Q`\D#$00O!$(E"@``
+eofeof
+
+$example{'u16L0'} = unpack('u',<<'eofeof');
+M1@!I`'(`<P!T`"``4P!T`&$`9P!E`"``!3!BEMQ?U6R`;E6!(`!3`&4`8P!O
+M`&X`9``@`%,`=`!A`&<`90`@`#Q.99`@`$@`:0!R`&$`9P!A`&X`80`@`$(P
+M1#!&,$@P2C"/,)(PDS`*`$L`80!T`&$`:P!A`&X`80`@`*(PI#"F,*@PJC#O
+G,/(P\S`@`$L`:0!G`&\`=0`@`/LP'B(0_R'_L0/)`Q$$+P1")0H`
+eofeof
+
+$example{'u16B'} = unpack('u',<<'eofeof');
+M_O\`1@!I`'(`<P!T`"``4P!T`&$`9P!E`"`P!99B7]QLU6Z`@54`(`!3`&4`
+M8P!O`&X`9``@`%,`=`!A`&<`90`@3CR090`@`$@`:0!R`&$`9P!A`&X`80`@
+M,$(P1#!&,$@P2C"/,)(PDP`*`$L`80!T`&$`:P!A`&X`80`@,*(PI#"F,*@P
+IJC#O,/(P\P`@`$L`:0!G`&\`=0`@,/LB'O\0_R$#L0/)!!$$+R5"``H`
+eofeof
+
+$example{'u16B0'} = unpack('u',<<'eofeof');
+M`$8`:0!R`',`=``@`%,`=`!A`&<`90`@,`668E_<;-5N@(%5`"``4P!E`&,`
+M;P!N`&0`(`!3`'0`80!G`&4`($X\D&4`(`!(`&D`<@!A`&<`80!N`&$`(#!"
+M,$0P1C!(,$HPCS"2,),`"@!+`&$`=`!A`&L`80!N`&$`(#"B,*0PIC"H,*HP
+G[S#R,/,`(`!+`&D`9P!O`'4`(##[(A[_$/\A`[$#R001!"\E0@`*
+eofeof
 
 $example{'jis1'} = unpack('u',<<'eofeof');
 M&R1";3%Q<$$L&RA""ALD0F4Z3F\;*$(*&R1"<FT;*$()&R1"/F5.3D]+&RA"
@@ -83,61 +120,103 @@ eofeof
 
 # From JIS
 
-print "JIS  to JIS ... ";&test("$nkf -j",$example{'jis'},$example{'jis'});
-print "JIS  to SJIS... ";&test("$nkf -s",$example{'jis'},$example{'sjis'});
-print "JIS  to EUC ... ";&test("$nkf -e",$example{'jis'},$example{'euc'});
-print "JIS  to UTF8... ";&test("$nkf -w",$example{'jis'},$example{'utf'});
+print "JIS  to JIS ...";&test("$nkf -j",$example{'jis'},$example{'jis'});
+print "JIS  to SJIS...";&test("$nkf -s",$example{'jis'},$example{'sjis'});
+print "JIS  to EUC ...";&test("$nkf -e",$example{'jis'},$example{'euc'});
+print "JIS  to UTF8...";&test("$nkf -w",$example{'jis'},$example{'utf8N'});
+print "JIS  to U16L...";&test("$nkf -w16L",$example{'jis'},$example{'u16L'});
+print "JIS  to U16B...";&test("$nkf -w16B",$example{'jis'},$example{'u16B'});
+print "JIS  to JIS ...";&test("$nkf --ic=iso-2022-jp --oc=iso-2022-jp" ,$example{'jis'},$example{'jis'});
+print "JIS  to SJIS...";&test("$nkf --ic=iso-2022-jp --oc=shift_jis"   ,$example{'jis'},$example{'sjis'});
+print "JIS  to EUC ...";&test("$nkf --ic=iso-2022-jp --oc=euc-jp"      ,$example{'jis'},$example{'euc'});
+print "JIS  to UTF8...";&test("$nkf --ic=iso-2022-jp --oc=utf-8n"      ,$example{'jis'},$example{'utf8N'});
+print "JIS  to U16L...";&test("$nkf --ic=iso-2022-jp --oc=utf-16le-bom",$example{'jis'},$example{'u16L'});
+print "JIS  to U16B...";&test("$nkf --ic=iso-2022-jp --oc=utf-16be-bom",$example{'jis'},$example{'u16B'});
 
 # From SJIS
 
-print "SJIS to JIS ... ";&test("$nkf -j",$example{'sjis'},$example{'jis'});
-print "SJIS to SJIS... ";&test("$nkf -s",$example{'sjis'},$example{'sjis'});
-print "SJIS to EUC ... ";&test("$nkf -e",$example{'sjis'},$example{'euc'});
-print "SJIS to UTF8... ";&test("$nkf -w",$example{'sjis'},$example{'utf'});
+print "SJIS to JIS ...";&test("$nkf -j",$example{'sjis'},$example{'jis'});
+print "SJIS to SJIS...";&test("$nkf -s",$example{'sjis'},$example{'sjis'});
+print "SJIS to EUC ...";&test("$nkf -e",$example{'sjis'},$example{'euc'});
+print "SJIS to UTF8...";&test("$nkf -w",$example{'sjis'},$example{'utf8N'});
+print "SJIS to U16L...";&test("$nkf -w16L",$example{'sjis'},$example{'u16L'});
+print "SJIS to U16B...";&test("$nkf -w16B",$example{'sjis'},$example{'u16B'});
+print "SJIS to JIS ...";&test("$nkf --ic=shift_jis --oc=iso-2022-jp"   ,$example{'sjis'},$example{'jis'});
+print "SJIS to SJIS...";&test("$nkf --ic=shift_jis --oc=shift_jis"     ,$example{'sjis'},$example{'sjis'});
+print "SJIS to EUC ...";&test("$nkf --ic=shift_jis --oc=euc-jp"        ,$example{'sjis'},$example{'euc'});
+print "SJIS to UTF8...";&test("$nkf --ic=shift_jis --oc=utf-8n"        ,$example{'sjis'},$example{'utf8N'});
+print "SJIS to U16L...";&test("$nkf --ic=shift_jis --oc=utf-16le-bom"  ,$example{'sjis'},$example{'u16L'});
+print "SJIS to U16B...";&test("$nkf --ic=shift_jis --oc=utf-16be-bom"  ,$example{'sjis'},$example{'u16B'});
 
 # From EUC
 
-print "EUC  to JIS ... ";&test("$nkf -j",$example{'euc'},$example{'jis'});
-print "EUC  to SJIS... ";&test("$nkf -s",$example{'euc'},$example{'sjis'});
-print "EUC  to EUC ... ";&test("$nkf -e",$example{'euc'},$example{'euc'});
-print "EUC  to UTF8... ";&test("$nkf -w",$example{'euc'},$example{'utf'});
+print "EUC  to JIS ...";&test("$nkf -j",$example{'euc'},$example{'jis'});
+print "EUC  to SJIS...";&test("$nkf -s",$example{'euc'},$example{'sjis'});
+print "EUC  to EUC ...";&test("$nkf -e",$example{'euc'},$example{'euc'});
+print "EUC  to UTF8...";&test("$nkf -w",$example{'euc'},$example{'utf8N'});
+print "EUC  to U16L...";&test("$nkf -w16L",$example{'euc'},$example{'u16L'});
+print "EUC  to U16B...";&test("$nkf -w16B",$example{'euc'},$example{'u16B'});
+print "EUC  to JIS ...";&test("$nkf --ic=euc-jp --oc=iso-2022-jp"      ,$example{'euc'},$example{'jis'});
+print "EUC  to SJIS...";&test("$nkf --ic=euc-jp --oc=shift_jis"        ,$example{'euc'},$example{'sjis'});
+print "EUC  to EUC ...";&test("$nkf --ic=euc-jp --oc=euc-jp"   ,$example{'euc'},$example{'euc'});
+print "EUC  to UTF8...";&test("$nkf --ic=euc-jp --oc=utf-8n"   ,$example{'euc'},$example{'utf8N'});
+print "EUC  to U16L...";&test("$nkf --ic=euc-jp --oc=utf-16le-bom"     ,$example{'euc'},$example{'u16L'});
+print "EUC  to U16B...";&test("$nkf --ic=euc-jp --oc=utf-16be-bom"     ,$example{'euc'},$example{'u16B'});
 
 # From UTF8
 
-print "UTF8 to JIS ... ";&test("$nkf -j",$example{'utf'},$example{'jis'});
-print "UTF8 to SJIS... ";&test("$nkf -s",$example{'utf'},$example{'sjis'});
-print "UTF8 to EUC ... ";&test("$nkf -e",$example{'utf'},$example{'euc'});
-print "UTF8 to UTF8... ";&test("$nkf -w",$example{'utf'},$example{'utf'});
+print "UTF8 to JIS ...";&test("$nkf -j",       $example{'utf8N'},$example{'jis'});
+print "UTF8 to SJIS...";&test("$nkf -s",       $example{'utf8N'},$example{'sjis'});
+print "UTF8 to EUC ...";&test("$nkf -e",       $example{'utf8N'},$example{'euc'});
+print "UTF8 to UTF8N..";&test("$nkf -w",       $example{'utf8N'},$example{'utf8N'});
+print "UTF8 to UTF8...";&test("$nkf -w8",      $example{'utf8N'},$example{'utf8'});
+print "UTF8 to UTF8N..";&test("$nkf -w80",     $example{'utf8N'},$example{'utf8N'});
+print "UTF8 to U16L...";&test("$nkf -w16L",    $example{'utf8N'},$example{'u16L'});
+print "UTF8 to U16L0..";&test("$nkf -w16L0",   $example{'utf8N'},$example{'u16L0'});
+print "UTF8 to U16B...";&test("$nkf -w16B",    $example{'utf8N'},$example{'u16B'});
+print "UTF8 to U16B0..";&test("$nkf -w16B0",   $example{'utf8N'},$example{'u16B0'});
+print "UTF8 to JIS ...";&test("$nkf --ic=utf-8 --oc=iso-2022-jp",      $example{'utf8N'},$example{'jis'});
+print "UTF8 to SJIS...";&test("$nkf --ic=utf-8 --oc=shift_jis",        $example{'utf8N'},$example{'sjis'});
+print "UTF8 to EUC ...";&test("$nkf --ic=utf-8 --oc=euc-jp",           $example{'utf8N'},$example{'euc'});
+print "UTF8 to UTF8N..";&test("$nkf --ic=utf-8 --oc=utf-8",            $example{'utf8N'},$example{'utf8N'});
+print "UTF8 to UTF8BOM";&test("$nkf --ic=utf-8 --oc=utf-8-bom",        $example{'utf8N'},$example{'utf8'});
+print "UTF8 to UTF8N..";&test("$nkf --ic=utf-8 --oc=utf-8n",           $example{'utf8N'},$example{'utf8N'});
+print "UTF8 to U16L...";&test("$nkf --ic=utf-8 --oc=utf-16le-bom",     $example{'utf8N'},$example{'u16L'});
+print "UTF8 to U16L0..";&test("$nkf --ic=utf-8 --oc=utf-16le",         $example{'utf8N'},$example{'u16L0'});
+print "UTF8 to U16B...";&test("$nkf --ic=utf-8 --oc=utf-16be-bom",     $example{'utf8N'},$example{'u16B'});
+print "UTF8 to U16B0..";&test("$nkf --ic=utf-8 --oc=utf-16be",         $example{'utf8N'},$example{'u16B0'});
 
 
 
 # From JIS
 
-print "JIS  to JIS ... ";&test("$nkf -j",$example{'jis1'},$example{'jis1'});
-print "JIS  to SJIS... ";&test("$nkf -s",$example{'jis1'},$example{'sjis1'});
-print "JIS  to EUC ... ";&test("$nkf -e",$example{'jis1'},$example{'euc1'});
-print "JIS  to UTF8... ";&test("$nkf -w",$example{'jis1'},$example{'utf1'});
+print "JIS  to JIS ...";&test("$nkf -j",$example{'jis1'},$example{'jis1'});
+print "JIS  to SJIS...";&test("$nkf -s",$example{'jis1'},$example{'sjis1'});
+print "JIS  to EUC ...";&test("$nkf -e",$example{'jis1'},$example{'euc1'});
+print "JIS  to UTF8...";&test("$nkf -w",$example{'jis1'},$example{'utf1'});
 
 # From SJIS
 
-print "SJIS to JIS ... ";&test("$nkf -j",$example{'sjis1'},$example{'jis1'});
-print "SJIS to SJIS... ";&test("$nkf -s",$example{'sjis1'},$example{'sjis1'});
-print "SJIS to EUC ... ";&test("$nkf -e",$example{'sjis1'},$example{'euc1'});
-print "SJIS to UTF8... ";&test("$nkf -w",$example{'sjis1'},$example{'utf1'});
+print "SJIS to JIS ...";&test("$nkf -j",$example{'sjis1'},$example{'jis1'});
+print "SJIS to SJIS...";&test("$nkf -s",$example{'sjis1'},$example{'sjis1'});
+print "SJIS to EUC ...";&test("$nkf -e",$example{'sjis1'},$example{'euc1'});
+print "SJIS to UTF8...";&test("$nkf -w",$example{'sjis1'},$example{'utf1'});
 
 # From EUC
 
-print "EUC  to JIS ... ";&test("$nkf -j",$example{'euc1'},$example{'jis1'});
-print "EUC  to SJIS... ";&test("$nkf -s",$example{'euc1'},$example{'sjis1'});
-print "EUC  to EUC ... ";&test("$nkf -e",$example{'euc1'},$example{'euc1'});
-print "EUC  to UTF8... ";&test("$nkf -w",$example{'euc1'},$example{'utf1'});
+print "EUC  to JIS ...";&test("$nkf -j",$example{'euc1'},$example{'jis1'});
+print "EUC  to SJIS...";&test("$nkf -s",$example{'euc1'},$example{'sjis1'});
+print "EUC  to EUC ...";&test("$nkf -e",$example{'euc1'},$example{'euc1'});
+print "EUC  to UTF8...";&test("$nkf -w",$example{'euc1'},$example{'utf1'});
 
 # From UTF8
 
-print "UTF8 to JIS ... ";&test("$nkf -j",$example{'utf1'},$example{'jis1'});
-print "UTF8 to SJIS... ";&test("$nkf -s",$example{'utf1'},$example{'sjis1'});
-print "UTF8 to EUC ... ";&test("$nkf -e",$example{'utf1'},$example{'euc1'});
-print "UTF8 to UTF8... ";&test("$nkf -w",$example{'utf1'},$example{'utf1'});
+print "UTF8 to JIS ...";&test("$nkf -j",$example{'utf1'},$example{'jis1'});
+print "UTF8 to SJIS...";&test("$nkf -s",$example{'utf1'},$example{'sjis1'});
+print "UTF8 to EUC ...";&test("$nkf -e",$example{'utf1'},$example{'euc1'});
+print "UTF8 to UTF8...";&test("$nkf -w",$example{'utf1'},$example{'utf1'});
+
+print "\nOther Features\n\n";
 
 # Ambigous Case
 
@@ -173,24 +252,146 @@ M)4(;*$(*&RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q
 >)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*
 eofeof
 
-print "Ambiguous Case. ";
+printf "%-40s", "Ambiguous Case.";
     &test("$nkf -j",$example{'amb'},$example{'amb.euc'});
 
 # Input assumption
 
-print "SJIS  Input assumption ";
+printf "%-40s", "SJIS  Input assumption";
     &test("$nkf -jSx",$example{'amb'},$example{'amb.sjis'});
 
 # Broken JIS
 
-print "Broken JIS ";
+printf "%-40s", "Broken JIS";
     $input = $example{'jis'};
     $input =~ s/\033//g;
     &test("$nkf -Be",$input,$example{'euc'});
-print "Broken JIS is safe on Normal JIS? ";
+printf "%-40s", "Broken JIS is safe on Normal JIS?";
     $input = $example{'jis'};
     &test("$nkf -Be",$input,$example{'euc'});
 
+# test_data/cp932
+
+$example{'test_data/cp932'} = unpack('u',<<'eofeof');
+%^D`@_$L`
+eofeof
+
+$example{'test_data/cp932.ans'} = unpack('u',<<'eofeof');
+%_/$@_.X`
+eofeof
+
+printf "%-40s", "test_data/cp932";
+    &test("$nkf -eS",$example{'test_data/cp932'},$example{'test_data/cp932.ans'});
+printf "%-40s", "test_data/cp51932";
+    &test("$nkf --ic=cp932 --oc=cp51932",$example{'test_data/cp932'},$example{'test_data/cp932.ans'});
+
+# test_data/cp932inv
+printf "%-40s", "test_data/cp932inv";
+    &test("$nkf -sE --cp932",$example{'test_data/cp932.ans'},$example{'test_data/cp932'});
+
+# test_data/no-cp932inv
+
+$example{'test_data/no-cp932inv.ans'} = unpack('u',<<'eofeof');
+%[N\@[NP`
+eofeof
+
+printf "%-40s", "test_data/no-cp932inv";
+    &test("$nkf -sE --no-cp932",$example{'test_data/cp932.ans'},$example{'test_data/no-cp932inv.ans'});
+# JIS X 0212
+$example{'jisx0212_euc'} = "\x8F\xA2\xAF\x8F\xED\xE3";
+$example{'jisx0212_jis'} = "\x1b\x24\x28\x44\x22\x2f\x6d\x63\x1b\x28\x42";
+
+printf "%-40s", "ISO-2022-JP-1 to EUC-JP";
+    &test("$nkf --ic=ISO-2022-JP-1 --oc=EUC-JP",$example{'jisx0212_jis'},$example{'jisx0212_euc'});
+
+printf "%-40s", "EUC-JP to ISO-2022-JP-1";
+    &test("$nkf --ic=EUC-JP --oc=ISO-2022-JP-1",$example{'jisx0212_euc'},$example{'jisx0212_jis'});
+# JIS X 0213
+
+$example{'jisx0213_sjis'} = unpack('u',<<'eofeof');
+0@:V(G9ATF)WJIN_W\$#\]```
+eofeof
+
+$example{'jisx0213_euc'} = unpack('u',<<'eofeof');
+2HJ^O_<_5S_WTJ/[YCZ&AC_[V
+eofeof
+
+$example{'jisx0213_jis2000'} = unpack('u',<<'eofeof');
+;&R0H3R(O+WU/54]]="A^>1LD*%`A(7YV&RA"
+eofeof
+$example{'jisx0213_jis2004'} = unpack('u',<<'eofeof');
+;&R0H42(O+WU/54]]="A^>1LD*%`A(7YV&RA"
+eofeof
+
+printf "%-40s", "Shift_JISX0213 to EUC-JISX0213";
+    &test("$nkf --ic=Shift_JISX0213 --oc=EUC-JISX0213",$example{'jisx0213_sjis'},$example{'jisx0213_euc'});
+
+printf "%-40s", "EUC-JISX0213 to Shift_JISX0213";
+    &test("$nkf --ic=EUC-JISX0213 --oc=Shift_JISX0213",$example{'jisx0213_euc'},$example{'jisx0213_sjis'});
+
+printf "%-40s", "ISO-2022-JP-3 to EUC-JISX0213";
+    &test("$nkf --ic=ISO-2022-JP-3 --oc=EUC-JISX0213",$example{'jisx0213_jis2000'},$example{'jisx0213_euc'});
+
+printf "%-40s", "ISO-2022-JP-2004 to EUC-JISX0213";
+    &test("$nkf --ic=ISO-2022-JP-2004 --oc=EUC-JISX0213",$example{'jisx0213_jis2004'},$example{'jisx0213_euc'});
+
+printf "%-40s", "EUC-JISX0213 to ISO-2022-JP-2004";
+    &test("$nkf --ic=EUC-JISX0213 --oc=ISO-2022-JP-2004",$example{'jisx0213_euc'},$example{'jisx0213_jis2004'});
+# test_data/no_best_fit_chars
+
+$example{'test_data/no_best_fit_chars'} = unpack('u',<<'eofeof');
+;XH"5XHBE[[R-[[^@[[^A[[^B[[^C[[^D[[^E
+eofeof
+
+printf "%-40s", "no_best_fit_chars (eucJP-ascii)";
+    &test("$nkf -W --oc=eucJP-ascii --no-best-fit-chars",$example{'test_data/no_best_fit_chars'},'');
+
+$example{'test_data/no_best_fit_chars_ms'} = unpack('u',<<'eofeof');
+9PJ+"H\*EPJ;"K.*`E.*`EN*`ON*(DN.`G```
+eofeof
+
+printf "%-40s", "no_best_fit_chars (eucJP-ms)";
+    &test("$nkf -W --oc=eucJP-ms --no-best-fit-chars",$example{'test_data/no_best_fit_chars_ms'},'');
+
+$example{'test_data/no_best_fit_chars_cp932'} = unpack('u',<<'eofeof');
+MPJ'"HL*CPJ7"IL*IPJK"J\*LPJW"KL*OPK+"L\*UPK?"N,*YPKK"N\.`PX'#
+M@L.#PX3#A<.&PX?#B,.)PXK#B\.,PXW#CL./PY##D<.2PY/#E,.5PY;#F,.9
+MPYK#F\.<PYW#GL.?PZ##H<.BPZ/#I,.EPZ;#I\.HPZG#JL.KPZS#K<.NPZ_#
+@L,.QP[+#L\.TP[7#ML.XP[G#NL.[P[S#O<.^P[_C@I0`
+eofeof
+
+printf "%-40s", "no_best_fit_chars (cp932)";
+    &test("$nkf -W --oc=CP932 --no-best-fit-chars",$example{'test_data/no_best_fit_chars_cp932'},'');
+# test_data/irv
+
+# $example{'test_data/irv'} = unpack('u',<<'eofeof');
+# %#B`/(!L`
+# eofeof
+# 
+# $example{'test_data/irv.ans'} = unpack('u',<<'eofeof');
+# %#B`/(!L`
+# eofeof
+# 
+# printf "%-40s", "test_data/irv";
+#    &test("$nkf -wE",$example{'test_data/irv'},$example{'test_data/irv.ans'});
+
+
+# UCS Mapping Test
+print "\nUCS Mapping Test\n\n";
+
+print "Shift_JIS to UTF-16\n";
+$example{'ms_ucs_map_1_sjis'} = "\x81\x60\x81\x61\x81\x7C\x81\x91\x81\x92\x81\xCA";
+$example{'ms_ucs_map_1_utf16'} = "\x30\x1C\x20\x16\x22\x12\x00\xA2\x00\xA3\x00\xAC";
+$example{'ms_ucs_map_1_utf16_ms'} = "\xFF\x5E\x22\x25\xFF\x0D\xFF\xE0\xFF\xE1\xFF\xE2";
+
+printf "%-40s", "Normal UCS Mapping :";
+    &test("$nkf -w16B0 --ic=Shift_JIS",$example{'ms_ucs_map_1_sjis'},$example{'ms_ucs_map_1_utf16'});
+
+printf "%-40s", "Microsoft UCS Mapping :";
+    &test("$nkf -w16B0 -S --ms-ucs-map",$example{'ms_ucs_map_1_sjis'},$example{'ms_ucs_map_1_utf16_ms'});
+printf "%-40s", "CP932 to UTF-16BE :";
+    &test("$nkf --ic=cp932 --oc=utf-16be",$example{'ms_ucs_map_1_sjis'},$example{'ms_ucs_map_1_utf16_ms'});
+
 # X0201 \e$B2>L>\e(B
 # X0201->X0208 conversion
 # X0208 aphabet -> ASCII
@@ -219,11 +420,11 @@ $example{'x0201.utf'} = unpack('u',<<'eofeof');
 MY86HZ*>2XX*KXX*MXX*OXX*QXX*SXX*LXX*NXX*PXX*RXX*T"N6%J.B+L>^\
 MH>^\HN^\H^^\I.^\I>^\IN^\I^^]@>^]@N^]@^^]A.^]A>^]AN^]APKEA:CH
 MJ)CEC[?OO('OO*#OO(/OO(3OO(7OO+[OO(;OO(KOO(COO(GBB)+OO(OOO)WO
-MO+OOO+WOO9OOO9WOOZ4*Y8V*Z*>2[[VV[[VW[[VX/>^]N>^]NN^]MN^^GN^]
-MM^^^GN^]N.^^GN^]N>^^GN^]NN^^GN.!J`KEC8KHIY+OOHKOOI_OOHOOOI_O
-MOHSOOI_OOHWOOI_OOH[OOI_OO;?OOI_OO;'OOIX*[[Z*[[Z?[[Z+[[Z?[[Z,
-M"FAA;FMA:W4@[[Z*[[Z?[[Z+[[Z?[[Z,[[VD"N^^BN^^G^^^B^^^G^^^C.^^
-2G>^]H0KEC8KHIY+C@:[EOHP*
+MO+OOO+WOO9OOO9W"I0KEC8KHIY+OO;;OO;?OO;@][[VY[[VZ[[VV[[Z>[[VW
+M[[Z>[[VX[[Z>[[VY[[Z>[[VZ[[Z>XX&H"N6-BNBGDN^^BN^^G^^^B^^^G^^^
+MC.^^G^^^C>^^G^^^CN^^G^^]M^^^G^^]L>^^G@KOOHKOOI_OOHOOOI_OOHP*
+M:&%N:V%K=2#OOHKOOI_OOHOOOI_OOHSOO:0*[[Z*[[Z?[[Z+[[Z?[[Z,[[Z=
+1[[VA"N6-BNBGDN.!KN6^C`H`
 eofeof
 
 $example{'x0201.jis'} = unpack('u',<<'eofeof');
@@ -255,24 +456,24 @@ eofeof
 
 # -X is necessary to allow X0201 in SJIS
 # -Z convert X0208 alphabet to ASCII
-print "X0201 conversion: SJIS ";
+printf "%-40s", "X0201 conversion: SJIS";
     &test("$nkf -jXZ",$example{'x0201.sjis'},$example{'x0201.x0208'});
-print "X0201 conversion: JIS  ";
+printf "%-40s", "X0201 conversion: JIS";
     &test("$nkf -jZ",$example{'x0201.jis'},$example{'x0201.x0208'});
-print "X0201 conversion:SI/SO ";
+printf "%-40s", "X0201 conversion: SI/SO";
     &test("$nkf -jZ",$example{'x0201.sosi'},$example{'x0201.x0208'});
-print "X0201 conversion: EUC  ";
+printf "%-40s", "X0201 conversion: EUC";
     &test("$nkf -jZ",$example{'x0201.euc'},$example{'x0201.x0208'});
-print "X0201 conversion: UTF8 ";
+printf "%-40s", "X0201 conversion: UTF8";
     &test("$nkf -jZ",$example{'x0201.utf'},$example{'x0201.x0208'});
 # -x means X0201 output
-print "X0201 output: SJIS     ";
+printf "%-40s", "X0201 output: SJIS";
     &test("$nkf -xs",$example{'x0201.euc'},$example{'x0201.sjis'});
-print "X0201 output: JIS      ";
+printf "%-40s", "X0201 output: JIS";
     &test("$nkf -xj",$example{'x0201.sjis'},$example{'x0201.jis'});
-print "X0201 output: EUC      ";
+printf "%-40s", "X0201 output: EUC";
     &test("$nkf -xe",$example{'x0201.jis'},$example{'x0201.euc'});
-print "X0201 output: UTF8     ";
+printf "%-40s", "X0201 output: UTF8";
     &test("$nkf -xw",$example{'x0201.jis'},$example{'x0201.utf'});
 
 # MIME decode
@@ -340,8 +541,8 @@ M(T<E-R5G)4,E+R1R0C\_="0J)"0D1B0B)&LD*D4Y)$,D1B0B)&LD<R1')#<D
 (9R0F)"L;*$(E
 eofeof
 
-# print "Next test is expected to Fail.\n";
-print "MIME decode (strict)   ";
+# printf "%-40s", "Next test is expected to Fail.\n";
+printf "%-40s", "MIME decode (strict)";
     $tmp = &test("$nkf -jmS",$example{'mime.iso2022'},$example{'mime.ans.strict'});
 
 $example{'mime.ans.alt'} = unpack('u',<<'eofeof');
@@ -358,15 +559,16 @@ M90H;)$(T03MZ)$X_*3MV-$$[>B1./RD[=ALH0@I"<F]K96YC87-E"ALD0C1!
 H.WHD3C\I.W8T03MZ)$X_*3MV&RA""ALD0C1!.WHD3B5&)3DE)!LH0@``
 eofeof
 
-print "MIME decode (nonstrict)";
+printf "%-40s", "MIME decode (nonstrict)";
     $tmp = &test("$nkf -jmN",$example{'mime.iso2022'},$example{'mime.ans'},$example{'mime.ans.alt'});
-    # open(OUT,">tmp1");print OUT pack('u',$tmp);close(OUT);
+    # open(OUT,">tmp1");printf "%-40s", OUT pack('u',$tmp);close(OUT);
 # unbuf mode implies more pessimistic decode
-print "MIME decode (unbuf)    ";
+printf "%-40s", "MIME decode (unbuf)";
     $tmp = &test("$nkf -jmNu",$example{'mime.iso2022'},$example{'mime.unbuf'},$example{'mime.unbuf.alt'});
-    # open(OUT,">tmp2");print OUT pack('u',$tmp);close(OUT);
-print "MIME decode (base64)   ";
-    &test("$nkf -jTmB",$example{'mime.base64'},$example{'mime.base64.ans'});
+    # open(OUT,">tmp2");printf "%-40s", OUT pack('u',$tmp);close(OUT);
+printf "%-40s", "MIME decode (base64)";
+    &test("$nkf -jmB",$example{'mime.base64'},$example{'mime.base64.ans'});
+#MIME BASE64 must be LF?
 
 # MIME ISO-8859-1
 
@@ -386,8 +588,8 @@ eofeof
 
 # Without -l, ISO-8859-1 was handled as X0201.
 
-print "MIME ISO-8859-1 (Q)    ";
-    &test("$nkf -ml",$example{'mime.is8859'},$example{'mime.is8859.ans'});
+printf "%-40s", "MIME ISO-8859-1 (Q)";
+    &test("$nkf -jml",$example{'mime.is8859'},$example{'mime.is8859.ans'});
 
 # test for -f is not so simple.
 
@@ -403,7 +605,7 @@ $example{'test_data/cr.ans'} = unpack('u',<<'eofeof');
 7&R1")$8D.21(&RA""G1E<W0*=&5S=`H`
 eofeof
 
-print "test_data/cr    ";
+printf "%-40s", "test_data/cr";
     &test("$nkf -jd",$example{'test_data/cr'},$example{'test_data/cr.ans'});
 # test_data/fixed-qencode
 
@@ -416,7 +618,7 @@ $example{'test_data/fixed-qencode.ans'} = unpack('u',<<'eofeof');
 F("`@("`@("`;)$(^93\]&RA""B`@("`@("`@&R1"/F4_/1LH0@H`
 eofeof
 
-print "test_data/fixed-qencode    ";
+printf "%-40s", "test_data/fixed-qencode";
     &test("$nkf -jmQ",$example{'test_data/fixed-qencode'},$example{'test_data/fixed-qencode.ans'});
 # test_data/long-fold-1
 
@@ -438,8 +640,8 @@ M4B`;)$(D3CE4(2,;*$(*"ALD0B0S)#,D3QLH0B!,1B`;)$(D3CE4(2,;*$(*
 !"@``
 eofeof
 
-print "test_data/long-fold-1    ";
-    &test("$nkf -jTF60",$example{'test_data/long-fold-1'},$example{'test_data/long-fold-1.ans'});
+printf "%-40s", "test_data/long-fold-1";
+    &test("$nkf -jF60",$example{'test_data/long-fold-1'},$example{'test_data/long-fold-1.ans'});
 # test_data/long-fold
 
 $example{'test_data/long-fold'} = unpack('u',<<'eofeof');
@@ -456,8 +658,8 @@ M)&\D:R0D)#<A(B1()$$D920F)$<D021G)',D+B1L)&LD*R1B)#<D<QLH0@H;
 :)$(D2B0D(2,D,R0S)$]#.R0D.50A(QLH0@H`
 eofeof
 
-print "test_data/long-fold    ";
-    &test("$nkf -jTf60",$example{'test_data/long-fold'},$example{'test_data/long-fold.ans'});
+printf "%-40s", "test_data/long-fold";
+    &test("$nkf -jf60",$example{'test_data/long-fold'},$example{'test_data/long-fold.ans'});
 # test_data/mime_out
 
 $example{'test_data/mime_out'} = unpack('u',<<'eofeof');
@@ -471,19 +673,66 @@ eofeof
 
 $example{'test_data/mime_out.ans'} = unpack('u',<<'eofeof');
 M"BTM+2T*4W5B:F5C=#H@86%A82!A86%A(&%A86$@86%A82!A86%A(&%A86$@
+M86%A82!A86%A(&%A86$@86%A82!A86%A(&%A86$@86%A80H@86%A80HM+2TM
+M"E-U8FIE8W0Z(#T_25-/+3(P,C(M2E`_0C]'>5)#2D-):TI#46U*0V=K2VE1
+M<DI#,&M,>5%X2D1-:TY343-*1&MB2T5)/3\]"B`]/TE33RTR,#(R+4I0/T(_
+M1WE20TI$<VM04U$O2D5%:U)#4D=*16=K4VE23$I%=VM44U)/2D4X:U5I4E9*
+M1F=B2T5)/3\]"B`]/TE33RTR,#(R+4I0/T(_1WE20TI&<VM8:5)F2D=!:UE3
+M4FE*1U%K2D-2;4I#9VMA0G-O46<]/3\]"BTM+2T*4W5B:F5C=#H@86%A82!A
+M86%A(&%A86$@86%A82!A86%A(&%A86$@86%A80H@/3])4T\M,C`R,BU*4#]"
+M/T=Y4D-*0TEK2D-1;4I#9VM+:'-O46<]/3\](&%A86$@86%A82!A86%A(&%A
+)86$*+2TM+0H*
+eofeof
+
+$example{'test_data/mime_out.ans.alt'} = unpack('u',<<'eofeof');
+M"BTM+2T*4W5B:F5C=#H@86%A82!A86%A(&%A86$@86%A82!A86%A(&%A86$@
 M86%A82!A86%A(&%A86$*(&%A86$@86%A82!A86%A(&%A86$@86%A80HM+2TM
 M"E-U8FIE8W0Z(#T_25-/+3(P,C(M2E`_0C]'>5)#2D-):TI#46U*0V=K2VE1
-M<DI#,&M,>5%X2D1-:TY343-*1&MK3WAS;U%G/3T_/2`*"3T_25-/+3(P,C(M
-M2E`_0C]'>5)#2D0P:U!Y4D)*15%K4FE224I%;VM3>5)-2D4P:U1I4E!*1DEK
-M5E-264=Y:$,_/2`*"3T_25-/+3(P,C(M2E`_0C]'>5)#2D9S:UAI4F9*1T%K
-M65-2:4I'46M*0U)M2D-G:V%"<V]19ST]/ST@"BTM+2T*4W5B:F5C=#H@86%A
-M82!A86%A(&%A86$@86%A82!A86%A(&%A86$@86%A82`]/TE33RTR,#(R+4I0
-M/T(_1WE20TI#26)+14D]/ST@"@D]/TE33RTR,#(R+4I0/T(_1WE20TI#46M*
-J:5%O2D-O8DM%23T_/2`@86%A80H@86%A82!A86%A(&%A86$*+2TM+0H*
+M<DI#,&M,>5%X2D1-:TY343-'>6A#/ST*(#T_25-/+3(P,C(M2E`_0C]'>5)#
+M2D1K:T]Y43E*1#AK45-214I%66M30U)+2D5S:U1#4DY*131K5'E24TI&56M7
+M0U)B1WEH0S\]"B`]/TE33RTR,#(R+4I0/T(_1WE20TI&-&M8>5)G2D=%:UEI
+M4FM*0U%K6FE1;TI'9V)+14D]/ST*+2TM+0I3=6)J96-T.B!A86%A(&%A86$@
+M86%A82!A86%A(&%A86$@86%A82!A86%A"B`]/TE33RTR,#(R+4I0/T(_1WE2
+M0TI#26M*0U%M2D-G:TMH<V]19ST]/ST@86%A82!A86%A(&%A86$*(&%A86$*
+&+2TM+0H*
+eofeof
+
+$example{'test_data/mime_out.ans.alt2'} = unpack('u',<<'eofeof');
+M"BTM+2T*4W5B:F5C=#H@86%A82!A86%A(&%A86$@86%A82!A86%A(&%A86$@
+M86%A82!A86%A(&%A86$@86%A82!A86%A(&%A86$@86%A80H@86%A80HM+2TM
+M"E-U8FIE8W0Z(#T_25-/+3(P,C(M2E`_0C]'>5)#2D-):TI#46U*0V=K2VE1
+M<DI#,&M,>5%X2D1-:TY343-*1&MK3WE1.4=Y:$,_/0H@/3])4T\M,C`R,BU*
+M4#]"/T=Y4D-*1#AK45-214I%66M30U)+2D5S:U1#4DY*131K5'E24TI&56M7
+M0U)B2D8T:UAY4F='>6A#/ST*(#T_25-/+3(P,C(M2E`_0C]'>5)#2D=%:UEI
+M4FM*0U%K6FE1;TI'9V)+14D]/ST*+2TM+0I3=6)J96-T.B!A86%A(&%A86$@
+M86%A82!A86%A(&%A86$@86%A82!A86%A(#T_25-/+3(P,C(M2E`_0C]'>5)#
+M2D-):TI"<V]19ST]/ST*(#T_25-/+3(P,C(M2E`_0C]'>5)#2D-9:TM#47%'
+@>6A#/ST@86%A82!A86%A(&%A86$@86%A80HM+2TM"@H`
+eofeof
+
+$example{'test_data/mime_out.ans.alt3'} = unpack('u',<<'eofeof');
+M"BTM+2T*4W5B:F5C=#H@86%A82!A86%A(&%A86$@86%A82!A86%A(&%A86$@
+M86%A82!A86%A(&%A86$@86%A82!A86%A(&%A86$@86%A80H@86%A80HM+2TM
+M"E-U8FIE8W0Z(#T_25-/+3(P,C(M2E`_0C]'>5)#2D-):TI#46U*0V=K2VE1
+M<DI#,&M,>5%X2D1-:TY343-*1&MK3WE1.4=Y:$,_/0H@/3])4T\M,C`R,BU*
+M4#]"/T=Y4D-*1#AK45-214I%66M30U)+2D5S:U1#4DY*131K5'E24TI&56M7
+M0U)B2D8T:UAX<V]19ST]/ST*(#T_25-/+3(P,C(M2E`_0C]'>5)#2D=!:UE3
+M4FE*1U%K2D-2;4I#9VMA0G-O46<]/3\]"BTM+2T*4W5B:F5C=#H@86%A82!A
+M86%A(&%A86$@86%A82!A86%A(&%A86$@86%A82`]/TE33RTR,#(R+4I0/T(_
+M1WE20TI#26M*0G-O46<]/3\]"B`]/TE33RTR,#(R+4I0/T(_1WE20TI#66M+
+D0U%Q1WEH0S\](&%A86$@86%A82!A86%A(&%A86$*+2TM+0H*1
 eofeof
 
-print "test_data/mime_out    ";
-    &test("$nkf -jM",$example{'test_data/mime_out'},$example{'test_data/mime_out.ans'});
+printf "%-40s", "test_data/mime_out";
+    &test("$nkf -jM",$example{'test_data/mime_out'},$example{'test_data/mime_out.ans'},$example{'test_data/mime_out.ans.alt'},$example{'test_data/mime_out.ans.alt2'},$example{'test_data/mime_out.ans.alt3'});
+# test_data/mime_out3
+
+$example{'test_data/mime_out3'} = "\x82\xD9\x82\xB0 A";
+
+$example{'test_data/mime_out3.ans'} = "=?ISO-2022-JP?B?GyRCJFskMhsoQg==?= A";
+
+printf "%-40s", "test_data/mime_out3";
+    &test("$nkf -jSM",$example{'test_data/mime_out3'},$example{'test_data/mime_out3.ans'});
 # test_data/multi-line
 
 $example{'test_data/multi-line'} = unpack('u',<<'eofeof');
@@ -500,8 +749,28 @@ MHJ3(I,&DY:2FI,>DP:3GI/.DKJ3LI.NDJZ3BI+>D\Z3*I*2AHPJDLZ2SI,_#
 8NZ2DN=2AHP`*I+.DLZ3/P[NDI+G4H:,*
 eofeof
 
-print "test_data/multi-line    ";
+printf "%-40s", "test_data/multi-line";
     &test("$nkf -e",$example{'test_data/multi-line'},$example{'test_data/multi-line.ans'});
+# test_data/-Z4
+
+$example{'test_data/-Z4'} = unpack('u',<<'eofeof');
+MH:.AUJ'7H:*AIJ&\H:NAK*6AI:*EHZ6DI:6EIJ6GI:BEJ:6JI:NEK*6MI:ZE
+MKZ6PI;&ELJ6SI;2EM:6VI;>EN*6YI;JENZ6\I;VEOJ6_I<"EP:7"I<.EQ*7%
+MI<:EQZ7(I<FERJ7+I<RES:7.I<^ET*71I=*ETZ74I=6EUJ77I=BEV:7:I=NE
+KW*7=I=ZEWZ7@I>&EXJ7CI>2EY:7FI>>EZ*7II>JEZZ7LI>VE[Z7RI?.E]```
+eofeof
+
+$example{'test_data/-Z4.ans'} = unpack('u',<<'eofeof');
+MCJ&.HHZCCJ2.I8ZPCMZ.WXZGCK&.J(ZRCJF.LXZJCK2.JXZUCK:.MH[>CK>.
+MMX[>CKB.N([>CKF.N8[>CKJ.NH[>CKN.NX[>CKR.O([>CKV.O8[>CKZ.OH[>
+MCK^.OX[>CL".P([>CL&.P8[>CJ^.PH["CMZ.PX[#CMZ.Q([$CMZ.Q8[&CL>.
+MR([)CLJ.RH[>CLJ.WX[+CLN.WH[+CM^.S([,CMZ.S([?CLV.S8[>CLV.WX[.
+MCLZ.WH[.CM^.SX[0CM&.TH[3CJR.U(ZMCM6.KH[6CM>.V([9CMJ.VX[<CJ:.
+%W8ZSCMX`
+eofeof
+
+printf "%-40s", "test_data/-Z4    ";
+    &test("$nkf -eEZ4",$example{'test_data/-Z4'},$example{'test_data/-Z4.ans'});
 # test_data/nkf-19-bug-1
 
 $example{'test_data/nkf-19-bug-1'} = unpack('u',<<'eofeof');
@@ -512,7 +781,7 @@ $example{'test_data/nkf-19-bug-1.ans'} = unpack('u',<<'eofeof');
 8&R1")"8D*R0D&RA""ALD0CI81B,;*$(*
 eofeof
 
-print "test_data/nkf-19-bug-1    ";
+printf "%-40s", "test_data/nkf-19-bug-1";
     &test("$nkf -Ej",$example{'test_data/nkf-19-bug-1'},$example{'test_data/nkf-19-bug-1.ans'});
 # test_data/nkf-19-bug-2
 
@@ -524,7 +793,7 @@ $example{'test_data/nkf-19-bug-2.ans'} = unpack('u',<<'eofeof');
 %I-NDL@H`
 eofeof
 
-print "test_data/nkf-19-bug-2    ";
+printf "%-40s", "test_data/nkf-19-bug-2";
     &test("$nkf -Ee",$example{'test_data/nkf-19-bug-2'},$example{'test_data/nkf-19-bug-2.ans'});
 # test_data/nkf-19-bug-3
 
@@ -536,7 +805,7 @@ $example{'test_data/nkf-19-bug-3.ans'} = unpack('u',<<'eofeof');
 8[;'Q\,&L"N6ZSN\*\NT)ON7.SL_+"0D*
 eofeof
 
-print "test_data/nkf-19-bug-3    ";
+printf "%-40s", "test_data/nkf-19-bug-3";
     &test("$nkf -e",$example{'test_data/nkf-19-bug-3'},$example{'test_data/nkf-19-bug-3.ans'});
 # test_data/non-strict-mime
 
@@ -551,8 +820,8 @@ M&R1")$8D)"0_)$`D)"1&)%XD.2$C&RA"#0H-"ALD0CMD)$\[?B$Y)6PE.21+
 <)&(]<20K)#LD1B0D)#\D0"0D)$8D)"1>&RA""@``
 eofeof
 
-print "test_data/non-strict-mime    ";
-    &test("$nkf -jTmN",$example{'test_data/non-strict-mime'},$example{'test_data/non-strict-mime.ans'});
+printf "%-40s", "test_data/non-strict-mime";
+    &test("$nkf -jmN",$example{'test_data/non-strict-mime'},$example{'test_data/non-strict-mime.ans'});
 # test_data/q-encode-softrap
 
 $example{'test_data/q-encode-softrap'} = unpack('u',<<'eofeof');
@@ -563,8 +832,8 @@ $example{'test_data/q-encode-softrap.ans'} = unpack('u',<<'eofeof');
 >&R1"-$$[>B4S(3PE221.&RA""ALD0DI1-#D;*$(*
 eofeof
 
-print "test_data/q-encode-softrap    ";
-    &test("$nkf -jTmQ",$example{'test_data/q-encode-softrap'},$example{'test_data/q-encode-softrap.ans'});
+printf "%-40s", "test_data/q-encode-softrap";
+    &test("$nkf -jmQ",$example{'test_data/q-encode-softrap'},$example{'test_data/q-encode-softrap.ans'});
 # test_data/rot13
 
 $example{'test_data/rot13'} = unpack('u',<<'eofeof');
@@ -583,7 +852,7 @@ M4U-U4U-3>5-34SE355-V4%%?>6%K4WU3.5-54WIY(F-H4V13/5,O4VI31%!2
 A&RA""@HE(')P=6(@)W5B='(G('P@87AS("UE"G5B='(*
 eofeof
 
-print "test_data/rot13    ";
+printf "%-40s", "test_data/rot13";
     &test("$nkf -jr",$example{'test_data/rot13'},$example{'test_data/rot13.ans'});
 # test_data/slash
 
@@ -595,8 +864,8 @@ $example{'test_data/slash.ans'} = unpack('u',<<'eofeof');
 7("`]/U8\5"U5.5=%2RTK.U<U32LE+PH`
 eofeof
 
-print "test_data/slash    ";
-    &test("$nkf  ",$example{'test_data/slash'},$example{'test_data/slash.ans'});
+printf "%-40s", "test_data/slash";
+    &test("$nkf -j",$example{'test_data/slash'},$example{'test_data/slash.ans'});
 # test_data/z1space-0
 
 $example{'test_data/z1space-0'} = unpack('u',<<'eofeof');
@@ -607,7 +876,7 @@ $example{'test_data/z1space-0.ans'} = unpack('u',<<'eofeof');
 "H:$`
 eofeof
 
-print "test_data/z1space-0    ";
+printf "%-40s", "test_data/z1space-0";
     &test("$nkf -e -Z",$example{'test_data/z1space-0'},$example{'test_data/z1space-0.ans'});
 # test_data/z1space-1
 
@@ -619,7 +888,7 @@ $example{'test_data/z1space-1.ans'} = unpack('u',<<'eofeof');
 !(```
 eofeof
 
-print "test_data/z1space-1    ";
+printf "%-40s", "test_data/z1space-1";
     &test("$nkf -e -Z1",$example{'test_data/z1space-1'},$example{'test_data/z1space-1.ans'});
 # test_data/z1space-2
 
@@ -631,7 +900,149 @@ $example{'test_data/z1space-2.ans'} = unpack('u',<<'eofeof');
 "("``
 eofeof
 
-print "test_data/z1space-2    ";
+printf "%-40s", "test_data/z1space-2";
     &test("$nkf -e -Z2",$example{'test_data/z1space-2'},$example{'test_data/z1space-2.ans'});
-
+# test_data/bug2273
+
+$example{'test_data/bug2273'} = unpack('u',<<'eofeof');
+M/3]I<V\M,C`R,BUJ<#]Q/STY-CU!,CTX1CU",STY,3U&.#TX1$P].$0].3`]
+M.#$]038*:'1T<#HO+V5X86UP;&4N8V]M+S]O<&4]<V5L"FAT='`Z+R]E>&UA
+,<&QE+FIP+PHN+BX*
+eofeof
+
+$example{'test_data/bug2273.ans'} = unpack('u',<<'eofeof');
+MS*2^M<+ZN:VY\**H"FAT='`Z+R]E>&%M<&QE+F-O;2\_;W!E/7-E;`IH='1P
+3.B\O97AM87!L92YJ<"\*+BXN"@``
+eofeof
+
+printf "%-40s", "test_data/bug2273";
+    &test("$nkf -e",$example{'test_data/bug2273'},$example{'test_data/bug2273.ans'});
+# test_data/forum15899
+
+$example{'test_data/forum15899'} = unpack('u',<<'eofeof');
+I6#H@XX&"XX&$XX&&XX&(XX&*XX&+XX&-XX&/XX&1XX&3XX&5(..!EPH`
+eofeof
+
+$example{'test_data/forum15899.ans'} = unpack('u',<<'eofeof');
+M6#H@/3])4T\M,C`R,BU*4#]"/T=Y4D-*0TEK2D-1;4I#9VM+:5%R2D,P:TQY
+=47A*1$UK3E)S;U%I06)*14EK3GAS;U%G/3T_/0H`
+eofeof
+
+printf "%-40s", "test_data/forum15899";
+    &test("$nkf -Mj",$example{'test_data/forum15899'},$example{'test_data/forum15899.ans'});
+# test_data/bugs10904
+
+$example{'test_data/bugs10904'} = unpack('u',<<'eofeof');
+M4W5B:F5C=#H@Z*FFZ:B3YY2HXX.AXX.\XX.KZ*&HZ:&,(.BIINFHD^>4J..#
+MH>.#O..#J^BAJ.FAC"#HJ:;IJ)/GE*CC@Z'C@[SC@ZOHH:CIH8P@Z*FFZ:B3
+3YY2HXX.AXX.\XX.KZ*&HZ:&,"@``
+eofeof
+
+$example{'test_data/bugs10904.ans'} = unpack('u',<<'eofeof');
+M4W5B:F5C=#H@/3])4T\M,C`R,BU*4#]"/T=Y4D-/,C0T33`Q4DI716A00U9R
+?4U0Q0V%H<V]1:4%B2D5)-V)J9WI45D5B2T5)/3\]"@``
+M(#T_25-/+3(P,C(M2E`_0C]'>5)#2E=%:%!#5G)35#%#86AS;U%I06)*14DW
+?8FIG>E1616Q94T4X2E=T2E!52G%'>6A#24$]/3\]"@``
+M(#T_25-/+3(P,C(M2E`_0C]'>5)#3S(T-$TP,5)*5T5H4$-6<E-4,4-A:'-O
+'46<]/3\]"@``
+eofeof
+
+printf "%-40s", "test_data/bugs10904";
+    &test("$nkf -Mj",$example{'test_data/bugs10904'},$example{'test_data/bugs10904.ans'});
+
+printf "%-40s", "Guess NL";
+&command_tests(
+       "$nkf --guess","none",      "ASCII\n",
+       "$nkf --guess","\n",        "ASCII (LF)\n",
+       "$nkf --guess","\n\n",      "ASCII (LF)\n",
+       "$nkf --guess","\n\r",      "ASCII (MIXED NL)\n",
+       "$nkf --guess","\n\r\n",    "ASCII (MIXED NL)\n",
+       "$nkf --guess","\n.\n",     "ASCII (LF)\n",
+       "$nkf --guess","\n.\r",     "ASCII (MIXED NL)\n",
+       "$nkf --guess","\n.\r\n",   "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r",        "ASCII (CR)\n",
+       "$nkf --guess","\r\r",      "ASCII (CR)\n",
+       "$nkf --guess","\r\r\n",    "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r.\n",     "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r.\r",     "ASCII (CR)\n",
+       "$nkf --guess","\r.\r\n",   "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r\n",      "ASCII (CRLF)\n",
+       "$nkf --guess","\r\n\n",    "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r\n\r",    "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r\n\r\n",  "ASCII (CRLF)\n",
+       "$nkf --guess","\r\n.\n",   "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r\n.\r",   "ASCII (MIXED NL)\n",
+       "$nkf --guess","\r\n.\r\n", "ASCII (CRLF)\n");
+
+printf "%-40s", "Convert NL to LF";
+&command_tests(
+       "$nkf -jLu","none",      "none",
+       "$nkf -jLu","\n",        "\n",
+       "$nkf -jLu","\n\n",      "\n\n",
+       "$nkf -jLu","\n\r",      "\n\n",
+       "$nkf -jLu","\n\r\n",    "\n\n",
+       "$nkf -jLu","\n.\n",     "\n.\n",
+       "$nkf -jLu","\n.\r",     "\n.\n",
+       "$nkf -jLu","\n.\r\n",   "\n.\n",
+       "$nkf -jLu","\r",        "\n",
+       "$nkf -jLu","\r\r",      "\n\n",
+       "$nkf -jLu","\r\r\n",    "\n\n",
+       "$nkf -jLu","\r.\n",     "\n.\n",
+       "$nkf -jLu","\r.\r",     "\n.\n",
+       "$nkf -jLu","\r.\r\n",   "\n.\n",
+       "$nkf -jLu","\r\n",      "\n",
+       "$nkf -jLu","\r\n\n",    "\n\n",
+       "$nkf -jLu","\r\n\r",    "\n\n",
+       "$nkf -jLu","\r\n\r\n",  "\n\n",
+       "$nkf -jLu","\r\n.\n",   "\n.\n",
+       "$nkf -jLu","\r\n.\r",   "\n.\n",
+       "$nkf -jLu","\r\n.\r\n", "\n.\n");
+
+printf "%-40s", "Convert NL to LF";
+&command_tests(
+       "$nkf -jLm","none",      "none",
+       "$nkf -jLm","\n",        "\r",
+       "$nkf -jLm","\n\n",      "\r\r",
+       "$nkf -jLm","\n\r",      "\r\r",
+       "$nkf -jLm","\n\r\n",    "\r\r",
+       "$nkf -jLm","\n.\n",     "\r.\r",
+       "$nkf -jLm","\n.\r",     "\r.\r",
+       "$nkf -jLm","\n.\r\n",   "\r.\r",
+       "$nkf -jLm","\r",        "\r",
+       "$nkf -jLm","\r\r",      "\r\r",
+       "$nkf -jLm","\r\r\n",    "\r\r",
+       "$nkf -jLm","\r.\n",     "\r.\r",
+       "$nkf -jLm","\r.\r",     "\r.\r",
+       "$nkf -jLm","\r.\r\n",   "\r.\r",
+       "$nkf -jLm","\r\n",      "\r",
+       "$nkf -jLm","\r\n\n",    "\r\r",
+       "$nkf -jLm","\r\n\r",    "\r\r",
+       "$nkf -jLm","\r\n\r\n",  "\r\r",
+       "$nkf -jLm","\r\n.\n",   "\r.\r",
+       "$nkf -jLm","\r\n.\r",   "\r.\r",
+       "$nkf -jLm","\r\n.\r\n", "\r.\r");
+
+printf "%-40s", "Convert NL to CRLF";
+&command_tests(
+       "$nkf -jLw","none",      "none",
+       "$nkf -jLw","\n",        "\r\n",
+       "$nkf -jLw","\n\n",      "\r\n\r\n",
+       "$nkf -jLw","\n\r",      "\r\n\r\n",
+       "$nkf -jLw","\n\r\n",    "\r\n\r\n",
+       "$nkf -jLw","\n.\n",     "\r\n.\r\n",
+       "$nkf -jLw","\n.\r",     "\r\n.\r\n",
+       "$nkf -jLw","\n.\r\n",   "\r\n.\r\n",
+       "$nkf -jLw","\r",        "\r\n",
+       "$nkf -jLw","\r\r",      "\r\n\r\n",
+       "$nkf -jLw","\r\r\n",    "\r\n\r\n",
+       "$nkf -jLw","\r.\n",     "\r\n.\r\n",
+       "$nkf -jLw","\r.\r",     "\r\n.\r\n",
+       "$nkf -jLw","\r.\r\n",   "\r\n.\r\n",
+       "$nkf -jLw","\r\n",      "\r\n",
+       "$nkf -jLw","\r\n\n",    "\r\n\r\n",
+       "$nkf -jLw","\r\n\r",    "\r\n\r\n",
+       "$nkf -jLw","\r\n\r\r\n",  "\r\n\r\n\r\n",
+       "$nkf -jLw","\r\n.\n",   "\r\n.\r\n",
+       "$nkf -jLw","\r\n.\r",   "\r\n.\r\n",
+       "$nkf -jLw","\r\n.\r\n", "\r\n.\r\n");
 # end