public void TestCloneBinaryExpression() { BinaryExpression binaryExpression = new BinaryExpression() { Type = BinaryType.Add, Left = new ColumnReference() { Identifiers = new List <string>() { "c1" } }, Right = new IntegerLiteral() { Value = 3 } }; var clone = binaryExpression.Clone() as BinaryExpression; Assert.AreEqual(binaryExpression, clone); Assert.IsFalse(ReferenceEquals(binaryExpression, clone)); Assert.IsFalse(ReferenceEquals(binaryExpression.Left, clone.Left)); Assert.IsFalse(ReferenceEquals(binaryExpression.Right, clone.Right)); }
public void Clone_BinaryExpression() { //Arrange var expr1 = new NumberExpression(-2); var expr2 = new NumberExpression(3); var actual = new BinaryExpression(expr1, OperatorTypes.Power, expr2); //Act var expected = (BinaryExpression)actual.Clone(); //Assert Assert.IsTrue(!Object.ReferenceEquals(actual, expected)); Assert.AreEqual(actual.Execute().Count.Re.ToNumber(), expected.Execute().Count.Re.ToNumber()); }
public virtual Differences VisitBinaryExpression(BinaryExpression binaryExpression1, BinaryExpression binaryExpression2){ Differences differences = new Differences(binaryExpression1, binaryExpression2); if (binaryExpression1 == null || binaryExpression2 == null){ if (binaryExpression1 != binaryExpression2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } BinaryExpression changes = (BinaryExpression)binaryExpression2.Clone(); BinaryExpression deletions = (BinaryExpression)binaryExpression2.Clone(); BinaryExpression insertions = (BinaryExpression)binaryExpression2.Clone(); if (binaryExpression1.NodeType == binaryExpression2.NodeType) differences.NumberOfSimilarities++; else differences.NumberOfDifferences++; Differences diff = this.VisitExpression(binaryExpression1.Operand1, binaryExpression2.Operand1); if (diff == null){Debug.Assert(false); return differences;} changes.Operand1 = diff.Changes as Expression; deletions.Operand1 = diff.Deletions as Expression; insertions.Operand1 = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Operand1 && diff.Deletions == deletions.Operand1 && diff.Insertions == insertions.Operand1); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitExpression(binaryExpression1.Operand2, binaryExpression2.Operand2); if (diff == null){Debug.Assert(false); return differences;} changes.Operand2 = diff.Changes as Expression; deletions.Operand2 = diff.Deletions as Expression; insertions.Operand2 = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Operand2 && diff.Deletions == deletions.Operand2 && diff.Insertions == insertions.Operand2); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; if (differences.NumberOfDifferences == 0){ differences.Changes = null; differences.Deletions = null; differences.Insertions = null; }else{ differences.Changes = changes; differences.Deletions = deletions; differences.Insertions = insertions; } return differences; }
public override Expression VisitBinaryExpression(BinaryExpression binaryExpression) { if (binaryExpression == null) return null; binaryExpression = (BinaryExpression)base.VisitBinaryExpression((BinaryExpression)binaryExpression.Clone()); return binaryExpression; }