Exemple #1
0
    public void SimpleFunctionScopeWithContract()
    {
      ScriptContext context = new ScriptContext();
      IScriptScope scope = context.Scope;
      Script.RunCode(@"
        a = 4; b = 2; c = 3;
        function test1(a,b)
          global(c)
          [
           pre(a>0);
           post();
           invariant();
          ]
        {
          c = a+b;
          a = 15;
        }

        test1(2,3);", context);

      Assert.AreEqual(scope, context.Scope);
      Assert.AreEqual(5, context.GetItem("c", true));
      Assert.AreEqual(4, context.GetItem("a", true));
      Assert.AreEqual(2, context.GetItem("b", true));
    }
Exemple #2
0
        public void BaseOperatorsUnary()
        {
            ScriptContext context = new ScriptContext();
              Script.RunCode(@"
            a = 4; b = 2;
            a++;
            b--;
            ", context);

              Assert.AreEqual(5, context.GetItem("a", true));
              Assert.AreEqual(1, context.GetItem("b", true));
        }
    public void AstDomCompiler_CompileBinaryOperator1()
    {
      IScriptContext context = new ScriptContext();

      CodeProgram domTree = AstDomCompiler.Compile(Script.Compile("x=1+1+1;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(3, context.GetItem("x", true));
      Assert.AreEqual(3, context.Result);
    }
Exemple #4
0
        public void BaseOperatorIs()
        {
            ScriptContext context = new ScriptContext();

              Script.RunCode(@"
            a = 4;
            result =  a is int;
            ", context);

              Assert.AreEqual(true, context.GetItem("result", true));
        }
Exemple #5
0
    public void CodeValueReferenceTest()
    {
      IScriptContext context = new ScriptContext();
      CodeProgram prog1 = new CodeProgram();
      prog1.Statements.Add(
        new CodeExpressionStatement(
          new CodeAssignExpression("b",
            new CodeValueReference("Test B"))));

      CodeDomCompiler.Compile(prog1).Execute(context);

      Assert.AreEqual("Test B", context.GetItem("b", true));
    }
Exemple #6
0
    public void MachineExection()
    {
      IScriptContext context = new ScriptContext();

      //Example 0: Machine

      ExecutableMachine machine = ExecutableMachine.Create();
      SetValueOperation sv = machine.CreateOperation<SetValueOperation>();
      sv.Id = "a";
      
      machine.AX = "Hello World";
      machine.CreateOperation<RetOperation>();
      machine.Execute(context);

      object rez = context.GetItem("a", true);

      Assert.AreEqual("Hello World", rez);
    }
Exemple #7
0
    public void ArithmeticExpressions()
    {
      IScriptContext context = new ScriptContext();
      object result =
         Script.RunCode(
         @"
              a=1.0;
              b = 2.0; 
              c = 3.0; 
              d = 2.0;
              e = 18.0;
              f = 6.0;

              p = 2.0; u = 3.0; v = 1.0; r = 2.0; s = 5.0; t = 12.0;

              // r1 = 9
              r1 = a + b + c*d;

              // r2 = -2.5
              r2 = a*(b - c/d )- e/f;

              //r3 = -4.5
              r3 = a*b*((c - d )*a - p*(u - v)*(r + s))/t;

              //r4 = 65536
              r4 = 2 * d^(c*5);

              //r5 = 2
              r5 = 5 % 3;
           
              v1 = -3;
        ",
         context);

      Assert.AreEqual(9.0, context.GetItem("r1", true));
      Assert.AreEqual(-2.5, context.GetItem("r2", true));
      Assert.AreEqual(-4.5, context.GetItem("r3", true));
      Assert.AreEqual((double)65536, context.GetItem("r4", true));
      Assert.AreEqual((Int32)2, context.GetItem("r5", true));
      Assert.AreEqual(-3, context.GetItem("v1", true));
    }
Exemple #8
0
        public void VarLocalScope()
        {
            IScriptContext context = new ScriptContext();

              object resultVal =
               Script.RunCode(
               @"
               var sum = 0;

               for (var x=0; x<10; x++){
             var temp = x;
             sum += x;
               }

               return sum;
              ", context
               );

              Assert.AreEqual(45, context.GetItem("sum", true));
              Assert.AreEqual(RuntimeHost.NoVariable, context.GetItem("x", false));
        }
Exemple #9
0
        public void ContextDependantEventsAndContextSwitching()
        {
            ScriptContext c = new ScriptContext();
              c.SetItem("invoked", 0);

              ScriptContext c1 = new ScriptContext();
              c1.SetItem("invoked", 10);

              Script s = Script.Compile(
             @"
            function handler(s,e) global(invoked) {
             invoked++;
            }

            ce = new ContextEvent();
            ce.NameChanged += handler;

            return ce;
              "
             );
              s.Context = c;

              ContextEvent resultVal = (ContextEvent)s.Execute();
              resultVal.Name = "TestName";

              Assert.AreEqual(1, c.GetItem("invoked", false));

              s.Context = c1;
              resultVal.Name = "TestName2";

              Assert.AreEqual(11, c1.GetItem("invoked", false));

              s.Dispose();
              //TODO: Event Broker should be refactored
              try
              {
            resultVal.Name = "TestName 4";
              }
              catch (ScriptEventException e)
              {
            Assert.AreEqual(Strings.ContextNotFoundExceptionMessage, e.Message);
              }
        }
Exemple #10
0
        public void VarCreatesNullVariable()
        {
            IScriptContext context = new ScriptContext();

              object resultVal =
               Script.RunCode(
               @"
               var sum;
              ", context
               );

              Assert.IsNull(context.GetItem("sum", true));

              resultVal =
             Script.RunCode(
             @"
                 var sum = 2;
                ", context
             );

              Assert.AreEqual(2, context.GetItem("sum", true));
        }
Exemple #11
0
        public void VarLocalNestedScopes()
        {
            IScriptContext context = new ScriptContext();

              object resultVal =
               Script.RunCode(
               @"
             var b;

             {
               a = 2;
               b = 4;

               {
              var b = 3;

              {
                var a;
                a = 2;
              }

               }
             }

              ", context
               );

              Assert.AreEqual(2, context.GetItem("a", true));
              Assert.AreEqual(4, context.GetItem("b", true));
        }
Exemple #12
0
        public void CreatingGlobalVariableDifferentCases()
        {
            IScriptContext context = new ScriptContext();

              object resultVal =
               Script.RunCode(
               @"
               a = 2;
              ", context
               );

              Assert.AreEqual(2, context.GetItem("a", true));

              context = new ScriptContext();
              resultVal =
             Script.RunCode(
             @"
               //Global scope

               { //Local scope 1

             {//Local scope 2

               //Create global variable from local scope
               a = 4;

             }
               }
               // a = 4 will be evaluated in global scope
               return a;
                ", context
             );

              Assert.AreEqual(4, context.GetItem("a", true));

              context = new ScriptContext();
              resultVal =
             Script.RunCode(
             @"
               //Global scope

               { //Local scope 1
             var a; //Create empty variable in local scope 1

             {//Local scope 2

               //This will set variable to top-most scope which contains
               //definition for variable, which is Local scope 1
               a = 4;
             }
               }

               //Global scope still empty
                ", context
             );

              Assert.AreEqual(RuntimeHost.NoVariable, context.GetItem("a", false));

              context = new ScriptContext();
              resultVal =
             Script.RunCode(
             @"
               //Global scope

               { //Local scope 1
             var a; //Create empty variable in local scope 1

             {//Local scope 2

               //This will set variable to top-most scope which contains
               //definition for variable, which is Local scope 1
               a = 5;

               { //Local scope 3

                 var a; //Create empty variable in local scope 3

                //This will set variable to top-most scope which contains
                 //definition for variable, which is Local scope 1
                 global:a = 4;

                 a = 3; // Set local variable
               }
             }

             //Create variable in global scope
             b = a;
               }

               //b = 4;
               return b;
                ", context
             );

              Assert.AreEqual(4, context.GetItem("b", false));
        }
Exemple #13
0
        public void StringParsingError()
        {
            IScriptContext context = new ScriptContext();

              Script s = Script.Compile(
               @"
              a = 'aaabbbccc;
              b = '\'aaa';
              c = 'cc\\aaa';

              d = @'hello world \\';
            ");
              s.Context = context;
              s.Execute();

              Assert.AreEqual("aaabbbccc", context.GetItem("a", true));
              Assert.AreEqual("'aaa", context.GetItem("b", true));
              Assert.AreEqual("cc\\aaa", context.GetItem("c", true));
              Assert.AreEqual("hello world \\\\", context.GetItem("d", true));
        }
Exemple #14
0
    public void NumberInputFormats()
    {
      IScriptContext context = new ScriptContext();
      object result =
         Script.RunCode(
         @"
           h = 0xAAFFAA;
           u = 3u;
           l = 31231231278l;
           ul = 23423234548ul;
           d = 3.2312d;
           f = 3424.123f; 
           m = 23123.25434543m;

           n1 = 4e+3;
           n2 = 6.32e-3;
         ",
         context);

      Assert.AreEqual(0xAAFFAA, context.GetItem("h", true));
      Assert.AreEqual(3u, context.GetItem("u", true));
      Assert.AreEqual(31231231278L, context.GetItem("l", true));
      Assert.AreEqual(23423234548ul, context.GetItem("ul", true));
      Assert.AreEqual(3424.123f, context.GetItem("f", true));
      Assert.AreEqual(3.2312d, context.GetItem("d", true));
      Assert.AreEqual(23123.25434543m, context.GetItem("m", true));

      Assert.AreEqual(4e+3, context.GetItem("n1", true));
      Assert.AreEqual(6.32e-3, context.GetItem("n2", true));
    }
    public void AstDomCompiler_CompileBinaryOperator3()
    {
      IScriptContext context = new ScriptContext();

      CodeProgram domTree = AstDomCompiler.Compile(Script.Compile("x=(1+(1+3))*2-1;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(9, context.GetItem("x", true));
      Assert.AreEqual(9, context.Result);

      domTree = AstDomCompiler.Compile(Script.Compile("x=(3+2)-1;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(4, context.GetItem("x", true));
      Assert.AreEqual(4, context.Result);

      domTree = AstDomCompiler.Compile(Script.Compile("x=(String)-1;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual("-1", context.GetItem("x", true));
    }
Exemple #16
0
    public void Benchmark()
    {
      IScriptContext context = new ScriptContext();

      //Example 0: Machine

      ExecutableMachine machine = ExecutableMachine.Create();

      int iterations = 2;// 10000000;

      //loops = 10000000
      ValueOperation op0 = machine.CreateOperation<ValueOperation>();
      op0.Value = iterations;      
      SetValueOperation op1 = machine.CreateOperation<SetValueOperation>();
      op1.Id = "loops";

      // counter = 0
      ValueOperation op2 = machine.CreateOperation<ValueOperation>();
      op2.Value = 0;
      SetValueOperation op3 = machine.CreateOperation<SetValueOperation>();
      op3.Id = "counter";

      //while (loops > 0)
      RegisterOperation op4 = machine.CreateOperation<RegisterOperation>();
      op4.Destination = MachineRegisters.BX;
      op4.Value = 0;
      GetValueOperation op5 = machine.CreateOperation<GetValueOperation>();
      op5.Id = "loops";      
      CmpOperation op6 = machine.CreateOperation<CmpOperation>();
      JmpIfOperation op7 = machine.CreateOperation<JmpIfOperation>();
      op7.Offset = 8;
      //loops = loops -1;
      GetValueOperation op8 = machine.CreateOperation<GetValueOperation>();
      op8.Id = "loops";
      DecOperation op9 = machine.CreateOperation<DecOperation>();
      SetValueOperation op10 = machine.CreateOperation<SetValueOperation>();
      op10.Id = "loops";

      //counter = counter + 1;
      GetValueOperation op11 = machine.CreateOperation<GetValueOperation>();
      op11.Id = "counter";
      IncOperation op12 = machine.CreateOperation<IncOperation>();
      SetValueOperation op13 = machine.CreateOperation<SetValueOperation>();
      op13.Id = "counter";

      JmpOperation op14 = machine.CreateOperation<JmpOperation>();
      op14.Offset = -10;

      machine.CreateOperation<RetOperation>();
      machine.Execute(context);

      object rez = context.GetItem("counter", true);

      Assert.AreEqual(iterations, rez);
    }
    public void AstDomCompiler_PlusPlus_MinusMinus()
    {
      IScriptContext context = new ScriptContext();

      CodeProgram domTree = AstDomCompiler.Compile(Script.Compile("sum=0;for(i=0; i<10; i++) sum = sum + i;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(45, context.GetItem("sum", true));

      domTree = AstDomCompiler.Compile(Script.Compile("sum=0;for(i=9; i>=0; i--) sum = sum + i;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(45, context.GetItem("sum", true));
    }
    public void AstDomCompiler_ForEach()
    {
      IScriptContext context = new ScriptContext();
      context.SetItem("a", new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });

      CodeProgram domTree = AstDomCompiler.Compile(Script.Compile("sum=0; foreach(i in a) sum = sum + i;", null, false).Ast);
      ExecutableMachine vm = CodeDomCompiler.Compile(domTree);
      vm.Execute(context);

      Assert.AreEqual(45, context.GetItem("sum", true));
    }
    public void AstDomCompiler_Block()
    {
      IScriptContext context = new ScriptContext();

      CodeProgram domTree = AstDomCompiler.Compile(Script.Compile("{x = 1; y=2;}", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(1, context.GetItem("x", true));
      Assert.AreEqual(2, context.GetItem("y", true));

      domTree = AstDomCompiler.Compile(Script.Compile("x = 10; y = 0; while (x>0) {x=x-1; y = y+1;}", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(0, context.GetItem("x", true));
      Assert.AreEqual(10, context.GetItem("y", true));
    }
    public void AstDomCompiler_While()
    {
      IScriptContext context = new ScriptContext();

      CodeProgram domTree = AstDomCompiler.Compile(Script.Compile("x = 1; while (x<10) x=x+1;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(10, context.GetItem("x", true));
      Assert.AreEqual(false, context.Result);

      domTree = AstDomCompiler.Compile(Script.Compile("x = 1; while (x<10) x=x+1; return 3;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(3, context.Result);

      domTree = AstDomCompiler.Compile(Script.Compile("x = 2; while (x<2) return 2; return 5;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(5, context.Result);

      domTree = AstDomCompiler.Compile(Script.Compile("x = 1; while (x<2) return 2; return 5;", null, false).Ast);
      CodeDomCompiler.Compile(domTree).Execute(context);

      Assert.AreEqual(2, context.Result);

    }