コード例 #1
0
        public void DurabilityParseString()
        {
            var engine = new MonkeyspeakEngine();

            // Set the trigger limit to int.MaxValue to prevent TriggerLimit reached exceptions
            engine.Options.TriggerLimit = int.MaxValue;

            var sb = new StringBuilder();

            for (int i = 0; i < 1; i++)
            {
                sb.AppendLine();
                sb.AppendLine("(0:0) when the script is started,");
                sb.AppendLine("(5:100) set %hello to {Hello World}.");
                sb.AppendLine("(1:104) and variable %hello equals {this will be false move on to next condition}");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = % helloNum} to the console.");
                sb.AppendLine("(1:104) and variable %hello equals {Hello World}");
                sb.AppendLine("(5:101) set %helloNum to 5.");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = %helloNum} to the console.");
                sb.AppendLine();
            }
            Logger.Info(sb.ToString());
            Page page = engine.LoadFromString(sb.ToString());

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            var sb2 = new StringBuilder();

            for (int i = 0; i < 5; i++)
            {
                sb.AppendLine();
                sb.AppendLine("(0:0) when the script is started,");
                sb.AppendLine("(5:100) set %hello to {Hello World}.");
                sb.AppendLine("(1:104) and variable %hello equals {this will be false move on to next condition}");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = % helloNum} to the console.");
                sb.AppendLine("(1:104) and variable %hello equals {Hello World}");
                sb.AppendLine("(5:101) set %helloNum to 5.");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = % helloNum} to the console.");
                sb.AppendLine();
            }

            engine.LoadFromString(page, sb2.ToString());

            page.Error += DebugAllErrors;

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            Logger.Info($"Triggers: {page.Size}");
            page.Execute();
        }
コード例 #2
0
        public void NonExistantTimerTest()
        {
            var timerLibTestScript = @"

(0:0) when the script starts,
    (5:300) create timer 13 to go off every 900 second(s) with a start delay of 0 second(s).
    (5:102) print {Timer 13 created} to the console.

(0:300) when timer 2 goes off,
    (5:302) get current timer and put the id into variable %timerId.
    (5:304) get the current uptime and put it into variable %currentTime.
    (5:102) print {Timer %timerId at %currentTime secs} to the console.
";
            var engine             = new MonkeyspeakEngine();

            engine.Options.Debug = true;
            var page = engine.LoadFromString(timerLibTestScript);

            //page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            // page.RemoveLibrary<Monkeyspeak.Libraries.Debug>();

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            page.Execute(0);
            System.Threading.Thread.Sleep(100);
            page.Dispose();
        }
コード例 #3
0
        public void Tables()
        {
            for (int i = 0; i < 1; i++)
            {
                var engine = new MonkeyspeakEngine();
                engine.Options.Debug = false;

                Logger.Info(tableScript);
                Page page = engine.LoadFromString(tableScript); // replace with tableScriptMini to see results of that script

                page.Error += DebugAllErrors;
                page.AddTriggerHandler(TriggerCategory.Condition, 666, AlwaysFalseCond);
                page.LoadAllLibraries();
                //   page.RemoveLibrary<Monkeyspeak.Libraries.Debug>();
                page.SetVariable("%testVariable", "Hello WOrld", true);

                page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

                // Trigger count created by subscribing to TriggerAdded event and putting triggers into a list.
                Console.WriteLine("Trigger Count: " + page.Size);
                Logger.Assert(page.Size > 0, "Page size was 0 = FAIL!");
                page.Execute();
                foreach (var variable in page.Scope)
                {
                    Logger.Info($"{variable.ToString()} {variable.GetType().Name}");
                }
            }
        }
コード例 #4
0
        public void TestReflectionLoader()
        {
            MonkeyspeakEngine engine = new MonkeyspeakEngine();
            Page page = engine.LoadFromString(@"
(0:1000)
(5:1000) {Hello Reflection Test}
(5:1001) {Hello Reflection Test 2}
");

            page.LoadLibraryFromAssembly(Assembly.GetExecutingAssembly().Location);

            page.Execute(1000);
        }
コード例 #5
0
        public void TestCompileToFile()
        {
            Logger.SingleThreaded = true;
            var engine = new MonkeyspeakEngine
            {
                Options = { TriggerLimit = int.MaxValue, Debug = false }
            };

            var sb = new StringBuilder(testScript);

            /*for (int i = 0; i <= 50; i++)
             * {
             *  sb.AppendLine();
             *  sb.AppendLine(testScript);
             *  sb.AppendLine();
             * }*/
            Stopwatch watch   = Stopwatch.StartNew();
            var       oldPage = engine.LoadFromString(sb.ToString());

            oldPage.AddTriggerHandler(TriggerCategory.Cause, 0, UnitTest1.HandleScriptStartCause);

            watch.Stop();
            Console.WriteLine($"Loaded in {watch.ElapsedMilliseconds} ms");
            Console.WriteLine($"Page Trigger Count: {oldPage.Size}");
            watch.Restart();

            oldPage.CompileToFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "test.msx"));

            watch.Stop();
            Console.WriteLine($"Compiled in {watch.ElapsedMilliseconds} ms");
            watch.Restart();

            var page = engine.LoadCompiledFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "test.msx"));

            //page.RemoveLibrary<MyLibrary>();
            watch.Stop();
            Console.WriteLine($"Loaded compiled in {watch.ElapsedMilliseconds} ms");

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();
            page.AddTriggerHandler(TriggerCategory.Cause, 0, UnitTest1.HandleScriptStartCause);
            Console.WriteLine("Page Trigger Count: " + page.Size);
            page.Execute();
            page.Dispose();
            oldPage.Dispose();
        }
コード例 #6
0
        public void GetTriggerDescriptionsTest()
        {
            MonkeyspeakEngine engine = new MonkeyspeakEngine();

            engine.Options.Debug = true;
            Page page = engine.LoadFromString(testScript);

            page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            foreach (string desc in page.GetTriggerDescriptions())
            {
                Console.WriteLine(desc);
            }
        }
コード例 #7
0
        public void DurabilityParseStringAsync()
        {
            var engine = new MonkeyspeakEngine();

            // Set the trigger limit to int.MaxValue to prevent TriggerLimit reached exceptions
            engine.Options.TriggerLimit = int.MaxValue;

            var sb = new StringBuilder();

            for (int i = 0; i < 10000; i++)
            {
                sb.AppendLine();
                sb.Append("(5:100) set %hello to {Hello World}.");
                sb.AppendLine();
            }

            Page page = engine.LoadFromString(sb.ToString());

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            var sb2 = new StringBuilder();

            for (int i = 0; i < 50000; i++)
            {
                sb2.AppendLine();
                sb2.Append("(5:100) set %hello to {Hello World}.");
                sb2.AppendLine();
            }
            var tasks = new Task[5];

            for (int i = 0; i <= tasks.Length - 1; i++)
            {
                tasks[i] = engine.LoadFromStringAsync(page, sb2.ToString());
                tasks[i].ContinueWith(task => Logger.Info($"Triggers: {page.Size}"));
            }

            page.Error += DebugAllErrors;

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            Task.WaitAll(tasks);
            Logger.Info($"Triggers: {page.Size}");
            //page.Execute(0);
        }
コード例 #8
0
        public void SetGetVariableTest()
        {
            MonkeyspeakEngine engine = new MonkeyspeakEngine();

            engine.Options.VariableCountLimit = 100000;
            Page page = engine.LoadFromString(testScript);

            page.Error += DebugAllErrors;

            for (int i = 0; i <= 10000; i++)
            {
                page.SetVariable(i.ToString(), true.ToString(), false);
            }
            foreach (var variable in page.Scope)
            {
                Console.WriteLine(variable.ToString());
            }
        }
コード例 #9
0
        public void TimerLibraryTest()
        {
            var timerLibTestScript = @"
(0:0) when the script starts,
    (5:303) pause script execution for 2 seconds.
    (5:304) get the current time in seconds and put it into variable %currentTime.
    (5:102) print {Current Time %currentTime secs} to the console.

(0:0) when the script starts,
    (5:101) set variable %timer to 1.
    (5:300) create timer %timer to go off every 2 second(s) with a start delay of 1 second(s).
    (5:300) create timer 2 to go off every 5 second(s). *don't need delay part here
    (5:300) create timer 13 to go off every 900 second(s) with a start delay of # second(s).

(0:300) when timer 2 goes off,
(0:300) when timer %timer goes off,
    (5:302) get current timer and put the id into variable %timerId.
    (5:304) get the current uptime and put it into variable %currentTime.
    (5:102) print {Timer %timerId at %currentTime secs} to the console.

(0:300) when timer 2 goes off,
(0:300) when timer %timer goes off,
    (5:302) get current timer and put the id into variable %timerId.
    (5:304) get the current uptime and put it into variable %currentTime.
    (5:102) print {timerId = %timerId at %currentTime secs} to the console.
    (5:150) take variable %i2 and add 1 to it.
    (5:102) print {elapsed count = %i2} to the console.
";
            var engine             = new MonkeyspeakEngine();

            engine.Options.Debug = true;
            var page = engine.LoadFromString(timerLibTestScript);

            page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            page.Execute(0);
            System.Threading.Thread.Sleep(10000);
            page.Dispose();
        }
コード例 #10
0
        public void IOLibraryTest()
        {
            var ioTestString = @"
(0:0) when the script starts,
	(5:100) set variable %file to {test.txt}.
	(5:102) print {%file} to the console.

(0:0) when the script starts,
	(1:200) and the file {%file} exists,
		(5:202) delete file {%file}.
		(5:203) create file {%file}.

(0:0) when the script starts,
	(1:200) and the file {%file} exists,
	(1:203) and the file {%file} can be written to,
		(5:200) append {Hello World from Monkeyspeak %VERSION!} to file {%file}.

(0:0) when the script starts,
	(5:150) take variable %test and add 2 to it.
	(5:102) print {%test} to the console.
";
            var engine       = new MonkeyspeakEngine();
            var page         = engine.LoadFromString(ioTestString);

            page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            page.Execute(0);
            foreach (var v in page.Scope)
            {
                Logger.Debug(v);
            }
        }