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

StructuralComparer

static class StructuralComparer
Comparator for two types related by IStructuralEquatable.
using System.Collections; using System.Runtime.CompilerServices; namespace NUnit.Framework.Constraints.Comparers { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal static class StructuralComparer { [System.Runtime.CompilerServices.Nullable(0)] private sealed class NUnitEqualityComparison : IEqualityComparer { private readonly NUnitEqualityComparer _comparer; private Tolerance _tolerance; public Tolerance Tolerance => _tolerance; public NUnitEqualityComparison(NUnitEqualityComparer comparer, Tolerance tolerance) { _comparer = comparer; _tolerance = tolerance; } [System.Runtime.CompilerServices.NullableContext(2)] public new bool Equals(object x, object y) { return _comparer.AreEqual(x, y, ref _tolerance); } public int GetHashCode(object obj) { return 0; } } public static EqualMethodResult Equal(object x, object y, ref Tolerance tolerance, ComparisonState state, NUnitEqualityComparer equalityComparer) { if (equalityComparer.CompareAsCollection && state.TopLevelComparison) return EqualMethodResult.TypesNotSupported; IStructuralEquatable structuralEquatable = x as IStructuralEquatable; if (structuralEquatable != null) { IStructuralEquatable structuralEquatable2 = y as IStructuralEquatable; if (structuralEquatable2 != null) { NUnitEqualityComparison nUnitEqualityComparison = new NUnitEqualityComparison(equalityComparer, tolerance); bool flag = structuralEquatable.Equals(y, nUnitEqualityComparison); bool flag2 = structuralEquatable2.Equals(x, nUnitEqualityComparison); tolerance = nUnitEqualityComparison.Tolerance; if (!(flag | flag2)) return EqualMethodResult.ComparedNotEqual; return EqualMethodResult.ComparedEqual; } } return EqualMethodResult.TypesNotSupported; } } }