/// <summary> /// Compares two objects, ensuring all failure path are executed. /// </summary> /// <param name="object1">The first object to compare.</param> /// <param name="object2">The Second object to compare.</param> /// <param name="canReturnFalse">True if this comparer might return false during normal operations.</param> public static bool CoverIsEqual(IEqualComparable object1, IEqualComparable object2, bool canReturnFalse = false) { CompareEqual Comparer = New(canReturnFalse); bool IsValid = object1.IsEqual(Comparer, object2); if (!IsValid) { return(false); } int ComparisonCount = Comparer.ComparisonCount; for (int i = 0; i <= ComparisonCount; i++) { Comparer.SetFailIndex(i); object1.IsEqual(Comparer, object2); } return(true); }
/// <summary> /// Checks that two objects are equal. /// </summary> /// <param name="obj1">The first object.</param> /// <param name="obj2">The second object.</param> public bool VerifyEqual(IEqualComparable obj1, IEqualComparable obj2) { Debug.Assert(obj1 != null); Debug.Assert(obj2 != null); bool Result; if (!ComparedObjectList.ContainsKey(obj1)) { ComparedObjectList.Add(obj1, false); } else if (!ComparedObjectList.ContainsKey(obj2)) { ComparedObjectList.Add(obj2, false); } else { Result = true; if (ComparisonCount == FailIndex) { return(false); } ComparisonCount++; return(Result); } if (obj1.IsEqual(this, obj2)) { Result = true; } else if (CanReturnFalse) { Result = false; } else { Result = false; // For breakpoints. } if (ComparisonCount == FailIndex) { return(false); } ComparisonCount++; return(Result); }