public void TestInvalid() { var expression = new MinusExpression(Mock.Of <IExpression>(e => e.Evaluate(It.IsAny <IDictionary <string, object> >()) == (object)DateTime.Now)); Assert.IsNull(expression.Evaluate(null)); }
public void TestString() { var expression = new MinusExpression(Mock.Of <IExpression>(e => e.Evaluate(It.IsAny <IDictionary <string, object> >()) == (object)"12")); Assert.AreEqual(-12M, expression.Evaluate(null)); }
public void TestMinusExpression() { IExpressionNode const1 = new ConstantExpression(5); IExpressionNode const2 = new ConstantExpression(15); IExpressionNode plusExpr = new AddExpression(const1, const2); IExpressionNode const3 = new ConstantExpression(3); IExpressionNode const4 = new ConstantExpression(14); IExpressionNode plusExpr2 = new AddExpression(const3, const4); IExpressionNode minusExpr = new MinusExpression(plusExpr, plusExpr2); double res = minusExpr.Evaluate(); Assert.AreEqual(res, 3); }
private string GetExpression(MinusExpression expression, ref List<OleDbParameter> parameters) { return " ( " + GetExpressionDispatch(expression.Children[0], ref parameters) + " - " + GetExpressionDispatch(expression.Children[1], ref parameters) + " ) "; }
// Syntax analysis of reverse polish notation expression private Stack <double> SyntaxAnalysisRPN(Stack <double> stack, string token) { // if it's operand then just push to stack if (token[0] == NumberMarker[0]) { stack.Push(double.Parse(token.Remove(0, 1))); } // otherwise apply operator or funtion to elements in stack else if (NumberOfArguments(token) == 1) { double argument = stack.Pop(); NumExpression arg = new NumExpression(argument); if (!isRadians) { argument = argument * Math.PI / 180; // Convert value to degree } NumExpression trigArg = new NumExpression(argument); double result; switch (token) { case UnaryPlus: result = arg.evaluate(); break; case UnaryMinus: NegateExpresion neg = new NegateExpresion(arg); result = neg.evaluate(); break; case Sqrt: SqrtExpression sqrt = new SqrtExpression(arg); result = sqrt.evaluate(); break; case Log: LogarithmExpression log = new LogarithmExpression(arg); result = log.evaluate(); break; case Ln: LnExpression ln = new LnExpression(arg); result = ln.evaluate(); break; case Sin: SinExpression sin = new SinExpression(trigArg); result = sin.evaluate(); break; case Cos: CosExpression cos = new CosExpression(trigArg); result = cos.evaluate(); break; case Tan: TanExpression tan = new TanExpression(trigArg); result = tan.evaluate(); break; case Csc: CscExpression csc = new CscExpression(trigArg); result = csc.evaluate(); break; case Sec: SecExpression sec = new SecExpression(trigArg); result = sec.evaluate(); break; case Cot: CotExpression cot = new CotExpression(trigArg); result = cot.evaluate(); break; default: throw new ArgumentException("Unknown operator"); } stack.Push(result); } else { // otherwise operator's number of arguments equal to 2 double argument2 = stack.Pop(); double argument1 = stack.Pop(); NumExpression arg1 = new NumExpression(argument1); NumExpression arg2 = new NumExpression(argument2); double result; switch (token) { case Plus: AdditionExpression add = new AdditionExpression(arg1, arg2); result = add.evaluate(); break; case Minus: MinusExpression minus = new MinusExpression(arg1, arg2); result = minus.evaluate(); break; case Multiply: MultiplyExpression multiply = new MultiplyExpression(arg1, arg2); result = multiply.evaluate(); break; case Divide: if (argument2 == 0) { throw new DivideByZeroException("Second argument is zero"); } DivideExpression divide = new DivideExpression(arg1, arg2); result = divide.evaluate(); break; case Mod: ModExpression mod = new ModExpression(arg1, arg2); result = mod.evaluate(); break; case Exponent: ExpononetExpression exp = new ExpononetExpression(arg1, arg2); result = exp.evaluate(); break; default: throw new ArgumentException("Unknown operator"); } stack.Push(result); } return(stack); }
private string GetExpression(MinusExpression expression, ref List <OleDbParameter> parameters) { return(" ( " + GetExpressionDispatch(expression.Children[0], ref parameters) + " - " + GetExpressionDispatch(expression.Children[1], ref parameters) + " ) "); }