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); }
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}"); }
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}"); }
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}"); }
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}"); }
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}"); }
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)); }
public void WhenIEvaluateTheReversePolishNotationTokens() { var calc = new TokenCalculator(); _evaluation = calc.EvaluateReversePolishExpression(_calculatorReversePolishTokens.ReversePolishTokens); }