コード例 #1
0
        public void WhenIEvaluateTheReversePolishNotationTokensWithVariablesAsFollows(Table table)
        {
            var calc = new TokenCalculator();

            foreach (var row in table.Rows)
            {
                calc.BuildVariableMap(row[0], row[1]);
            }
            _evaluation = calc.EvaluateReversePolishExpression(_calculatorReversePolishTokens.ReversePolishTokens);
        }
コード例 #2
0
        public void CalculateArithmeticExpression(string inputString)
        {
            TokenCalculator tc    = new TokenCalculator();
            var             input = new List <Token>()
            {
            };
            var expectedOutput = "";

            switch (inputString[1])
            {
            case '+':
                input = new List <Token>()
                {
                    _two, _one, _plus
                };
                expectedOutput = "3";
                break;

            case '-':
                input = new List <Token>()
                {
                    _two, _one, _minus
                };
                expectedOutput = "1";
                break;

            case '*':
                input = new List <Token>()
                {
                    _two, _one, _multiply
                };
                expectedOutput = "2";
                break;

            case '/':
                input = new List <Token>()
                {
                    _two, _one, _divide
                };
                expectedOutput = "2";
                break;

            case '^':
                input = new List <Token>()
                {
                    _two, _one, _exponent
                };
                expectedOutput = "2";
                break;
            }
            string actualOutput = tc.EvaluateReversePolishExpression(input);

            Assert.True(expectedOutput == actualOutput, $"Expected Output: {expectedOutput}\nActual Output: {actualOutput}");
        }
コード例 #3
0
        public void CalculateArithmeticExpressionChain(string inputString)
        {
            TokenCalculator tc    = new TokenCalculator();
            var             input = new List <Token>()
            {
                _two, _one, _divide, _three, _four, _multiply, _plus
            };
            var expectedOutput = "14";

            string actualOutput = tc.EvaluateReversePolishExpression(input);

            Assert.True(expectedOutput == actualOutput, $"Expected Output: {expectedOutput}\nActual Output: {actualOutput}");
        }
コード例 #4
0
        public void CalculateFunctionExpressionChain(string inputString)
        {
            TokenCalculator tc    = new TokenCalculator();
            var             input = new List <Token>()
            {
                _one, _two, _four, _multiply, _sin, _plus
            };
            var expectedOutput = "1.9894";

            string actualOutput  = tc.EvaluateReversePolishExpression(input);
            string roundedOutput = Math.Round(float.Parse(actualOutput), 4).ToString();

            Assert.True(expectedOutput == roundedOutput, $"Expected Output rounded to  fourth decimal: {expectedOutput}\nActual Output: {actualOutput} rounded to {roundedOutput}");
        }
コード例 #5
0
        public void CalculateVariableExpression(string inputString)
        {
            TokenCalculator tc    = new TokenCalculator();
            var             input = new List <Token>()
            {
                _one, _varX, _plus
            };

            tc.BuildVariableMap("x", "10");
            var expectedOutput = "11";

            string actualOutput  = tc.EvaluateReversePolishExpression(input);
            string roundedOutput = Math.Round(float.Parse(actualOutput), 4).ToString();

            Assert.True(expectedOutput == roundedOutput, $"Expected Output rounded to  fourth decimal: {expectedOutput}\nActual Output: {actualOutput} rounded to {roundedOutput}");
        }
コード例 #6
0
        public void CalculateFunctionExpression(string inputString)
        {
            TokenCalculator tc    = new TokenCalculator();
            var             input = new List <Token>()
            {
            };
            var expectedOutput = "";

            switch (inputString.Substring(0, 3))
            {
            case "sin":
                input = new List <Token>()
                {
                    _two, _four, _multiply, _sin
                };
                expectedOutput = "0.9894";
                break;

            case "cos":
                input = new List <Token>()
                {
                    _two, _four, _multiply, _cos
                };
                expectedOutput = "-0.1455";
                break;

            case "tan":
                input = new List <Token>()
                {
                    _two, _four, _multiply, _tan
                };
                expectedOutput = "-6.7997";
                break;
            }

            string actualOutput  = tc.EvaluateReversePolishExpression(input);
            string roundedOutput = Math.Round(float.Parse(actualOutput), 4).ToString();

            Assert.True(expectedOutput == roundedOutput, $"Expected Output rounded to  fourth decimal: {expectedOutput}\nActual Output: {actualOutput} rounded to {roundedOutput}");
        }
コード例 #7
0
        static double EvaluateFromString(string inputString, string varValue)
        {
            var sp = new StringParser();
            var tp = new TokensParser();
            var tc = new TokenCalculator();

            var parsedTokens  = sp.ParseString(inputString);
            var orderedTokens = tp.ReversePolishParse(parsedTokens);
            var varTokens     = orderedTokens.FindAll(token => token.Type == "variable");
            var mappedVars    = new List <string>();

            foreach (var varToken in varTokens)
            {
                if (!mappedVars.Contains(varToken.Value))
                {
                    mappedVars.Add(varToken.Value);
                    tc.BuildVariableMap(varToken.Value, varValue);
                }
            }
            var evaluation = tc.EvaluateReversePolishExpression(orderedTokens);

            return(double.Parse(evaluation));
        }
コード例 #8
0
        public void WhenIEvaluateTheReversePolishNotationTokens()
        {
            var calc = new TokenCalculator();

            _evaluation = calc.EvaluateReversePolishExpression(_calculatorReversePolishTokens.ReversePolishTokens);
        }