Exemple #1
0
        [Test] public void DynamicExpressionsAndIteration()
        {
            var exprString1 = "x += [0, 1]";
            var exprString2 = "y = 2 ^ x";

            var variables = new HashedVariables();

            var tokens1     = new Lexer().Tokenize(exprString1);
            var expression1 = new ExpressionTranslator(tokens1, variables).CreateCalculationStack();

            var tokens2     = new Lexer().Tokenize(exprString2);
            var expression2 = new ExpressionTranslator(tokens2, variables).CreateCalculationStack();

            variables[expression1.TargetVariable].AddExpression(expression1);
            variables[expression2.TargetVariable].AddExpression(expression2);

            Assert.IsTrue(variables["y"].Calculate() == 1);

            var iterator = variables["x"] as Iterator;

            iterator.MoveNextValue();

            Assert.IsTrue(variables["y"].Calculate() == 2);
            iterator.MoveNextValue();
            Assert.IsTrue(variables["y"].Calculate() == 4);
            iterator.MoveNextValue();
            Assert.IsTrue(variables["y"].Calculate() == 8);
            iterator.MoveNextValue();
            Assert.IsTrue(variables["y"].Calculate() == 16);
        }
Exemple #2
0
        [Test] public void DynamicDependendentVariables()
        {
            var exprString1 = "x = 0";
            var exprString2 = "y = 2 ^ x";

            var variables = new HashedVariables();

            var tokens1     = new Lexer().Tokenize(exprString1);
            var expression1 = new ExpressionTranslator(tokens1, variables).CreateCalculationStack();

            var tokens2     = new Lexer().Tokenize(exprString2);
            var expression2 = new ExpressionTranslator(tokens2, variables).CreateCalculationStack();

            variables[expression1.TargetVariable].AddExpression(expression1);
            variables[expression2.TargetVariable].AddExpression(expression2);

            Assert.IsTrue(variables["y"].Calculate() == 1);

            var x = variables["x"];

            x.Value = 1;
            Assert.IsTrue(variables["y"].Calculate() == 2);

            x.Value = 2;
            Assert.IsTrue(variables["y"].Calculate() == 4);

            x.Value = 3;
            Assert.IsTrue(variables["y"].Calculate() == 8);

            x.Value = 4;
            Assert.IsTrue(variables["y"].Calculate() == 16);
        }
Exemple #3
0
        internal VariableSet(string name)
        {
            if (!Lexica.variableRegex.IsMatch(name))
            {
                throw new ArgumentException($"Name format exception for set {name}");
            }

            Name     = name;
            declares = new Dictionary <string, List <string> >();
            members  = null;
        }
Exemple #4
0
        [Test] public void SimpleStaticExpression()
        {
            var expressionString = "x = 5 + 3 * 2 ^ 2";
            var variables        = new HashedVariables();

            var tokens     = new Lexer().Tokenize(expressionString);
            var expression = new ExpressionTranslator(tokens, variables).CreateCalculationStack();

            variables[expression.TargetVariable].AddExpression(expression);

            Assert.IsTrue(variables["x"].Calculate() == 5 + 3 * Math.Pow(2, 2));
        }
Exemple #5
0
        [Test] public void StaticExpressionWithFunctions()
        {
            var expressionString = "x = 5 + sin(3) * pow(2,3)";
            var variables        = new HashedVariables();

            var tokens     = new Lexer().Tokenize(expressionString);
            var expression = new ExpressionTranslator(tokens, variables).CreateCalculationStack();

            variables[expression.TargetVariable].AddExpression(expression);

            Assert.IsTrue(variables["x"].Calculate() == 5 + Math.Sin(3) * Math.Pow(2, 3));
        }
Exemple #6
0
        [Test] public void DivideByZero()
        {
            var expressionString = "x = 5 / 0";

            var variables  = new HashedVariables();
            var tokens     = new Lexer().Tokenize(expressionString);
            var expression = new ExpressionTranslator(tokens, variables).CreateCalculationStack();

            variables[expression.TargetVariable].AddExpression(expression);

            Assert.IsTrue(variables["x"].Calculate() == double.PositiveInfinity);
        }
Exemple #7
0
        [Test] public void SingleAggregateAssignment()
        {
            var expressionString = "x += 5";
            var variables        = new HashedVariables();

            var tokens     = new Lexer().Tokenize(expressionString);
            var expression = new ExpressionTranslator(tokens, variables).CreateCalculationStack();

            variables[expression.TargetVariable].AddExpression(expression);

            Assert.IsTrue(variables["x"].Calculate() == 5);
        }
Exemple #8
0
        [Test] public void StaticComplexExpression()
        {
            var expressionString = "x = (5 + sin(tan(3)) * pow(2, abs(3))) % 3 + (log(17, 2) - 13)";

            var variables = new HashedVariables();

            var tokens     = new Lexer().Tokenize(expressionString);
            var expression = new ExpressionTranslator(tokens, variables).CreateCalculationStack();

            variables[expression.TargetVariable].AddExpression(expression);

            var libResult  = variables["x"].Calculate();
            var langResult = ((int)(5 + Math.Sin(Math.Tan(3)) * Math.Pow(2, Math.Abs(3))) / 3) + (Math.Log(17, 2) - 13);

            Assert.IsTrue(libResult == langResult);
        }
Exemple #9
0
        [Test] public void Overflow()
        {
            var expressionString = "x ^= [2, x]";

            var variables  = new HashedVariables();
            var tokens     = new Lexer().Tokenize(expressionString);
            var expression = new ExpressionTranslator(tokens, variables).CreateCalculationStack();

            variables[expression.TargetVariable].AddExpression(expression);

            var iterator = variables["x"] as Iterator;

            iterator.MoveNextValue();
            iterator.MoveNextValue();
            iterator.MoveNextValue();

            Assert.IsTrue(iterator.Value == double.PositiveInfinity);
        }
Exemple #10
0
        [Test] public void MultiplyAggregateAssignment()
        {
            var expressionString1 = "x += 5";
            var expressionString2 = "x += 5";
            var expressionString3 = "x *= 5";

            var variables = new HashedVariables();

            var tokens1     = new Lexer().Tokenize(expressionString1);
            var expression1 = new ExpressionTranslator(tokens1, variables).CreateCalculationStack();
            var tokens2     = new Lexer().Tokenize(expressionString2);
            var expression2 = new ExpressionTranslator(tokens2, variables).CreateCalculationStack();
            var tokens3     = new Lexer().Tokenize(expressionString3);
            var expression3 = new ExpressionTranslator(tokens3, variables).CreateCalculationStack();

            variables[expression1.TargetVariable].AddExpression(expression1);
            variables[expression2.TargetVariable].AddExpression(expression2);
            variables[expression3.TargetVariable].AddExpression(expression3);

            Assert.IsTrue(variables["x"].Calculate() == 50);
        }