Beispiel #1
0
        public void TestCalculatePowInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
            double            result = engine.Calculate("2^3.0");

            Assert.AreEqual(8.0, result);
        }
        public void TestCalculateCosineFunctionInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
            double result = engine.Calculate("cos(41)");

            Assert.AreEqual(Math.Cos(41.0), result);
        }
Beispiel #3
0
        public void TestCalculateCosineFunctionCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double            result = engine.Calculate("cos(41)");

            Assert.AreEqual(Math.Cos(41.0), result);
        }
Beispiel #4
0
        public void TestPiMultiplication()
        {
            CalculationEngine engine = new CalculationEngine();
            double            result = engine.Calculate("2 * pI");

            Assert.AreEqual(2 * Math.PI, result);
        }
Beispiel #5
0
        public void TestCalculateFormula1()
        {
            CalculationEngine engine = new CalculationEngine();
            double            result = engine.Calculate("2+3");

            Assert.AreEqual(5.0, result);
        }
Beispiel #6
0
        public void TestUnaryMinus5Interpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted, true, false);
            double            result = engine.Calculate("-(1*2)^3");

            Assert.AreEqual(-8.0, result);
        }
Beispiel #7
0
        public void TestCalculationFormula1IntegersCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled);
            double            result = engine.Calculate("2+3");

            Assert.AreEqual(5.0, result);
        }
Beispiel #8
0
        public void TestUnaryMinus4Compiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double            result = engine.Calculate("5* -(1*2)");

            Assert.AreEqual(-10.0, result);
        }
Beispiel #9
0
        public void TestMultiplicationWithNegativeConstant()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double            result = engine.Calculate("5*-100");

            Assert.AreEqual(-500.0, result);
        }
Beispiel #10
0
        public void TestCalculateLognFunctionCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double            result = engine.Calculate("logn(14, 3)");

            Assert.AreEqual(Math.Log(14.0, 3.0), result);
        }
        public void TestCalculateFormula1()
        {
            CalculationEngine engine = new CalculationEngine();
            double result = engine.Calculate("2+3");

            Assert.AreEqual(5.0, result);
        }
Beispiel #12
0
        public void TestCalculateSineFunctionInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
            double            result = engine.Calculate("sin(14)");

            Assert.AreEqual(Math.Sin(14.0), result);
        }
Beispiel #13
0
        public void TestCalculateFormulaVariableNotDefinedInterpreted()
        {
            Dictionary<string, double> variables = new Dictionary<string, double>();
            variables.Add("var1", 2.5);

            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
            double result = engine.Calculate("var1*var2", variables);
        }
Beispiel #14
0
        public void TestCalculateModuloInterpreted()
        {
            CalculationEngine engine =
                new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted, false, false);
            double result = engine.Calculate("5 % 3.0");

            Assert.AreEqual(2.0, result);
        }
Beispiel #15
0
        public void TestNestedFunctions()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture);

            double result = engine.Calculate("max(sin(67), cos(67))");

            Assert.AreEqual(-0.517769799789505, Math.Round(result, 15));
        }
Beispiel #16
0
        public void TestComplicatedPrecedence2()
        {
            CalculationEngine engine = new CalculationEngine();

            double result = engine.Calculate("1+2-3*4/sqrt(25)+6-7*8/9+0");

            Assert.AreEqual(0.378, Math.Round(result, 3));
        }
Beispiel #17
0
        public void TestExpressionArguments2()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture);

            double result = engine.Calculate("if(0.57 < (3000-500)/(1500-500), 10, 20)");

            Assert.AreEqual(10, result);
        }
Beispiel #18
0
        private double IntegralRightRectangle(double a, double b, double step, string formula)
        {
            double result = 0;
            Dictionary <string, double> variables = new Dictionary <string, double>();

            variables.Add("x", a + step);
            CalculationEngine engine   = new CalculationEngine();
            double            function = engine.Calculate(formula, variables);

            for (double x = a; x < b; x += step)
            {
                variables.Remove("x");
                variables.Add("x", x + step);
                function = engine.Calculate(formula, variables);
                result  += function * step;
            }
            return(result);
        }
Beispiel #19
0
 public MathTask(string formula, Dictionary <string, double> variables, string displayValue,
                 ArithmeticOperators op)
 {
     Variables    = variables;
     Formula      = formula;
     Solution     = engine.Calculate(formula, variables);
     DisplayValue = displayValue;
     Operator     = op;
 }
Beispiel #20
0
        public void TestCalculateFormulaVariableNotDefinedCompiled()
        {
            Dictionary <string, double> variables = new Dictionary <string, double>();

            variables.Add("var1", 2.5);

            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled);
            double            result = engine.Calculate("var1*var2", variables);
        }
        public void TestCustomFunctionCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled);

            engine.AddFunction("test", (a, b) => a + b);

            double result = engine.Calculate("test(2,3)");

            Assert.AreEqual(5.0, result);
        }
Beispiel #22
0
        public static double calculateY(string equation, double x)
        {
            CalculationEngine           engine    = new CalculationEngine();
            Dictionary <string, double> variables = new Dictionary <string, double>();

            variables.Add("x", x);
            double result = engine.Calculate(equation, variables);

            return(result);
        }
        public override object ReadJson(
            JsonReader reader,
            Type objectType,
            object existingValue,
            JsonSerializer serializer)
        {
            var expression = reader.Value.ToString();

            return(Convert.ToInt32(_engine.Calculate(expression, _tokens)));
        }
Beispiel #24
0
        public static void Main(string[] args)
        {
            CalculationEngine calculEngine = new CalculationEngine();

            Console.WriteLine("Entrz un formule math");
            String formule = Console.ReadLine();

            Console.WriteLine(calculEngine.Calculate(formule));
            Console.ReadLine();
        }
Beispiel #25
0
        public void TestCalculateFormula1()
        {
            CalculationEngine engine = new CalculationEngine();
            double            result = engine.Calculate("2+3");

#if !NETCORE
            Assert.AreEqual(5.0, result);
#else
            Assert.Equal(5.0, result);
#endif
        }
Beispiel #26
0
        public void TestUnaryMinus3Interpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted, true, false);
            double            result = engine.Calculate("5*(-(1*2)*3)");

#if !NETCORE
            Assert.AreEqual(-30.0, result);
#else
            Assert.Equal(-30.0, result);
#endif
        }
Beispiel #27
0
        public void TestUnaryMinus5Compiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double            result = engine.Calculate("-(1*2)^3");

#if !NETCORE
            Assert.AreEqual(-8.0, result);
#else
            Assert.Equal(-8.0, result);
#endif
        }
Beispiel #28
0
        public void TestNegativeConstant()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double            result = engine.Calculate("-100");

#if !NETCORE
            Assert.AreEqual(-100.0, result);
#else
            Assert.Equal(-100.0, result);
#endif
        }
Beispiel #29
0
        public void TestVariableCaseNonFunc()
        {
            CalculationEngine engine = new CalculationEngine();

            Dictionary <string, double> variables = new Dictionary <string, double>();

            variables.Add("var1", 2);
            variables.Add("otherVariable", 4.2);

            double result = engine.Calculate("var1+2/(3*otherVariablE)", variables);
        }
Beispiel #30
0
        public void TestCalculateLognFunctionInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted, true, false);
            double            result = engine.Calculate("logn(14, 3)");

#if !NETCORE
            Assert.AreEqual(Math.Log(14.0, 3.0), result);
#else
            Assert.Equal(Math.Log(14.0, 3.0), result);
#endif
        }
Beispiel #31
0
        public void TestCalculateCosineFunctionInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
            double            result = engine.Calculate("cos(41)");

#if !NETCORE
            Assert.AreEqual(Math.Cos(41.0), result);
#else
            Assert.Equal(Math.Cos(41.0), result);
#endif
        }
Beispiel #32
0
        public void TestCalculateSineFunctionCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double            result = engine.Calculate("sin(14)");

#if !NETCORE
            Assert.AreEqual(Math.Sin(14.0), result);
#else
            Assert.Equal(Math.Sin(14.0), result);
#endif
        }
Beispiel #33
0
        public void TestCalculationFormula1FloatingPointCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled);
            double            result = engine.Calculate("2.0+3.0");

#if !NETCORE
            Assert.AreEqual(5.0, result);
#else
            Assert.Equal(5.0, result);
#endif
        }
        public void TestCalculateFormulaVariableNotDefinedCompiled()
        {
            Dictionary<string, double> variables = new Dictionary<string, double>();
            variables.Add("var1", 2.5);

            AssertExtensions.ThrowsException<VariableNotDefinedException>(() =>
                {
                    CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled);
                    double result = engine.Calculate("var1*var2", variables);
                });
        }
Beispiel #35
0
        private static void BenchMarkCalculationEngine(CalculationEngine engine, string functionText)
        {
            DateTime start = DateTime.Now;

            for (int i = 0; i < NumberOfTests; i++)
            {
                engine.Calculate(functionText);
            }

            DateTime end = DateTime.Now;

            Console.WriteLine("Total duration: {0}", end - start);
        }
        public void TestUnaryMinus4Compiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double result = engine.Calculate("5* -(1*2)");

            Assert.AreEqual(-10.0, result);
        }
        public void TestReservedVariableName()
        {
            AssertExtensions.ThrowsException<ArgumentException>(() =>
            {
                Dictionary<string, double> variables = new Dictionary<string, double>();
                variables.Add("pi", 2.0);

                CalculationEngine engine = new CalculationEngine();
                double result = engine.Calculate("2 * pI", variables);
            });
        }
        public void TestPiMultiplication()
        {
            CalculationEngine engine = new CalculationEngine();
            double result = engine.Calculate("2 * pI");

            Assert.AreEqual(2 * Math.PI, result);
        }
        public void TestNestedFunctions()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture);

            double result = engine.Calculate("max(sin(67), cos(67))");
            Assert.AreEqual(-0.517769799789505, Math.Round(result, 15));
        }
        public void TestVariableCaseNonFunc()
        {
            CalculationEngine engine = new CalculationEngine();

            Dictionary<string, double> variables = new Dictionary<string, double>();
            variables.Add("var1", 2);
            variables.Add("otherVariable", 4.2);

            double result = engine.Calculate("var1+2/(3*otherVariablE)", variables);
        }
        public void TestNotEqual2Interpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);

            Dictionary<string, double> variables = new Dictionary<string, double>();
            variables.Add("var1", 2);
            variables.Add("var2", 2);

            double result = engine.Calculate("var1 ≠ 2", variables);
            Assert.AreEqual(0.0, result);
        }
        public void TestComplicatedPrecedence2()
        {
            CalculationEngine engine = new CalculationEngine();

            double result = engine.Calculate("1+2-3*4/sqrt(25)+6-7*8/9+0");
            Assert.AreEqual(0.378, Math.Round(result, 3));
        }
        public void TestCalculationFormula1IntegersCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled);
            double result = engine.Calculate("2+3");

            Assert.AreEqual(5.0, result);
        }
        public void TestCalculateSineFunctionCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double result = engine.Calculate("sin(14)");

            Assert.AreEqual(Math.Sin(14.0), result);
        }
        public void TestCalculatePowInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
            double result = engine.Calculate("2^3.0");

            Assert.AreEqual(8.0, result);
        }
        public void TestCalculateModuloInterpreted()
        {
            CalculationEngine engine =
                new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted, false, false);
            double result = engine.Calculate("5 % 3.0");

            Assert.AreEqual(2.0, result);
        }
        public void TestCalculateLognFunctionInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted, true, false);
            double result = engine.Calculate("logn(14, 3)");

            Assert.AreEqual(Math.Log(14.0, 3.0), result);
        }
        public void TestUnaryMinus5Interpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Interpreted, true, false);
            double result = engine.Calculate("-(1*2)^3");

            Assert.AreEqual(-8.0, result);
        }
        public void TestVariableNameCaseSensitivity()
        {
            Dictionary<string, double> variables = new Dictionary<string, double>();
            variables.Add("blabla", 42.5);

            CalculationEngine engine = new CalculationEngine();
            double result = engine.Calculate("2 * BlAbLa", variables);

            Assert.AreEqual(85.0, result);
        }
        public void TestCustomFunctionInterpreted()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture,
                ExecutionMode.Interpreted, false, false);
            engine.AddFunction("test", (a, b) => a + b);

            double result = engine.Calculate("test(2,3)");
            Assert.AreEqual(5.0, result);
        }
        public void TestLessThanCompiled()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled);

            Dictionary<string, double> variables = new Dictionary<string, double>();
            variables.Add("var1", 2);
            variables.Add("var2", 4.2);

            double result = engine.Calculate("var1 < var2", variables);
            Assert.AreEqual(1.0, result);
        }
        public void TestExpressionArguments()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture);

            double result = engine.Calculate("ifless(0.57, (3000-500)/(1500-500), 10, 20)");
            Assert.AreEqual(10, result);
        }
        public void TestCalculateFormulaWithVariables()
        {
            Dictionary<string, double> variables = new Dictionary<string, double>();
            variables.Add("var1", 2.5);
            variables.Add("var2", 3.4);

            CalculationEngine engine = new CalculationEngine();
            double result = engine.Calculate("var1*var2", variables);

            Assert.AreEqual(8.5, result);
        }
        public void TestNegativeConstant()
        {
            CalculationEngine engine = new CalculationEngine(CultureInfo.InvariantCulture, ExecutionMode.Compiled, true, false);
            double result = engine.Calculate("-100");

            Assert.AreEqual(-100.0, result);
        }