Add non-generic enumerable AddRange to priority queue

This commit is contained in:
Marek Lemańczyk committed 2025-09-16 13:52:36 +02:00
1 parent 33187c1053
commit 050d7fd386
2 files changed
+47

No files matched your search

@@ -1108,6 +1108,18 @@ namespace Recyclable.Collections
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.AggressiveOptimization)]
internal static IEnumerator AddRange<T>(this RecyclablePriorityQueue<T> queue, IEnumerable source)
{
IEnumerator enumerator = source.GetEnumerator();
while (enumerator.MoveNext())
{
queue.Enqueue((T)enumerator.Current!);
}
return enumerator;
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.AggressiveOptimization)]
internal static void AddRange<T>(this RecyclablePriorityQueue<T> queue, IEnumerable<T> items)
{
@@ -371,6 +371,41 @@ namespace Recyclable.CollectionsTests
_ = result.Should().Equal(expected);
}
[Fact]
public void AddRangeEnumerableShouldAddItemsInSortedOrder()
{
using var queue = new RecyclablePriorityQueue<int>();
_ = queue.AddRange((System.Collections.IEnumerable)_testData);
var result = new List<int>();
while (queue.LongCount > 0)
{
result.Add(queue.Dequeue());
}
var expected = _testData.OrderBy(v => v).ToList();
_ = result.Should().Equal(expected);
}
[Fact]
public void AddRangeEnumerableShouldNotOverrideItems()
{
using var queue = new RecyclablePriorityQueue<int>();
_ = queue.AddRange((System.Collections.IEnumerable)_testData);
_ = queue.AddRange((System.Collections.IEnumerable)_testData);
var result = new List<int>();
while (queue.LongCount > 0)
{
result.Add(queue.Dequeue());
}
var expected = _testData.Concat(_testData).OrderBy(v => v).ToList();
_ = result.Should().Equal(expected);
}
}
}