public void VariableReassignmentTest()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("a = 1");
            scriptBuilder.AppendLine("bcd = 200");
            scriptBuilder.AppendLine("a = 100");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            Assert.AreEqual(2, interpreter.Variables.Count);

            TurtleScriptValue variableValue = interpreter.Variables["a"];

            Assert.AreEqual(100, variableValue.NumericValue);

            variableValue = interpreter.Variables["bcd"];
            Assert.AreEqual(200, variableValue.NumericValue);
        }
Пример #2
0
        public void IfElseStatementTrue()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("b = 15");
            scriptBuilder.AppendLine("if b > 10 do");
            scriptBuilder.AppendLine("  b = 20");
            scriptBuilder.AppendLine("  b = b * 2");
            scriptBuilder.AppendLine("else do");
            scriptBuilder.AppendLine("  b = 10");
            scriptBuilder.AppendLine("end");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["b"];

            Assert.AreEqual(40.0, variableValue.NumericValue);
        }
Пример #3
0
        public TurtleScriptValue Square(List <TurtleScriptValue> parameters)
        {
            if (parameters.Count == 1)
            {
                double value = parameters[0].NumericValue;

                TurtleScriptValue returnValue = new TurtleScriptValue(value * value);

                return(returnValue);
            }

            return(TurtleScriptValue.VOID);
        }
Пример #4
0
        public TurtleScriptValue Sum(List <TurtleScriptValue> parameters)
        {
            if (parameters.Count == 3)
            {
                double value1 = parameters[0].NumericValue;
                double value2 = parameters[1].NumericValue;
                double value3 = parameters[2].NumericValue;

                TurtleScriptValue returnValue = new TurtleScriptValue(value1 + value2 + value3);

                return(returnValue);
            }

            return(TurtleScriptValue.VOID);
        }
Пример #5
0
        public void SimpleMultiplication()
        {
            // Arrange
            var script = "a = 5 * 6";

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(script);

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["a"];

            Assert.AreEqual(30, variableValue.NumericValue);
        }
Пример #6
0
        public void DivisionFirstThenMultiplication()
        {
            // Arrange
            var script = "a = 100 / 2 * 10";

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(script);

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["a"];

            Assert.AreEqual(500, variableValue.NumericValue);
        }
Пример #7
0
        public void ComplexSubtraction()
        {
            // Arrange
            var script = "a = 10 - 2 - 4";

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(script);

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["a"];

            Assert.AreEqual(4, variableValue.NumericValue);
        }
Пример #8
0
        public void DivideByZero()
        {
            // Arrange
            var script = "a = 5 / 0";

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(script);

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["a"];

            Assert.AreEqual(0, variableValue.NumericValue);
        }
        public void AssignmentAndReferenceInExpression()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("a = 1");
            scriptBuilder.AppendLine("b = a + 500");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["b"];

            Assert.AreEqual(501, variableValue.NumericValue);
        }
        public void AssignmentAndSelfReassignment()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("a = 12345");
            scriptBuilder.AppendLine("a = a");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["a"];

            Assert.AreEqual(12345, variableValue.NumericValue);
        }
        public void FunctionDeclarationAfterCall()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("MyFunc()");
            scriptBuilder.AppendLine("def MyFunc()");
            scriptBuilder.AppendLine("	b = 15");
            scriptBuilder.AppendLine("end");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["b"];

            Assert.AreEqual(15.0, variableValue.NumericValue);
        }
        public void FunctionDeclarationAndCallThreeParameters()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("def MyFunc(value1, value2, value3)");
            scriptBuilder.AppendLine("	b = value1 + value2 - value3");
            scriptBuilder.AppendLine("end");
            scriptBuilder.AppendLine("MyFunc(100, 200, 50)");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["b"];

            Assert.AreEqual(250, variableValue.NumericValue);
        }
Пример #13
0
        public void ThreeParameters()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("a = test.sum(2, 4, 6)");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString(), new List <ITurtleScriptRuntime>()
            {
                new SampleRuntime()
            });

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["a"];

            Assert.AreEqual(12, variableValue.NumericValue);
        }
Пример #14
0
        public void Reverse()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("b = 0");
            scriptBuilder.AppendLine("for a = 5 to 1 do");
            scriptBuilder.AppendLine("b = b + a");
            scriptBuilder.AppendLine("end");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["b"];

            Assert.AreEqual(15, variableValue.NumericValue);
        }
        public void SimpleAssignmentTest()
        {
            // Arrange
            var script = "a = 1";

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(script);

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            Assert.AreEqual(1, interpreter.Variables.Count);

            string            variableName  = interpreter.Variables.Keys.First();
            TurtleScriptValue variableValue = interpreter.Variables[variableName];

            Assert.AreEqual("a", variableName);

            Assert.AreEqual(1, variableValue.NumericValue);
        }
        public void FunctionDeclarationAndCallOneParameter()
        {
            // Arrange
            StringBuilder scriptBuilder = new StringBuilder();

            scriptBuilder.AppendLine("def MyFunc(myparameter)");
            scriptBuilder.AppendLine("	b = myparameter");
            scriptBuilder.AppendLine("	myparameter = b * 2");
            scriptBuilder.AppendLine("end");
            scriptBuilder.AppendLine("MyFunc(10)");

            TurtleScriptInterpreter interpreter = new TurtleScriptInterpreter(scriptBuilder.ToString());

            // Act
            bool success = interpreter.Execute();

            // Assert
            Assert.IsTrue(success, interpreter.ErrorMessage);

            TurtleScriptValue variableValue = interpreter.Variables["myparameter"];

            Assert.AreEqual(20, variableValue.NumericValue);
        }
        public TurtleScriptValue CurrentAngle(List <TurtleScriptValue> parameters)
        {
            TurtleScriptValue returnValue = new TurtleScriptValue(Turtle.Angle);

            return(returnValue);
        }