public void TestSimplifyCrazyFactors()
        {
            Expression <Func <double, double, double, double, double> > lambda = (a, b, c, d) => (a / b / (c * a)) * (c * d / a) / d;

            Assert.AreEqual("((((a / b) / (c * a)) * ((c * d) / a)) / d)", lambda.Body.ToString());

            Expression simplified = AutoSimplify.SimplifyFactors(lambda.Body);

            Assert.AreEqual(ExpressionType.Divide, simplified.NodeType);
            Assert.IsInstanceOfType(typeof(BinaryExpression), simplified);
            Assert.AreEqual("(((a * d) * c) / ((((d * a) * b) * a) * c))", simplified.ToString());
        }
        public void TestSimplifyTernaryQuotient()
        {
            Expression <Func <double, double> > lambda = x => x / 2 / Math.PI;

            Assert.AreEqual(String.Format("((x / 2) / {0})", Math.PI), lambda.Body.ToString());

            Expression simplified = AutoSimplify.SimplifyFactors(lambda.Body);

            Assert.AreEqual(ExpressionType.Divide, simplified.NodeType);
            Assert.IsInstanceOfType(typeof(BinaryExpression), simplified);
            Assert.AreEqual(String.Format("(x / ({0} * 2))", Math.PI), simplified.ToString());
        }