Add non-generic enumerable AddRange to priority queue
This commit is contained in:
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)]
|
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.AggressiveOptimization)]
|
||||||
internal static void AddRange<T>(this RecyclablePriorityQueue<T> queue, IEnumerable<T> items)
|
internal static void AddRange<T>(this RecyclablePriorityQueue<T> queue, IEnumerable<T> items)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -371,6 +371,41 @@ namespace Recyclable.CollectionsTests
|
|||||||
_ = result.Should().Equal(expected);
|
_ = 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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in new issue
Block a user