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); }
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); }
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); }
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); }
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); }
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); }
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"); }
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); }
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); }
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); }
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); }
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"); }
public void TestMatch() { runner.Run(com.WriteIL( "「なでしこ」の「^(.*?)こ$」を正規表現マッチを表示。")); Assert.AreEqual("なでしこ", runner.PrintLog); runner.Run(com.WriteIL( "「なでしこ」の「^(.*?)こ$」を正規表現マッチ。\n" + "抽出文字列[1]を表示")); Assert.AreEqual("なでし", runner.PrintLog); }
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"); }
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); }
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); }
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); }
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); }
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); }
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"); }
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"); }
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); }
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); }
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, "*"); }
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"); }
public void TestSysFunc_AddAndLet() { codes = ns.WriteIL( "A=10に2を足す\n" + "PRINT A\n" + "" ); runner.Run(codes); Assert.AreEqual(runner.PrintLog, "12"); }
public void TestToday() { runner.Run(com.WriteIL( "今日を表示。")); Assert.AreEqual(runner.PrintLog, DateTime.Today.ToString("yyyy-MM-dd")); }