Beispiel #1
0
        public void TestUserFunc_sub2()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "3を10から引く。\n" +
                "PRINT それ\n" +
                "\n");
            ni.Run(nc.Codes);
            Assert.AreEqual("7", ni.PrintLog);
        }
Beispiel #2
0
        public void Test_array2()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A[`a`]=566\n" +
                "A[`a`]を継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("566", ni.PrintLog);
        }
Beispiel #3
0
        public void Test_instance_property()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A=カウントダウンタイマー\n" +
                "B=AのNO\n" +
                "Bを継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("10", ni.PrintLog);
        }
Beispiel #4
0
        public void Test_array_array2()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "C¥1¥2¥3=2222\n" +
                "C¥1¥2¥3を継続表示\n" +
                "");
            Console.WriteLine(nc.Codes);
            ni.Run(nc.Codes);
            Assert.AreEqual("2222", ni.PrintLog);
        }
Beispiel #5
0
        public void Test_array_array8()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A[3][`a`]=222\n" +
                "B[`b`]=A\n" +
                "PRINT B[`b`][3][`a`]\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("222", ni.PrintLog);
        }
Beispiel #6
0
        public void Test_localVar_array()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "Cとは変数\n" +
                "C¥1¥2¥3=2222\n" +
                "C¥1¥2¥3を継続表示。\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("2222", ni.PrintLog);
        }
Beispiel #7
0
        public void TestOneLine()
        {
            NakoCompiler    ns     = new NakoCompiler();
            NakoInterpreter runner = new NakoInterpreter();
            NakoILCodeList  codes  = null;

            // (1)
            codes = ns.WriteIL("もし、1=1ならば、PRINT 3");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "3");

            // (2)
            runner.Reset();
            codes = ns.WriteIL("もし、1=2ならば、PRINT 3、違えば、PRINT 5");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "5");

            // (3)
            runner.Reset();
            codes = ns.WriteIL("A=1,B=2。もし,A=Bならば、PRINT`NG`。違えば、PRINT`OK`");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "OK");
        }
Beispiel #8
0
        public void Test_instance_method_without_return()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A=カウントダウンタイマー\n" +
                "Aを1でカウントダウン\n" +
                "B=AのNO\n" +
                "Bを継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("9", ni.PrintLog);
        }
Beispiel #9
0
        public void Test_Hash_Access_By_String()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A[`a`]=566\n" +
                "A[`b c d`]=566\n" +
                "c=「b c d」\n" +
                "A[c]を継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("566", ni.PrintLog);
        }
Beispiel #10
0
        public void Test_array_copy()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A[0]=1\n" +
                "A[1]=「A」\n" +
                "B = Aを配列コピー\n" +
                "B[1] = 「b」\n" +
                "A[1]を継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("A", ni.PrintLog);
        }
Beispiel #11
0
        public void Test_array4()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A=「1\r\n" +
                "10\r\n" +
                "100\r\n" +
                "566」\n" +
                "PRINT A[3]\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("566", ni.PrintLog);
        }
Beispiel #12
0
        public void TestInclude()
        {
            // (1)
            codes = ns.WriteIL(
                @"
`test.nako`を取り込む
a[`a`]=`aaa`
a[`b`]=`bbb`
a[`c`]=`ccc`
aで反復
  「***{回数}:{対象}」を継続表示
");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "***1:ddd***2:eee***3:fff***4:aaa***5:bbb***6:ccc");
        }
Beispiel #13
0
 public void TestMatch()
 {
     runner.Run(com.WriteIL(
                    "「なでしこ」の「^(.*?)こ$」を正規表現マッチを表示。"));
     Assert.AreEqual("なでしこ", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "「なでしこ」の「^(.*?)こ$」を正規表現マッチ。\n" +
                    "抽出文字列[1]を表示"));
     Assert.AreEqual("なでし", runner.PrintLog);
 }
Beispiel #14
0
        public void Test1_Normal()
        {
            // (1)
            codes = ns.WriteIL(
                "Iを1から3まで繰り返す\n" +
                "  PRINT I\n" +
                ""
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "123");

            // (2)
            codes = ns.WriteIL(
                "FROM=2;TO=5" +
                "IをFROMからTOまで繰り返す\n" +
                "  PRINT I\n" +
                ""
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "2345");
        }
Beispiel #15
0
        public void TestForeachLoopAccessToHash()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A[`a`]=566\n" +
                "A[`b`]=666\n" +
                "B[0]=「a」\n" +
                "B[1]=「b」\n" +
                "Bで反復\n" +
                "  A[対象]を継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("566666", ni.PrintLog);
        }
Beispiel #16
0
 public void TestExtract()
 {
     runner.Run(com.WriteIL(
                    "S=「<html><body><b>な</b><b>で</b><h1>し</h1><h2>こ</h2></body></html>」\n" +
                    "TAG=Sから「b」のタグ切り出し\n" +
                    "TAG[0]を表示。"));
     Assert.AreEqual("な", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "S=「<b>な</b><b>で</b><h1>し</h1><h2>こ</h2>」\n" +
                    "TAG=Sから「b」のタグ切り出し\n" +
                    "TAG[1]を表示。"));
     Assert.AreEqual("で", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "S=「<な>な</な><で>で</で><し>し</し><こ>こ</こ>」\n" +
                    "TAG=Sから「で」のタグ切り出し\n" +
                    "TAG[0]を表示。"));
     Assert.AreEqual("で", runner.PrintLog);
 }
Beispiel #17
0
        public void Test_instance_argument()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "●test({カウントダウンタイマー}Oを)\n" +
                "  O = Oを1でカウントダウン\n" +
                "  Oで戻る\n" +
                "A=カウントダウンタイマー\n" +
                "A=Aをtest\n" +
                "C=AのNO\n" +
                "Cを継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("9", ni.PrintLog);
        }
Beispiel #18
0
        public void TestInsertArray()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "I[0]=000\n" +
                "I[1]=333\n" +
                "I[2]=444\n" +
                "J=「111{~}222」\n" +
                "Iの1にJを配列一括挿入\n" +
                "Iの配列要素数を継続表示\n" +
                "「:」継続表示\n" +
                "I[3]を継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("5:333", ni.PrintLog);
        }
Beispiel #19
0
        public void Test_multi_instance()
        {
            NakoCompiler    nc = new NakoCompiler();
            NakoInterpreter ni = new NakoInterpreter();

            nc.WriteIL(
                "A=カウントダウンタイマー\n" +
                "B=カウントダウンタイマー\n" +
                "A=Aを1でカウントダウン\n" +
                "B=Bを3でカウントダウン\n" +
                "C=AのNO\n" +
                "D=BのNO\n" +
                "Cを継続表示\n" +
                "Dを継続表示\n" +
                "");
            ni.Run(nc.Codes);
            Assert.AreEqual("97", ni.PrintLog);
        }
Beispiel #20
0
        public void TestNestl()
        {
            NakoCompiler    ns     = new NakoCompiler();
            NakoInterpreter runner = new NakoInterpreter();
            NakoILCodeList  codes  = null;

            codes = ns.WriteIL(
                "A=1\n" +
                "(A <= 2)の間\n" +
                "  PRINT `A`&A;\n" +
                "  A=A+1;\n" +
                "  B=1\n" +
                "  (B <= 3)の間\n" +
                "    PRINT `B`&B;\n" +
                "    B=B+1\n" +
                "\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "A1B1B2B3A2B1B2B3");
        }
Beispiel #21
0
        void OneLinerMode(string code)
        {
            var compiler = new NakoCompiler(GetLoaderInfo())
            {
                DebugMode = DebugMode,
            };

            var runner = new NakoInterpreter(compiler.WriteIL(code));

            SetCommandLine(runner);

            if (DescriptMode)
            {
                Console.WriteLine("----------");
                Console.WriteLine("* TOKENS:");
                Console.WriteLine(compiler.Tokens.toTypeString());
                Console.WriteLine("----------");
                Console.WriteLine("* NODES:");
                Console.WriteLine(compiler.TopNode.Children.toTypeString());
                Console.WriteLine("----------");
                Console.WriteLine("* CODES:");
                Console.WriteLine(compiler.Codes.ToAddressString());
                Console.WriteLine("----------");
                Console.WriteLine("* RUN");
                runner.debugMode = DebugMode;
                runner.Run();
                Console.WriteLine("LOG=" + runner.PrintLog);
                Console.WriteLine("----------");
                Console.WriteLine("ok.");
            }
            else
            {
                runner.debugMode = DebugMode;
                runner.Run();
                PrintLog = runner.PrintLog;
                // Console.WriteLine(runner.PrintLog); // Consoleでは stdout へ直接出力しているはずなので不要のはず
            }
        }
 public void Test1_Normal()
 {
     // (1)
     codes = ns.WriteIL(
         "A[0] = `aaa`\n" +
         "A[1] = `bbb`\n" +
         "A[2] = `ccc`\n" +
         "Aを反復\n" +
         "  PRINT 「***{回数}:{対象}」"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:aaa***2:bbb***3:ccc");
     codes = ns.WriteIL(
         "A[0] = `aaa`\n" +
         "A[1] = `bbb`\n" +
         "A[2] = `ccc`\n" +
         "Aを反復\n" +
         "  PRINT 「***{回数}:{対象}」" +
         "  続ける"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:aaa***2:bbb***3:ccc");
 }
Beispiel #23
0
 public void TestUrlDecode()
 {
     runner.Run(com.WriteIL(
                    "「%e3%81%aa%e3%81%a7%e3%81%97%e3%81%93」をURLデコードして表示。"));
     Assert.AreEqual("なでしこ", runner.PrintLog);
 }
 public void TestToInt()
 {
     runner.Run(com.WriteIL(
                    "A=「10」\n" +
                    "B=(A>3)\n" +
                    "Bを表示"));
     Assert.AreEqual("False", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "A=「10」\n" +
                    "C=Aを整数変換\n" +
                    "B=(C>3)\n" +
                    "Bを表示"));
     Assert.AreEqual("True", runner.PrintLog);
 }
Beispiel #25
0
        public void Test_mkdir()
        {
            string hoge = System.IO.Path.GetTempPath() + ConvertPath("\\hoge\\fuga");

            // ディレクトリの作成
            runner.Run(com.WriteIL(
                           "DIR=「" + hoge + "」\n" +
                           "DIRにフォルダ作成。\n" +
                           "(DIRがフォルダ存在?)を表示。\n" +
                           "\n" +
                           ""));
            Assert.AreEqual("1", runner.PrintLog);
        }
 public void TestExtract()
 {
     runner.Run(com.WriteIL(
                    "S=「<html><body><b>な</b><b>で</b><h1>し</h1><h2>こ</h2></body></html>」\n" +
                    "TAG=Sを「h1」タグで区切る\n" +
                    "TAG[0]を表示。"));
     Assert.AreEqual("<h1>し</h1>", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "S=「<html><body><b>な</b><b>で</b><h1>し</h1><h2>こ</h2></body></html>」\n" +
                    "TAG=Sから「b」のタグ切り出し\n" +
                    "TAG[0]を表示。"));
     Assert.AreEqual("な", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "S=「<b>な</b><b>で</b><h1>し</h1><h2>こ</h2>」\n" +
                    "TAG=Sから「b」のタグ切り出し\n" +
                    "TAG[1]を表示。"));
     Assert.AreEqual("で", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "S=「<な>な</な><で>で</で><し>し</し><こ>こ</こ>」\n" +
                    "TAG=Sから「で」のタグ切り出し\n" +
                    "TAG[0]を表示。"));
     Assert.AreEqual("で", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "S=「<な>な</な><で>で</で><し>し</し><こ>こ</こ>」\n" +
                    "TAG=Sから「で」のタグ切り出し\n" +
                    "TAGで反復\n" +
                    "  (対象 == 「で」)を表示。"));
     Assert.AreEqual("True", runner.PrintLog);
     runner.Run(com.WriteIL(
                    "S=「<td><p align='right'></p></td>」\n" +
                    "TAG=Sから「td」のタグ切り出し\n" +
                    "TAG[0]を表示。"));
     Assert.AreEqual("<p align='right' />", runner.PrintLog);
 }
Beispiel #27
0
        public void TestNormal()
        {
            NakoCompiler    ns     = new NakoCompiler();
            NakoInterpreter runner = new NakoInterpreter();
            NakoILCodeList  codes  = null;

            // (1)
            codes = ns.WriteIL(
                "A=1\n" +
                "B=2\n" +
                "もし、A=Bならば\n" +
                "  PRINT`真`\n" +
                "違えば\n" +
                "  PRINT`偽`\n");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "偽");


            // (2)
            codes = ns.WriteIL(
                "A=2\n" +
                "もし、A=1ならば\n" +
                "  PRINT 1\n" +
                "違えば、もし、A=2ならば\n" +
                "  PRINT 2\n" +
                "違えば\n" +
                "  PRINT `*`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "2");

            // (3)
            codes = ns.WriteIL(
                "A=1\n" +
                "もし、A=1ならば\n" +
                "  PRINT 1\n" +
                "違えば、もし、A=2ならば\n" +
                "  PRINT 2\n" +
                "違えば\n" +
                "  PRINT `*`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "1");

            // (4)
            codes = ns.WriteIL(
                "A=3\n" +
                "もし、A=1ならば\n" +
                "  PRINT 1\n" +
                "違えば、もし、A=2ならば\n" +
                "  PRINT 2\n" +
                "違えば、もし、A=3ならば\n" +
                "  PRINT 3\n" +
                "違えば、もし、A=4ならば\n" +
                "  PRINT 4\n" +
                "違えば\n" +
                "  PRINT `*`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "3");

            // (5)
            codes = ns.WriteIL(
                "A=8\n" +
                "もし、A=1ならば\n" +
                "  PRINT 1\n" +
                "違えば、もし、A=2ならば\n" +
                "  PRINT 2\n" +
                "違えば、もし、A=3ならば\n" +
                "  PRINT 3\n" +
                "違えば、もし、A=4ならば\n" +
                "  PRINT 4\n" +
                "違えば\n" +
                "  PRINT `*`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "*");
        }
Beispiel #28
0
        public void TestNest()
        {
            NakoCompiler    ns     = new NakoCompiler();
            NakoInterpreter runner = new NakoInterpreter();
            NakoILCodeList  codes  = null;

            // (1)
            codes = ns.WriteIL(
                "A=1\n" +
                "B=2\n" +
                "もし、A=1ならば\n" +
                "  もし、B=1ならば\n" +
                "    PRINT `11`\n" +
                "  違えば\n" +
                "    PRINT `12`\n" +
                "違えば\n" +
                "  もし、B=1ならば\n" +
                "    PRINT `21`\n" +
                "  違えば\n" +
                "    PRINT`22`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "12");


            // (2)
            codes = ns.WriteIL(
                "A=1\n" +
                "B=1\n" +
                "もし、A=1ならば\n" +
                "  もし、B=1ならば\n" +
                "    PRINT `11`\n" +
                "  違えば\n" +
                "    PRINT `12`\n" +
                "違えば\n" +
                "  もし、B=1ならば\n" +
                "    PRINT `21`\n" +
                "  違えば\n" +
                "    PRINT`22`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "11");

            // (3)
            codes = ns.WriteIL(
                "A=2\n" +
                "B=2\n" +
                "もし、A=1ならば\n" +
                "  もし、B=1ならば\n" +
                "    PRINT `11`\n" +
                "  違えば\n" +
                "    PRINT `12`\n" +
                "違えば\n" +
                "  もし、B=1ならば\n" +
                "    PRINT `21`\n" +
                "  違えば\n" +
                "    PRINT`22`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "22");
        }
Beispiel #29
0
 public void TestSysFunc_AddAndLet()
 {
     codes = ns.WriteIL(
         "A=10に2を足す\n" +
         "PRINT A\n" +
         ""
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "12");
 }
Beispiel #30
0
 public void TestToday()
 {
     runner.Run(com.WriteIL(
                    "今日を表示。"));
     Assert.AreEqual(runner.PrintLog, DateTime.Today.ToString("yyyy-MM-dd"));
 }