public ArraySegmentAssertions <TActualItem> BeEqualTo <TExpected, TExpectedItem>(TExpected expected, Func <TActualItem, TExpectedItem, bool> comparer) where TExpected : IEnumerable <TExpectedItem> { if (expected is null) { throw new EqualToAssertionException <ArraySegment <TActualItem>, TExpected>(Actual, expected); } var(result, index, _, _) = Actual.AsSpan().Compare(expected, comparer); return(result switch { EqualityResult.NotEqualAtIndex => throw new EqualToAssertionException <ArraySegment <TActualItem>, TExpected>( Actual, expected, $"Collections differ at index {index}."), EqualityResult.LessItem => throw new EqualToAssertionException <ArraySegment <TActualItem>, TExpected>( Actual, expected, $"Actual collection has less items."), EqualityResult.MoreItems => throw new EqualToAssertionException <ArraySegment <TActualItem>, TExpected>( Actual, expected, $"Actual collection has more items."), _ => this, });