public IExpression Simplify(IExpression input)
 {
     mWasChanged      = false;
     sMovedExpression = ExpressionCloner.Clone(input);
     MoveAdditionsOrSubtractions(sMovedExpression);
     return(sMovedExpression);
 }
예제 #2
0
 public IExpression Simplify(IExpression input)
 {
     mWasChanged           = false;
     mCalculatedExpression = ExpressionCloner.Clone(input);
     mCalculatedExpression.Accept(this);
     return(mCalculatedExpression);
 }
예제 #3
0
        public void ExpressionClonerClonesAdditionWithLeftAdditionChainAndRightMultiplicationWithVariableAtTheEnd()
        {
            var underTest = new Addition
            {
                Left =
                    new Addition
                {
                    Left = new Addition {
                        Left = new Constant {
                            Value = 1
                        }, Right = new Constant {
                            Value = 2
                        }
                    },
                    Right = new Constant {
                        Value = 3
                    }
                },
                Right = new Multiplication {
                    Left = new Constant {
                        Value = 4
                    }, Right = new Variable {
                        Name = "a"
                    }
                }
            };
            var result          = ExpressionCloner.Clone(underTest);
            var equalityChecker = new ExpressionEqualityChecker();

            equalityChecker.IsEqual(result, underTest).Should().BeTrue();
        }
예제 #4
0
        public void ExpressionClonerClonesSimpleAddition()
        {
            var underTest = new Addition {
                Left = new Constant {
                    Value = 1
                }, Right = new Constant {
                    Value = 2
                }
            };
            var result          = ExpressionCloner.Clone(underTest);
            var equalityChecker = new ExpressionEqualityChecker();

            equalityChecker.IsEqual(result, underTest).Should().BeTrue();
        }
예제 #5
0
        IExpression CreateMultiplicationReplacement(IExpression multiplier, IExpression parenthesed)
        {
            mListOfMultipliers = mHelper.GetAllUnderLyingMultipliableExpressions(multiplier);
            mListOfFactors     = mHelper.GetAllUnderLyingMultipliableExpressions(parenthesed);
            foreach (var factor in mListOfFactors)
            {
                var variable = factor as Variable;
                if (variable?.Parent is Multiplication)
                {
                    continue;
                }
                DistributeMultipliersOverFactors(factor);
            }

            var result = (ParenthesedExpression)parenthesed;

            return(ExpressionCloner.Clone(result.Wrapped));
        }
예제 #6
0
        public void ExpressionClonerClonesAdditionWithTwoOperations()
        {
            var underTest = new Addition
            {
                Left = new Addition {
                    Left = new Constant {
                        Value = 1
                    }, Right = new Constant {
                        Value = 2
                    }
                },
                Right = new Addition {
                    Left = new Constant {
                        Value = 3
                    }, Right = new Constant {
                        Value = 4
                    }
                }
            };
            var result = ExpressionCloner.Clone(underTest);

            result.ShouldBeEquivalentTo(underTest, cfg => cfg.Excluding(e => e.Children));
        }
예제 #7
0
 public IExpression Simplify(IExpression input)
 {
     mResult = ExpressionCloner.Clone(input);
     Traverse(mResult);
     return(mResult);
 }
예제 #8
0
 public IExpression Simplify(IExpression input)
 {
     mExpression = ExpressionCloner.Clone(input);
     mExpression.Accept(this);
     return(mExpression);
 }
예제 #9
0
 protected void UseAsResult(IExpression expression) => mResult = ExpressionCloner.Clone(expression);
예제 #10
0
        public static Expression Clone(this Expression expression)
        {
            var cloner = new ExpressionCloner();

            return(cloner.Visit(expression));
        }