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

EnumerablesComparer

static class EnumerablesComparer
Comparator for two IEnumerables.
using System; using System.Collections; using System.Runtime.CompilerServices; namespace NUnit.Framework.Constraints.Comparers { internal static class EnumerablesComparer { [System.Runtime.CompilerServices.NullableContext(1)] public static EqualMethodResult Equal(object x, object y, ref Tolerance tolerance, ComparisonState state, NUnitEqualityComparer equalityComparer) { IEnumerable enumerable = x as IEnumerable; if (enumerable != null) { IEnumerable enumerable2 = y as IEnumerable; if (enumerable2 != null) { IEnumerator enumerator = enumerable.GetEnumerator(); using (enumerator as IDisposable) { IEnumerator enumerator2 = enumerable2.GetEnumerator(); using (enumerator2 as IDisposable) { ComparisonState state2 = state.PushComparison(x, y); int num = 0; bool flag; bool flag2; EqualMethodResult equalMethodResult; while (true) { flag = enumerator.MoveNext(); flag2 = enumerator2.MoveNext(); if (!flag && !flag2) return EqualMethodResult.ComparedEqual; equalMethodResult = ((flag == flag2) ? equalityComparer.AreEqual(enumerator.Current, enumerator2.Current, ref tolerance, state2) : EqualMethodResult.ComparedNotEqual); if (equalMethodResult != EqualMethodResult.ComparedEqual) break; num++; } NUnitEqualityComparer.FailurePoint failurePoint = new NUnitEqualityComparer.FailurePoint(); failurePoint.Position = num; failurePoint.ExpectedHasData = flag; if (flag) failurePoint.ExpectedValue = enumerator.Current; failurePoint.ActualHasData = flag2; if (flag2) failurePoint.ActualValue = enumerator2.Current; equalityComparer.FailurePoints.Insert(0, failurePoint); return equalMethodResult; } } } } return EqualMethodResult.TypesNotSupported; } } }