public void TestReferenceEquals() { var comparer = new CountingEqualityComparer <string>(); var collection = new[] { "a", "b" }; collection.CollectionEquals(collection, comparer).ShouldEqual(true); Assert.Equal(0, comparer.EqualsCount); Assert.Equal(0, comparer.HashCount); }
private static ProfilingResult Profile <T>( bool expectedResult, IEnumerable <T> a, IEnumerable <T> b, Func <IEnumerable <T>, IEnumerable <T>, IEqualityComparer <T>, bool> equals) { // capture base stats var wrappedA = a is IReadOnlyCollection <T>?new CountingEnumerableCollection <T>((IReadOnlyCollection <T>)a) : new CountingEnumerable <T>(a); var wrappedB = b is IReadOnlyCollection <T>?new CountingEnumerableCollection <T>((IReadOnlyCollection <T>)b) : new CountingEnumerable <T>(b); var comparer = new CountingEqualityComparer <T>(); bool result = equals(wrappedA, wrappedB, comparer); bool fail = false; if (expectedResult != result) { fail = true; } // capture timing stats const int Trials = 100; var originalThreadPriority = Thread.CurrentThread.Priority; try { Thread.CurrentThread.Priority = ThreadPriority.Highest; var stopwatch = Stopwatch.StartNew(); for (var i = 0; i < Trials; ++i) { if (expectedResult != equals(a, b, EqualityComparer <T> .Default)) { fail = true; } } return(new ProfilingResult { Duration = stopwatch.Elapsed, EnumerateCount = wrappedA.EnumerateCount + wrappedB.EnumerateCount, EqualsCount = comparer.EqualsCount, HashCount = comparer.HashCount, Result = result, Fail = fail }); } finally { Thread.CurrentThread.Priority = originalThreadPriority; } }
private static ProfilingResult Profile <T>( IEnumerable <T> a, IEnumerable <T> b, Func <IEnumerable <T>, IEnumerable <T>, IEqualityComparer <T>, bool> equals) { // capture base stats var wrappedA = a is IReadOnlyCollection <T>?new CountingEnumerableCollection <T>((IReadOnlyCollection <T>)a) : new CountingEnumerable <T>(a); var wrappedB = b is IReadOnlyCollection <T>?new CountingEnumerableCollection <T>((IReadOnlyCollection <T>)b) : new CountingEnumerable <T>(b); var comparer = new CountingEqualityComparer <T>(); equals(wrappedA, wrappedB, comparer); // capture timing stats const int Trials = 1000; GC.Collect(); GC.WaitForPendingFinalizers(); var originalThreadPriority = Thread.CurrentThread.Priority; try { Thread.CurrentThread.Priority = ThreadPriority.Highest; var stopwatch = Stopwatch.StartNew(); for (var i = 0; i < Trials; ++i) { equals(a, b, EqualityComparer <T> .Default); } return(new ProfilingResult { Duration = stopwatch.Elapsed, EnumerateCount = wrappedA.EnumerateCount + wrappedB.EnumerateCount, EqualsCount = comparer.EqualsCount, HashCount = comparer.HashCount, }); } finally { Thread.CurrentThread.Priority = originalThreadPriority; } }