コード例 #1
0
        public void GetGlobalContext()
        {
            Machine            machine     = new Machine();
            BindingEnvironment environment = new BindingEnvironment(machine.Environment);

            Assert.AreEqual(machine.Environment, environment.GlobalContext);
        }
コード例 #2
0
 public void Execute(Machine machine, BindingEnvironment environment)
 {
     while (!Predicates.IsFalse(this.condition.Evaluate(environment)))
     {
         this.command.Execute(machine, environment);
     }
 }
コード例 #3
0
ファイル: ClassCommand.cs プロジェクト: ajlopez/PythonSharp
        public void Execute(IContext context)
        {
            BindingEnvironment env = new BindingEnvironment(context);
            IList<IType> bases = null;

            if (this.baseExpressions != null && this.baseExpressions.Count > 0)
            {
                bases = new List<IType>();

                foreach (var expr in this.baseExpressions)
                    bases.Add((IType)expr.Evaluate(context));
            }

            DefinedClass klass = new DefinedClass(this.name, bases, context);
            this.body.Execute(klass);
            foreach (var name in env.GetNames())
            {
                var value = env.GetValue(name);
                var deffunc = value as DefinedFunction;

                if (deffunc != null)
                    klass.SetMethod(deffunc.Name, deffunc);
            }

            klass.SetValue("__doc__", this.doc);

            context.SetValue(this.name, klass);
        }
コード例 #4
0
        public void GetGlobalContext()
        {
            Machine machine = new Machine();
            BindingEnvironment environment = new BindingEnvironment(machine.Environment);

            Assert.AreEqual(machine.Environment, environment.GlobalContext);
        }
コード例 #5
0
        public void ExecuteCompositeCommand()
        {
            BindingEnvironment environment = new BindingEnvironment();

            SetVariableCommand command1 = new SetVariableCommand("foo", new ConstantExpression("bar"));
            SetVariableCommand command2 = new SetVariableCommand("one", new ConstantExpression(1));
            SetVariableCommand command3 = new SetVariableCommand("bar", new VariableExpression("foo"));

            List <ICommand> commands = new List <ICommand>();

            commands.Add(command1);
            commands.Add(command2);
            commands.Add(command3);

            CompositeCommand command = new CompositeCommand(commands);

            environment.SetValue("foo", null);
            environment.SetValue("one", null);

            command.Execute(environment);

            Assert.AreEqual("bar", environment.GetValue("foo"));
            Assert.AreEqual(1, environment.GetValue("one"));
            Assert.AreEqual("bar", environment.GetValue("bar"));
        }
コード例 #6
0
        public void NotDefinedVariableSholdReturnNull()
        {
            BindingEnvironment environment = new BindingEnvironment();
            VariableExpression variable    = new VariableExpression("foo");

            Assert.IsNull(variable.Evaluate(environment));
        }
コード例 #7
0
        public void ExecuteSetArrayCommandWithDotExpression()
        {
            BindingEnvironment environment = new BindingEnvironment();
            DotExpression      dotexpr     = new DotExpression(new VariableExpression("foo"), "Values");
            SetArrayCommand    command     = new SetArrayCommand(dotexpr, new IExpression[] { new ConstantExpression(0) }, new ConstantExpression("bar"));

            command.Execute(environment);

            object obj = environment.GetValue("foo");

            Assert.IsNotNull(obj);
            Assert.IsInstanceOfType(obj, typeof(DynamicObject));

            DynamicObject dynobj = (DynamicObject)obj;

            object obj2 = dynobj.GetValue("Values");

            Assert.IsNotNull(obj2);
            Assert.IsInstanceOfType(obj2, typeof(IList));

            IList list = (IList)obj2;

            Assert.AreEqual(1, list.Count);
            Assert.AreEqual("bar", list[0]);
        }
コード例 #8
0
        public void ExecuteSetCommandWithComplexDotExpression()
        {
            BindingEnvironment environment = new BindingEnvironment();
            DotExpression      dot         = new DotExpression(new VariableExpression("foo"), "Address");
            DotExpression      dotexpr     = new DotExpression(dot, "Street");
            SetCommand         command     = new SetCommand(dotexpr, new ConstantExpression("bar"));

            command.Execute(environment);

            object obj = environment.GetValue("foo");

            Assert.IsNotNull(obj);
            Assert.IsInstanceOfType(obj, typeof(DynamicObject));

            DynamicObject dynobj = (DynamicObject)obj;

            object obj2 = dynobj.GetValue("Address");

            Assert.IsNotNull(obj2);
            Assert.IsInstanceOfType(obj2, typeof(DynamicObject));

            DynamicObject dynobj2 = (DynamicObject)obj2;

            Assert.AreEqual("bar", dynobj2.GetValue("Street"));
        }
コード例 #9
0
        public void ExecuteForCommand()
        {
            ICommand        setX     = new SetVariableCommand("x", new ConstantExpression(0));
            ICommand        setY     = new SetVariableCommand("y", new ConstantExpression(0));
            List <ICommand> commands = new List <ICommand>();

            commands.Add(setX);
            commands.Add(setY);
            ICommand initialCommand = new CompositeCommand(commands);

            IExpression condition = new CompareExpression(ComparisonOperator.Less, new VariableExpression("x"), new ConstantExpression(6));

            IExpression addXtoY = new ArithmeticBinaryExpression(ArithmeticOperator.Add, new VariableExpression("y"), new VariableExpression("x"));
            ICommand    addToY  = new SetVariableCommand("y", addXtoY);

            ICommand endCommand = new SetVariableCommand("x", new ArithmeticBinaryExpression(ArithmeticOperator.Add, new VariableExpression("x"), new ConstantExpression(1)));

            ForCommand forcmd = new ForCommand(initialCommand, condition, endCommand, addToY);

            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("y", null);

            forcmd.Execute(environment);

            Assert.AreEqual(15, environment.GetValue("y"));
        }
コード例 #10
0
        public void GetCurrentContextNames()
        {
            BindingEnvironment context = new BindingEnvironment();

            context.SetValue("zero", 0);
            context.SetValue("one", 1);
            context.SetValue("two", 2);
            context.SetValue("three", 3);

            var result = this.dir.Apply(context, null, null);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IList<string>));

            var names = (IList<string>)result;

            Assert.AreNotEqual(0, names.Count);
            Assert.IsTrue(names.Contains("zero"));
            Assert.IsTrue(names.Contains("one"));
            Assert.IsTrue(names.Contains("two"));
            Assert.IsTrue(names.Contains("three"));

            var previous = string.Empty;

            foreach (var name in names)
            {
                Assert.IsTrue(previous.CompareTo(name) < 0);
                previous = name;
            }
        }
コード例 #11
0
        public override object Evaluate(BindingEnvironment environment)
        {
            object leftvalue;
            object rightvalue;

            leftvalue  = this.Left.Evaluate(environment);
            rightvalue = this.Right.Evaluate(environment);

            switch (this.@operator)
            {
            case BinaryOperator.Add:
                return(Numbers.Add(leftvalue, rightvalue));

            case BinaryOperator.Subtract:
                return(Numbers.Subtract(leftvalue, rightvalue));

            case BinaryOperator.Multiply:
                return(Numbers.Multiply(leftvalue, rightvalue));

            case BinaryOperator.Divide:
                return(Numbers.Divide(leftvalue, rightvalue));

            case BinaryOperator.Power:
                return(System.Convert.ToInt32(System.Math.Pow((int)leftvalue, (int)rightvalue)));
            }

            throw new System.InvalidOperationException();
        }
コード例 #12
0
        public void CanCreate()
        {
            BindingEnvironment environment = new BindingEnvironment();

            Assert.IsNotNull(environment);
            Assert.AreSame(environment, environment.GetValue("Environment"));
        }
コード例 #13
0
ファイル: CompoundTaskTests.cs プロジェクト: ianhorswill/Step
        public void UnifyNullTest()
        {
            var b = new BindingEnvironment();

            Assert.IsFalse(b.Unify(null, "foo", null, out _));
            Assert.IsTrue(b.Unify(null, null, null, out _));
        }
コード例 #14
0
        public void UndefinedVariableIsNull()
        {
            BindingEnvironment environment = new BindingEnvironment();
            VariableExpression var         = new VariableExpression("foo");

            Assert.IsNull(var.Evaluate(environment));
        }
コード例 #15
0
        public void CanCreate()
        {
            BindingEnvironment environment = new BindingEnvironment();

            Assert.IsNotNull(environment);
            Assert.AreSame(environment, environment.GetValue("Environment"));
        }
コード例 #16
0
ファイル: ParserTest.cs プロジェクト: zuojiashun/ajcodekatas
        public void CompileAndEvaluateComplexListExpression()
        {
            Parser             parser      = new Parser("[1, 2, [a, b], 'foo']");
            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("a", 1);
            environment.SetValue("b", 2);

            IExpression expression = parser.CompileExpression();

            Assert.IsNotNull(expression);
            Assert.IsInstanceOfType(expression, typeof(ListExpression));

            object result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IList));

            IList list = (IList)result;

            Assert.AreEqual(4, list.Count);
            Assert.AreEqual(1, list[0]);
            Assert.AreEqual(2, list[1]);
            Assert.IsNotNull(list[2]);
            Assert.IsInstanceOfType(list[2], typeof(IList));
            Assert.AreEqual("foo", list[3]);

            IList list2 = (IList)list[2];

            Assert.IsNotNull(list2);
            Assert.AreEqual(2, list2.Count);
            Assert.AreEqual(1, list2[0]);
            Assert.AreEqual(2, list2[1]);
        }
コード例 #17
0
ファイル: BinaryExpression.cs プロジェクト: ajlopez/AjRuby
        public object Evaluate(BindingEnvironment environment)
        {
            object leftValue = this.leftExpression.Evaluate(environment);
            object rightValue = this.rigthExpression.Evaluate(environment);

            return this.Apply(leftValue, rightValue);
        }
コード例 #18
0
        public void ExecuteWhileCommand()
        {
            IExpression     incrementX = new ArithmeticBinaryExpression(ArithmeticOperator.Add, new ConstantExpression(1), new VariableExpression("x"));
            IExpression     decrementY = new ArithmeticBinaryExpression(ArithmeticOperator.Subtract, new VariableExpression("y"), new ConstantExpression(1));
            ICommand        setX       = new SetVariableCommand("x", incrementX);
            ICommand        setY       = new SetVariableCommand("y", decrementY);
            List <ICommand> commands   = new List <ICommand>();

            commands.Add(setX);
            commands.Add(setY);
            ICommand    command = new CompositeCommand(commands);
            IExpression yexpr   = new VariableExpression("y");

            WhileCommand whilecmd = new WhileCommand(yexpr, command);

            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("x", 0);
            environment.SetValue("y", 5);

            whilecmd.Execute(environment);

            Assert.AreEqual(0, environment.GetValue("y"));
            Assert.AreEqual(5, environment.GetValue("x"));
        }
コード例 #19
0
ファイル: ParserTest.cs プロジェクト: zuojiashun/ajcodekatas
        public void CompileAndEvaluateListWithExpressionsExpression()
        {
            Parser             parser      = new Parser("[a+1, b+2, c]");
            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("a", 1);
            environment.SetValue("b", 2);
            environment.SetValue("c", "foo");

            IExpression expression = parser.CompileExpression();

            Assert.IsNotNull(expression);
            Assert.IsInstanceOfType(expression, typeof(ListExpression));

            object result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IList));

            IList list = (IList)result;

            Assert.AreEqual(3, list.Count);
            Assert.AreEqual(2, list[0]);
            Assert.AreEqual(4, list[1]);
            Assert.AreEqual("foo", list[2]);
        }
コード例 #20
0
        public void SetAndGetValue()
        {
            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("foo", "bar");

            Assert.AreEqual("bar", environment.GetValue("foo"));
        }
コード例 #21
0
        public void ExecSimpleText()
        {
            BindingEnvironment environment = new BindingEnvironment();

            this.exec.Apply(environment, new object[] { "a = 1" }, null);

            Assert.AreEqual(1, environment.GetValue("a"));
        }
コード例 #22
0
        public void HasValue()
        {
            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("foo", "bar");
            Assert.IsTrue(environment.HasValue("foo"));
            Assert.IsFalse(environment.HasValue("undefined"));
        }
コード例 #23
0
        public void GetValueDefinedInParent()
        {
            BindingEnvironment parent = new BindingEnvironment();
            parent.SetValue("foo", "bar");
            BindingEnvironment environment = new BindingEnvironment(parent);

            Assert.AreEqual("bar", environment.GetValue("foo"));
        }
コード例 #24
0
        public void SetAndGetValue()
        {
            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("foo", "bar");

            Assert.AreEqual("bar", environment.GetValue("foo"));
        }
コード例 #25
0
        public void HasValue()
        {
            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("foo", "bar");
            Assert.IsTrue(environment.HasValue("foo"));
            Assert.IsFalse(environment.HasValue("undefined"));
        }
コード例 #26
0
        public void GetValueFromParent()
        {
            BindingEnvironment parent = new BindingEnvironment();
            parent.SetValue("one", 1);
            BindingEnvironment environment = new BindingEnvironment(parent);

            Assert.AreEqual(1, environment.GetValue("one"));
        }
コード例 #27
0
 /// <summary>
 /// Check argument and throw instantiation exception if necessary.
 /// </summary>
 public static void Check(object task, object arg, bool shouldBeInstantiated, BindingEnvironment e,
                          object[] args)
 {
     if (!(e.Resolve(arg) is LogicVariable) != shouldBeInstantiated)
     {
         throw new ArgumentInstantiationException(task, e, args);
     }
 }
コード例 #28
0
        public void ExecSimpleText()
        {
            BindingEnvironment environment = new BindingEnvironment();

            this.exec.Apply(environment, new object[] { "a = 1" }, null);

            Assert.AreEqual(1, environment.GetValue("a"));
        }
コード例 #29
0
        public void SetVariable()
        {
            IExpression expression = new ConstantExpression(1);
            BindingEnvironment environment = new BindingEnvironment();
            ICommand command = new SetCommand("spam", expression);
            command.Execute(environment);

            Assert.AreEqual(1, environment.GetValue("spam"));
        }
コード例 #30
0
        public void GetGlobalEnvironmentFromParent()
        {
            Machine machine = new Machine();
            BindingEnvironment parent = new BindingEnvironment(machine.Environment);
            parent.SetValue("one", 1);
            BindingEnvironment environment = new BindingEnvironment(parent);

            Assert.AreEqual(machine.Environment, environment.GlobalContext);
        }
コード例 #31
0
        public void LoadCachedModule()
        {
            var context = new BindingEnvironment();
            var module = ModuleUtilities.LoadModule("setvar", context);
            var module2 = ModuleUtilities.LoadModule("setvar", context);

            Assert.IsNotNull(module);
            Assert.AreEqual(module, module2);
        }
コード例 #32
0
        public void ExecCommandList()
        {
            BindingEnvironment environment = new BindingEnvironment();

            this.exec.Apply(environment, new object[] { "a = 1; b = 2" }, null);

            Assert.AreEqual(1, environment.GetValue("a"));
            Assert.AreEqual(2, environment.GetValue("b"));
        }
コード例 #33
0
        public void EvaluateNameWithNull()
        {
            NameExpression expression = new NameExpression("foo");

            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("foo", null);

            Assert.IsNull(expression.Evaluate(environment));
        }
コード例 #34
0
        public void CreateAndExecuteTryCommand()
        {
            BindingEnvironment environment = new BindingEnvironment();
            ICommand body = new SetCommand("a", new ConstantExpression(1));
            TryCommand command = new TryCommand(body);

            command.Execute(environment);

            Assert.AreEqual(1, environment.GetValue("a"));
        }
コード例 #35
0
        public void EvaluateNameExpression()
        {
            NameExpression expression = new NameExpression("foo");

            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("foo", "bar");

            Assert.AreEqual("bar", expression.Evaluate(environment));
        }
コード例 #36
0
        public void LoadSimpleModule()
        {
            var context = new BindingEnvironment();
            var module = ModuleUtilities.LoadModule("setvar", context);

            Assert.IsNotNull(module);
            Assert.AreEqual(context, module.GlobalContext);
            Assert.IsNotNull(module.GetValue("a"));
            Assert.AreEqual("setvar module", module.GetValue("__doc__"));
        }
コード例 #37
0
ファイル: ModuleTests.cs プロジェクト: Refandler/PythonSharp
        public void GetValueFromGlobalContext()
        {
            BindingEnvironment global = new BindingEnvironment();
            global.SetValue("one", 1);
            Module module = new Module(global);

            var result = module.GetValue("one");
            Assert.IsNotNull(result);
            Assert.AreEqual(1, result);
            Assert.IsTrue(module.HasValue("one"));
        }
コード例 #38
0
        public void CanCreate()
        {
            BindingEnvironment environment = new BindingEnvironment();

            Assert.IsNotNull(environment);
            Assert.IsNotNull(environment.GlobalContext);
            Assert.AreEqual(environment, environment.GlobalContext);
            Assert.IsNull(environment.Parent);
            Assert.IsFalse(environment.HasReturnValue());
            Assert.IsNull(environment.GetReturnValue());
        }
コード例 #39
0
        public void SetAttributeInNativeObject()
        {
            BindingEnvironment environment = new BindingEnvironment();
            Person adam = new Person();
            environment.SetValue("adam", adam);

            SetAttributeCommand command = new SetAttributeCommand(new NameExpression("adam"), "FirstName", new ConstantExpression("Adam"));

            command.Execute(environment);

            Assert.AreEqual("Adam", adam.FirstName);
        }
コード例 #40
0
        public void ExecuteSimpleForOnEmptyList()
        {
            ICommand body = new SetCommand("b", new BinaryOperatorExpression(new NameExpression("a"), new NameExpression("b"), BinaryOperator.Add));
            BindingEnvironment environment = new BindingEnvironment();
            environment.SetValue("b", 0);

            ForCommand command = new ForCommand("a", new ConstantExpression(new object[] { }), body);

            command.Execute(environment);

            Assert.AreEqual(0, environment.GetValue("b"));
        }
コード例 #41
0
        public void CallNativeObjectMethodWithArguments()
        {
            Calculator calculator = new Calculator();
            BindingEnvironment environment = new BindingEnvironment();
            environment.SetValue("calculator", calculator);
            CallExpression expression = new CallExpression(new AttributeExpression(new NameExpression("calculator"), "Add"), new IExpression[] { new ConstantExpression(1), new ConstantExpression(2) });

            var result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.AreEqual(calculator.Add(1, 2), result);
        }
コード例 #42
0
        public void CallNativeObjectMethodWithoutArguments()
        {
            Person person = new Person() { FirstName = "Adam", LastName = "Doe" };
            BindingEnvironment environment = new BindingEnvironment();
            environment.SetValue("adam", person);
            CallExpression expression = new CallExpression(new AttributeExpression(new NameExpression("adam"), "GetName"), null);

            var result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.AreEqual(person.GetName(), result);
        }
コード例 #43
0
        public void DefineAndSetGlobalValue()
        {
            Machine machine = new Machine();
            BindingEnvironment environment = new BindingEnvironment();

            environment.DefineGlobal("global");

            environment.SetValue("global", 100);

            Assert.AreEqual(100, environment.GetValue("global"));
            Assert.AreEqual(100, machine.Environment.GetValue("global"));
        }
コード例 #44
0
        public void CallNativeTypeStaticMethod()
        {
            BindingEnvironment environment = new BindingEnvironment();
            environment.SetValue("File", typeof(System.IO.File));
            CallExpression expression = new CallExpression(new AttributeExpression(new NameExpression("File"), "Exists"), new IExpression[] { new ConstantExpression("unknown.txt") });

            var result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(bool));
            Assert.AreEqual(false, result);
        }
コード例 #45
0
ファイル: FunctionTests.cs プロジェクト: ajlopez/AjSharp
        public void InvokeSimpleFunction()
        {
            ICommand body = new ReturnCommand(new VariableExpression("x"));
            Function function = new Function(new string[] { "x" }, body);

            BindingEnvironment environment = new BindingEnvironment();
            environment.SetValue("x", 2);

            object result = function.Invoke(environment, new object[] { 1 });

            Assert.IsNotNull(result);
            Assert.AreEqual(1, result);
        }
コード例 #46
0
        public void GetLocalContext()
        {
            BindingEnvironment global = new BindingEnvironment();
            BindingEnvironment local = new BindingEnvironment(global);
            ContextFunction function = new ContextFunction("locals", false);

            var result = function.Apply(local, null, null);

            Assert.IsNotNull(result);
            Assert.AreEqual(local, result);
            Assert.IsFalse(function.IsGlobal);
            Assert.AreEqual("locals", function.Name);
        }
コード例 #47
0
        public void ExecuteClassCommandWithEmptyMethod()
        {
            BindingEnvironment environment = new BindingEnvironment();
            ClassCommand command = new ClassCommand("Spam", new DefCommand("foo", null, new PassCommand()));

            command.Execute(environment);

            var result = (DefinedClass)environment.GetValue("Spam");

            Assert.AreEqual("Spam", result.Name);

            Assert.IsNotNull(result.GetMethod("foo"));
        }
コード例 #48
0
        public void CreateSimpleClassWithEmptyDocString()
        {
            BindingEnvironment environment = new BindingEnvironment();
            ClassCommand command = new ClassCommand("Spam", new PassCommand());

            command.Execute(environment);

            var result = environment.GetValue("Spam");
            var dclass = (DefinedClass)result;

            Assert.IsNull(dclass.GetValue("__doc__"));
            Assert.IsTrue(dclass.HasValue("__doc__"));
        }