コード例 #1
0
    protected override Expression VisitBinary(BinaryExpression node)
    {
        switch (node.NodeType)
        {
        case ExpressionType.Add:
        case ExpressionType.Subtract:
            return(Expression.MakeBinary(node.NodeType, Visit(node.Left), Visit(node.Right)));

        case ExpressionType.Multiply:
            return(Expression.Add(Expression.Multiply(node.Left, Visit(node.Right)), Expression.Multiply(Visit(node.Left), node.Right)));

        case ExpressionType.Divide:
            return(Expression.Divide(Expression.Subtract(Expression.Multiply(Visit(node.Left), node.Right), Expression.Multiply(node.Left, Visit(node.Right))), Expression.Power(node.Right, Expression.Constant(2))));

        case ExpressionType.Power:
            if (node.Right is ConstantExpression)
            {
                return(Expression.Multiply(node.Right, Expression.Multiply(Visit(node.Left), Expression.Subtract(node.Right, Expression.Constant(1)))));
            }
            else if (node.Left is ConstantExpression)
            {
                return(Expression.Multiply(node, MathExpressions.Log(node.Left)));
            }
            else
            {
                return(Expression.Multiply(node, Expression.Add(
                                               Expression.Multiply(Visit(node.Left), Expression.Divide(node.Right, node.Left)),
                                               Expression.Multiply(Visit(node.Right), MathExpressions.Log(node.Left))
                                               )));
            }

        default:
            throw new NotImplementedException();
        }
    }
コード例 #2
0
        public void TestBasicMathSentenceWithTwoOrMoreNumbers()
        {
            string          s        = "1+2+3-3-2-1";
            MathExpressions m        = new MathExpressions();
            string          sentence = m.BasicMathExpression(s);

            Assert.AreEqual(sentence, "0");
        }
コード例 #3
0
        public void TestBasicMathSentenceWithNumberAndTrigonometry()
        {
            string          s        = "2+cos(1)";
            MathExpressions m        = new MathExpressions();
            string          sentence = m.BasicMathExpression(s);

            Assert.AreEqual(sentence, "3");
        }
コード例 #4
0
        public void TestBasicMathSentenceWithTwoUnknownNumbersOneBeingTrigSin()
        {
            string          s        = "1+3+x+sin(x)";
            double          x        = -1;
            MathExpressions m        = new MathExpressions();
            string          sentence = m.BasicMathExpressionWithTrigonometry(s, x);

            Assert.AreEqual(sentence, "2");
        }
コード例 #5
0
        public void TestBasicMathSentenceWithTwoUnknownNumbers()
        {
            string          s        = "1+3+x+x";
            double          x        = 3;
            MathExpressions m        = new MathExpressions();
            string          sentence = m.BasicMathExpressionWithOneOrMoreUnknown(s, x);

            Assert.AreEqual(sentence, "10");
        }
コード例 #6
0
        public void TestBasicMathSentenceWithTwoUnknownNumbersOneBaeingTrigTanNegative()
        {
            string          s        = "1+3-x-3*2-tan(x)";
            double          x        = -1;
            MathExpressions m        = new MathExpressions();
            string          sentence = m.BasicMathExpressionWithTrigonometry(s, x);

            Assert.AreEqual(sentence, "1");
        }
コード例 #7
0
        public void TestBasicMathSentenceWithNumberUnknownInTrigonometryAndAddition()
        {
            string s = "2+2+cos(x)";
            double x;

            x = 1;
            MathExpressions m        = new MathExpressions();
            string          sentence = m.BasicMathExpressionWithTrigonometry(s, x);

            Assert.AreEqual(sentence, "5");
        }
コード例 #8
0
        public void TestBasicMathSentenceWithNumberAndUnknownNumber()
        {
            string s = "2+x";
            double x;

            x = 2;
            MathExpressions m        = new MathExpressions();
            string          sentence = m.BasicMathExpressionWithOneOrMoreUnknown(s, x);

            Assert.AreEqual(sentence, "4");
        }
コード例 #9
0
 public ExpressionsViewModel()
 {
     _expressions = new MathExpressions();
     AddCommand = new RelayCommand(() => _expressions.Add());
 }
コード例 #10
0
        public void Test_CalculateSlope(int x1, int y1, int x2, int y2, double expected)
        {
            var slope = MathExpressions.CalculateSlope(x1, y1, x2, y2);

            Assert.Equal(expected, slope);
        }
コード例 #11
0
        public void Test_Max(int a, int b, int expected)
        {
            var max = MathExpressions.Max(a, b);

            Assert.Equal(expected, max);
        }
コード例 #12
0
        public void Test_SumNumbers(int a, int b, int expected)
        {
            var result = MathExpressions.Sum(a, b);

            Assert.Equal(expected, result);
        }
コード例 #13
0
 public ExpressionsViewModel()
 {
     _expressions = new MathExpressions();
     AddCommand   = new RelayCommand(() => _expressions.Add());
 }