<PackageReference Include="NUnit" Version="3.9.0" />

NUnitEqualityComparer

public class NUnitEqualityComparer
NUnitEqualityComparer encapsulates NUnit's handling of equality tests between objects.
using NUnit.Framework.Constraints.Comparers; using System.Collections.Generic; namespace NUnit.Framework.Constraints { public class NUnitEqualityComparer { public class FailurePoint { public long Position; public object ExpectedValue; public object ActualValue; public bool ExpectedHasData; public bool ActualHasData; } private bool caseInsensitive; private bool compareAsCollection; private List<EqualityAdapter> externalComparers = new List<EqualityAdapter>(); private List<FailurePoint> failurePoints; private readonly List<IChainComparer> _comparers; public static NUnitEqualityComparer Default => new NUnitEqualityComparer(); public bool IgnoreCase { get { return caseInsensitive; } set { caseInsensitive = value; } } public bool CompareAsCollection { get { return compareAsCollection; } set { compareAsCollection = value; } } public IList<EqualityAdapter> ExternalComparers => externalComparers; public IList<FailurePoint> FailurePoints => failurePoints; public bool WithSameOffset { get; set; } internal NUnitEqualityComparer() { EnumerablesComparer enumerablesComparer = new EnumerablesComparer(this); _comparers = new List<IChainComparer> { new ArraysComparer(this, enumerablesComparer), new DictionariesComparer(this), new DictionaryEntriesComparer(this), new KeyValuePairsComparer(this), new StringsComparer(this), new StreamsComparer(this), new CharsComparer(this), new DirectoriesComparer(), new NumericsComparer(), new DateTimeOffsetsComparer(this), new TimeSpanToleranceComparer(), new EquatablesComparer(this), new TupleComparer(this), new ValueTupleComparer(this), enumerablesComparer }; } public bool AreEqual(object x, object y, ref Tolerance tolerance, bool topLevelComparison = true) { failurePoints = new List<FailurePoint>(); if (x == null && y == null) return true; if (x == null || y == null) return false; if (x == y) return true; EqualityAdapter externalComparer = GetExternalComparer(x, y); if (externalComparer != null) return externalComparer.AreEqual(x, y); foreach (IChainComparer comparer in _comparers) { bool? nullable = comparer.Equal(x, y, ref tolerance, topLevelComparison); if (nullable.HasValue) return nullable.Value; } return x.Equals(y); } private EqualityAdapter GetExternalComparer(object x, object y) { foreach (EqualityAdapter externalComparer in externalComparers) { if (externalComparer.CanCompare(x, y)) return externalComparer; } return null; } } }