Refine stack AddRange preallocation

This commit is contained in:
Marek Lemańczyk committed 2025-07-17 00:21:34 +02:00
1 parent 2546d6bf3f
commit 414e482aaf
2 files changed
+329 -77

No files matched your search

@@ -526,5 +526,89 @@ namespace Recyclable.CollectionsTests
_ = stack.Should().Equal(expected);
}
[Theory]
[MemberData(nameof(RecyclableLongListTestData.ItemsCountTestCases), MemberType = typeof(RecyclableLongListTestData))]
public void AddRangeShouldAddSortedSetItemsInCorrectOrder(int itemsCount)
{
long[] data = RecyclableLongListTestData.CreateTestData(itemsCount).ToArray();
using var source = new RecyclableSortedSet<long>();
foreach (long item in data)
{
source.Add(item);
}
using var stack = new RecyclableStack<long>();
stack.AddRange(source);
List<long> expected = new(itemsCount);
expected.AddRange(data);
expected.Reverse();
_ = stack.Count.Should().Be(itemsCount);
_ = stack.Should().Equal(expected);
}
[Theory]
[MemberData(nameof(RecyclableLongListTestData.ItemsCountTestCases), MemberType = typeof(RecyclableLongListTestData))]
public void AddRangeShouldNotOverrideItemsFromSortedSet(int itemsCount)
{
long[] data = RecyclableLongListTestData.CreateTestData(itemsCount).ToArray();
using var source = new RecyclableSortedSet<long>();
foreach (long item in data)
{
source.Add(item);
}
using var stack = new RecyclableStack<long>();
stack.AddRange(source);
stack.AddRange(source);
List<long> expected = new(itemsCount * 2);
expected.AddRange(data);
expected.AddRange(data);
expected.Reverse();
_ = stack.Count.Should().Be(itemsCount * 2);
_ = stack.Should().Equal(expected);
}
[Theory]
[MemberData(nameof(RecyclableLongListTestData.ItemsCountTestCases), MemberType = typeof(RecyclableLongListTestData))]
public void AddRangeShouldAddLinkedListItemsInCorrectOrder(int itemsCount)
{
long[] data = RecyclableLongListTestData.CreateTestData(itemsCount).ToArray();
using var source = new RecyclableLinkedList<long>(data);
using var stack = new RecyclableStack<long>();
stack.AddRange(source);
List<long> expected = new(itemsCount);
expected.AddRange(data);
expected.Reverse();
_ = stack.Count.Should().Be(itemsCount);
_ = stack.Should().Equal(expected);
}
[Theory]
[MemberData(nameof(RecyclableLongListTestData.ItemsCountTestCases), MemberType = typeof(RecyclableLongListTestData))]
public void AddRangeShouldNotOverrideItemsFromLinkedList(int itemsCount)
{
long[] data = RecyclableLongListTestData.CreateTestData(itemsCount).ToArray();
using var source = new RecyclableLinkedList<long>(data);
using var stack = new RecyclableStack<long>();
stack.AddRange(source);
stack.AddRange(source);
List<long> expected = new(itemsCount * 2);
expected.AddRange(data);
expected.AddRange(data);
expected.Reverse();
_ = stack.Count.Should().Be(itemsCount * 2);
_ = stack.Should().Equal(expected);
}
}
}