public void MustBeReturnListTwoFreePlusFourMinusTwo(string expression) { IList <Token> actual = parser.Parse(expression); List <Token> expected = new List <Token>(); TokenOperand op1 = new TokenOperand(); op1.Value = "2"; TokenOperation oper = new TokenOperation(); oper.Value = "^"; TokenOperand op2 = new TokenOperand(); op2.Value = "3"; TokenOperation op3 = new TokenOperation(); op3.Value = "+"; TokenOperand op4 = new TokenOperand(); op4.Value = "4"; TokenOperation op5 = new TokenOperation(); op5.Value = "-"; TokenOperand op6 = new TokenOperand(); op6.Value = "2"; expected.Add(op1); expected.Add(oper); expected.Add(op2); expected.Add(op3); expected.Add(op4); expected.Add(op5); expected.Add(op6); Assert.AreEqual(expected, actual); }
public void ShouldBeOperand(string expression) { IList <Token> actualListToken = parser.Parse(expression); TokenOperand operand = new TokenOperand() { Value = expression.Trim() }; Assert.AreEqual(operand.Value, actualListToken[0].Value); }
public void ShouldBeEqual() { TokenOperand actual = new TokenOperand(); actual.Value = "2"; List <Token> actualListToken = new List <Token>(); actualListToken.Add(actual); TokenOperand expected = new TokenOperand(); expected.Value = "2"; List <Token> expectedListToken = new List <Token>(); expectedListToken.Add(expected); Assert.AreEqual(expectedListToken, actualListToken); }
public void MustBeReturnList2step3(string expression) { IList <Token> actual = parser.Parse(expression); List <Token> expected = new List <Token>(); TokenOperand op1 = new TokenOperand(); op1.Value = "2"; TokenOperation oper = new TokenOperation(); oper.Value = "^"; TokenOperand op2 = new TokenOperand(); op2.Value = "3"; expected.Add(op1); expected.Add(oper); expected.Add(op2); Assert.AreEqual(expected, actual); }
public void MustBeReturnListTwoFreePlusFourMinusTwoWithBrackets(string expression) { IList <Token> actual = parser.Parse(expression); List <Token> expected = new List <Token>(); TokenOperand op1 = new TokenOperand(); op1.Value = "2"; TokenOperation oper = new TokenOperation(); oper.Value = "^"; TokenBracket brOpen = new TokenBracket(); brOpen.isOpened = true; brOpen.Value = "("; TokenOperand op2 = new TokenOperand(); op2.Value = "3"; TokenOperation op3 = new TokenOperation(); op3.Value = "+"; TokenOperand op4 = new TokenOperand(); op4.Value = "4"; TokenOperation op5 = new TokenOperation(); op5.Value = "-"; TokenOperand op6 = new TokenOperand(); op6.Value = "2"; TokenBracket brClose = new TokenBracket(); brOpen.isOpened = false; brClose.Value = ")"; expected.Add(op1); expected.Add(oper); expected.Add(brOpen); expected.Add(op2); expected.Add(op3); expected.Add(op4); expected.Add(op5); expected.Add(op6); expected.Add(brClose); Assert.AreEqual(expected, actual); }
public virtual Token GetToken(string expression) { string expressionNew = expression.Replace(" ", ""); TokenOperand operand = new TokenOperand(); operand.Value = ""; TokenOperation operation = new TokenOperation(); operation.Value = ""; TokenBracket tokenBracket = new TokenBracket(); tokenBracket.Value = ""; string tempToken = ""; for (int i = 0; i < expressionNew.Length; i++) { Char cCh = expressionNew[i]; if (Char.IsDigit(cCh)) { operand.Value = String.Format("{0}{1}", operand.Value, cCh); } else { if (CheckEligibleOperation(cCh)) { if (operand.Value.ToString() != "") { break; } if (cCh == '(') { tokenBracket.isOpened = true; tokenBracket.Value = String.Format("{0}", cCh); break; } if (cCh == ')') { tokenBracket.isOpened = false; tokenBracket.Value = String.Format("{0}", cCh); break; } else { operation.Value = String.Format("{0}", cCh); break; } } else { break; } } } if (operation.Value != "") { SetOperationPriority(operation); return(operation); } if (operand.Value != "") { return(operand); } if (tokenBracket.Value != "") { SetOperationPriority(tokenBracket); return(tokenBracket); } else { throw new CalcBadSyntaxException(); } }
public virtual void ExecuteOperation(Stack <Token> temp, TokenOperation operation) { TokenOperand op2 = temp.Pop() as TokenOperand; TokenOperand op1 = temp.Pop() as TokenOperand; switch (operation.Value.ToString()) { case "+": { int r = Convert.ToInt32(op1.Value) + Convert.ToInt32(op2.Value); temp.Push(new TokenOperand() { Value = r }); break; } case "-": { int r = Convert.ToInt32(op1.Value) - Convert.ToInt32(op2.Value); temp.Push(new TokenOperand() { Value = r }); break; } case "*": { int r = Convert.ToInt32(op1.Value) * Convert.ToInt32(op2.Value); temp.Push(new TokenOperand() { Value = r }); break; } case "/": { int r = Convert.ToInt32(op1.Value) / Convert.ToInt32(op2.Value); temp.Push(new TokenOperand() { Value = r }); break; } case "^": { int r = (int)Math.Round(Math.Pow(Convert.ToInt32(op1.Value), Convert.ToInt32(op2.Value)), 0); temp.Push(new TokenOperand() { Value = r }); break; } default: break; } }