Example #1
0
        private static void Main(string[] args)
        {
            var lexer = new Lexer(new SimpleMathLexerLanguage());

            while (true)
            {
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.Write("> ");
                string inputExpression = Console.ReadLine() ?? "";

                Highlight(lexer, inputExpression);
                Describe(lexer, inputExpression);

                MathValue result;
                try
                {
                    var expression = SimpleMathExpression.Compile(inputExpression);

                    result = expression.Evaluate();
                }
                catch (Exception exception)
                {
                    WriteFormattedException(exception);
                    continue;
                }

                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"Result: {result}");
            }
        }
Example #2
0
        public void ImportValues()
        {
            var context = new MathContextBuilder()
                          .WithTerm("Width", new StaticValueProvider(10))
                          .Build();

            string syntax = "10 * Width";
            var    intermediateExpression = SimpleMathExpression.Compile(syntax, context);
        }
        public void LogicOnTerms()
        {
            var contextA = new MathContextBuilder()
                           .WithTerm("Level", new StaticValueProvider(15))
                           .Build();

            TestExpression(true, SimpleMathExpression.Compile("2 < Level", contextA));
            TestExpression(true, SimpleMathExpression.Compile("15 == Level", contextA));
            TestExpression(true, SimpleMathExpression.Compile("16 > Level", contextA));
        }
        public void OperateComparisons()
        {
            TestExpression(true, SimpleMathExpression.Compile("2 > 1"));
            TestExpression(false, SimpleMathExpression.Compile("1 > 1"));
            TestExpression(false, SimpleMathExpression.Compile("0 > 1"));

            TestExpression(true, SimpleMathExpression.Compile("1 >= 1"));

            TestExpression(false, SimpleMathExpression.Compile("2 <= 1"));

            TestExpression(true, SimpleMathExpression.Compile("true | 2 < 1"));
        }
        public void OperateEquality()
        {
            // Equality Operators
            TestExpression(true, SimpleMathExpression.Compile("1 == 1"));
            TestExpression(false, SimpleMathExpression.Compile("1 != 1"));
            TestExpression(false, SimpleMathExpression.Compile("1 == 10"));

            TestExpression(true, SimpleMathExpression.Compile("true == true"));
            TestExpression(false, SimpleMathExpression.Compile("true != true"));

            TestExpression(true, SimpleMathExpression.Compile("false == false"));
            TestExpression(false, SimpleMathExpression.Compile("false != false"));
        }
        public void ImportTerms()
        {
            var contextA = new MathContextBuilder()
                           .WithTerm("Width", 15)
                           .WithTerm("Height", 10)
                           .Build();

            TestExpression(100, SimpleMathExpression.Compile("10 * Height", contextA));
            TestExpression(25, SimpleMathExpression.Compile("width + Height", contextA));
            TestExpression(25, SimpleMathExpression.Compile("wiDth + heiGHt", contextA));

            TestExpression(20, SimpleMathExpression.Compile("Height * 2", contextA));
            TestExpression(23, SimpleMathExpression.Compile("3 + Height * 2", contextA));
        }
        public void OperateMaths()
        {
            TestExpression(2, SimpleMathExpression.Compile("3 + -1"));
            TestExpression(2, SimpleMathExpression.Compile("1     + (1)"));

            // Add Operator
            TestExpression(2, SimpleMathExpression.Compile("1 + 1"));
            TestExpression(2, SimpleMathExpression.Compile("1     + 1"));
            TestExpression(5, SimpleMathExpression.Compile("((1 + 3) + 1)"));

            TestExpression(25, SimpleMathExpression.Compile("10+15"));
            TestExpression(20, SimpleMathExpression.Compile("10 + 10"));
            TestExpression(25, SimpleMathExpression.Compile("10 + 10 + 5"));

            // Negative Numbers
            TestExpression(2, SimpleMathExpression.Compile("3 + -1"));
            TestExpression(3, SimpleMathExpression.Compile("-1 + 4"));

            // Subtract Operator
            TestExpression(2, SimpleMathExpression.Compile("3 - 1"));

            // Multiply Operator
            TestExpression(5, SimpleMathExpression.Compile("1 * 5"));
            TestExpression(20, SimpleMathExpression.Compile("200 * 0.1"));

            // Divide Operator
            TestExpression(5, SimpleMathExpression.Compile("10 / 2"));

            // Power Operator
            TestExpression(27, SimpleMathExpression.Compile("3 ^ 3"));
            TestExpression(27, SimpleMathExpression.Compile("3 ^ (1 + 2)"));

            // Order of Operations Tests
            TestExpression(-5, SimpleMathExpression.Compile("10 - 10 + 5"));
            TestExpression(-5, SimpleMathExpression.Compile("10 -(10+   5)"));
            TestExpression(5, SimpleMathExpression.Compile("(10 - 10) + 5"));

            TestExpression(12.564f, SimpleMathExpression.Compile("3.141 * 2^2"));
        }
        public void OperateLogic()
        {
            TestExpression(true, SimpleMathExpression.Compile("true"));
            TestExpression(false, SimpleMathExpression.Compile("false"));

            // AND Operator
            TestExpression(true, SimpleMathExpression.Compile("true & true"));
            TestExpression(false, SimpleMathExpression.Compile("true & false"));
            TestExpression(false, SimpleMathExpression.Compile("false & true"));
            TestExpression(false, SimpleMathExpression.Compile("false & false"));

            // OR Operator
            TestExpression(true, SimpleMathExpression.Compile("true | true"));
            TestExpression(true, SimpleMathExpression.Compile("false | true"));
            TestExpression(true, SimpleMathExpression.Compile("true | false"));
            TestExpression(false, SimpleMathExpression.Compile("false | false"));

            // NOT Operator
            TestExpression(false, SimpleMathExpression.Compile("!true"));
            TestExpression(true, SimpleMathExpression.Compile("!false"));
            TestExpression(true, SimpleMathExpression.Compile("!(false)"));

            TestExpression(false, SimpleMathExpression.Compile("!(30 > 10)"));
        }
 private static void TestExpression(MathValue expected, SimpleMathExpression expression)
 {
     Console.WriteLine(expression.ToString() + " = " + expected);
     Describe(SimpleMathLexerLanguage.Lexer, expression.ToString());
     Assert.AreEqual(expected, expression.Evaluate());
 }
Example #10
0
 public void Compile() => SimpleMathExpression.Compile(Expression);
Example #11
0
 public void CompileBasicLogic()
 {
     string syntax = "10 > 5 == true";
     var    intermediateExpression = SimpleMathExpression.Compile(syntax);
 }
Example #12
0
 public void Setup()
 {
     evaluateTarget = SimpleMathExpression.Compile(Expression);
 }
Example #13
0
 public void CompileBasicMaths()
 {
     string syntax = "1 + 1 / 20";
     var    intermediateExpression = SimpleMathExpression.Compile(syntax);
 }
Example #14
0
 public void OrderFromParanthesis()
 {
     string syntax = "(10 + 10) ^ 2";
     var    intermediateExpression = SimpleMathExpression.Compile(syntax);
 }
Example #15
0
 public void CompileBranchingExpression()
 {
     string syntax = "10 * 10 + 2 * 2";
     var    intermediateExpression = SimpleMathExpression.Compile(syntax);
 }
Example #16
0
 public void Setup()
 {
     evaluateTarget = SimpleMathExpression.Compile(Expression);
     expressionEvaluatorInstance = new ExpressionEvaluator();
 }
Example #17
0
 public void CompileComplexLogicMaths()
 {
     string syntax = "1 + (10 / 40) > 1 == true";
     var    intermediateExpression = SimpleMathExpression.Compile(syntax);
 }