Exemple #1
0
        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));
        }
Exemple #2
0
        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) + " ) ");
 }