From 5f9be08ee4e6af2107763a617e4ff93f16ca4ab5 Mon Sep 17 00:00:00 2001 From: Atif Aziz Date: Tue, 23 Mar 2021 22:30:55 +0100 Subject: [PATCH] Fix "GroupAdjacent" null key handling bug --- MoreLinq.Test/GroupAdjacentTest.cs | 24 ++++++++++++++++++++++++ MoreLinq/GroupAdjacent.cs | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/MoreLinq.Test/GroupAdjacentTest.cs b/MoreLinq.Test/GroupAdjacentTest.cs index f8bb13ea9..995405f1d 100644 --- a/MoreLinq.Test/GroupAdjacentTest.cs +++ b/MoreLinq.Test/GroupAdjacentTest.cs @@ -198,6 +198,30 @@ public void GroupAdjacentSourceSequenceResultSelectorComparer() reader.ReadEnd(); } + [Test] + public void GroupAdjacentSourceSequenceWithSomeNullKeys() + { + var groupings = + Enumerable.Range(1, 5) + .SelectMany(x => Enumerable.Repeat((int?)x, x).Append(null)) + .GroupAdjacent(x => x); + + int?[] aNull = { null }; + + using var reader = groupings.Read(); + AssertGrouping(reader, 1, 1); + AssertGrouping(reader, null, aNull); + AssertGrouping(reader, 2, 2, 2); + AssertGrouping(reader, null, aNull); + AssertGrouping(reader, 3, 3, 3, 3); + AssertGrouping(reader, null, aNull); + AssertGrouping(reader, 4, 4, 4, 4, 4); + AssertGrouping(reader, null, aNull); + AssertGrouping(reader, 5, 5, 5, 5, 5, 5); + AssertGrouping(reader, null, aNull); + reader.ReadEnd(); + } + static void AssertGrouping(SequenceReader> reader, TKey key, params TElement[] elements) { diff --git a/MoreLinq/GroupAdjacent.cs b/MoreLinq/GroupAdjacent.cs index f19eeeb9a..cc57e5167 100644 --- a/MoreLinq/GroupAdjacent.cs +++ b/MoreLinq/GroupAdjacent.cs @@ -273,7 +273,7 @@ static IEnumerable GroupAdjacentImpl( var key = keySelector(iterator.Current); var element = elementSelector(iterator.Current); - if (group is ({} k, {} members)) + if (group is (var k, {} members)) { if (comparer.Equals(k, key)) { @@ -290,7 +290,7 @@ static IEnumerable GroupAdjacentImpl( } { - if (group is ({} k, {} members)) + if (group is (var k, {} members)) yield return resultSelector(k, members); } }