diff --git a/Recyclable.CollectionsTests/RecyclableLongListTests.cs b/Recyclable.CollectionsTests/RecyclableLongListTests.cs index 5f37dd1..5a40e42 100644 --- a/Recyclable.CollectionsTests/RecyclableLongListTests.cs +++ b/Recyclable.CollectionsTests/RecyclableLongListTests.cs @@ -512,6 +512,34 @@ namespace Recyclable.CollectionsTests _ = copiedItems.Should().Equal(testData); } + [Theory] + [MemberData(nameof(RecyclableLongListTestData.SourceDataWithBlockSizeWithItemIndexVariants), MemberType = typeof(RecyclableLongListTestData))] + public void CopyToShouldCopyAllItemsInTheCorrectOrderWhenConstrainedRange(string testCase, IEnumerable testData, int itemsCount, int minBlockSize, in long[] itemIndexes) + { + // Prepare + var expectedData = testData.ToList(); + foreach (var itemIndex in itemIndexes) + { + TestCopyTo(0); + TestCopyTo((int)itemIndex); + TestCopyTo((int)itemIndex); + } + + void TestCopyTo(int itemIndex) + { + using var list = new RecyclableLongList(testData, minBlockSize, initialCapacity: itemsCount); + long[] expectedItems = new long[itemsCount + itemIndex]; + expectedData.CopyTo(expectedItems, itemIndex); + long[] actualItems = new long[itemsCount + itemIndex]; + + // Act + list.CopyTo(actualItems, itemIndex); + + // Validate + _ = actualItems.Should().Equal(expectedItems); + } + } + [Theory] [MemberData(nameof(RecyclableLongListTestData.SourceRefDataWithBlockSizeVariants), MemberType = typeof(RecyclableLongListTestData))] public void DisposeShouldClearItemsWhenReferenceType(string testCase, IEnumerable testData, long itemsCount, int targetBlockSize)