diff --git a/Recyclable.Collections.TestData/RecyclableLongListTestData.cs b/Recyclable.Collections.TestData/RecyclableLongListTestData.cs index bb4f120..d193486 100644 --- a/Recyclable.Collections.TestData/RecyclableLongListTestData.cs +++ b/Recyclable.Collections.TestData/RecyclableLongListTestData.cs @@ -184,6 +184,25 @@ namespace Recyclable.Collections.TestData } } + public static IEnumerable<(string TestCase, IEnumerable TestData, long ItemsCount, int BlockSize)> CreateBigSourceDataWithBlockSize() + { + long itemsCount = Array.MaxLength; + using var testData = CreateTestData(itemsCount).ToRecyclableLongList(); + foreach (var blockSize in BlockSizeVariants) + { + yield return ($"long[{itemsCount}]", testData, itemsCount, blockSize); + } + } + + public static IEnumerable<(string TestCase, IEnumerable TestData, long ItemsCount, int BlockSize, IEnumerable<(long ItemIndex, long RangeStartItemIndex, long RangeItemsCount)> ItemIndexesWithRange)> CreateBigSourceDataWithOutOfRangeItemIndexesWithRange() + { + foreach (var tc in CreateBigSourceDataWithBlockSize()) + { + var outOfRangeItemIndexesWithRanges = CreateOutOfRangeItemIndexesWithRanges(tc.ItemsCount, tc.BlockSize).ToArray(); + yield return (tc.TestCase, tc.TestData, tc.ItemsCount, tc.BlockSize, outOfRangeItemIndexesWithRanges); + } + } + public static IEnumerable CreateItemIndexVariants(long itemsCount, int blockSize) { if (itemsCount == 0) @@ -252,6 +271,27 @@ namespace Recyclable.Collections.TestData //return CreateItemIndexVariants(); } + public static IEnumerable<(long ItemIndex, long RangeStartItemIndex, long RangeItemsCount)> CreateOutOfRangeItemIndexesWithRanges(long itemsCount, int blockSize) + { + var itemIndexes = CreateItemIndexVariants(itemsCount, blockSize); + foreach (var itemIndexForGenerator in itemIndexes) + { + var itemRanges = CombineItemIndexWithRange(itemIndexForGenerator, itemsCount); + foreach (var (itemIndex, rangedItemsCount) in itemRanges) + { + if (itemIndex > 0) + { + yield return (itemIndex - 1, itemIndex, rangedItemsCount); + } + + if (itemIndex + rangedItemsCount < itemsCount) + { + yield return (itemIndex + rangedItemsCount, itemIndex, rangedItemsCount); + } + } + } + } + public static IEnumerable CreateRefTestData(long itemsCount) { for (long index = 1; index <= itemsCount; index++) @@ -406,6 +446,8 @@ namespace Recyclable.Collections.TestData 1, 2, 4, 16, RecyclableDefaults.MinPooledArrayLength - 5, (int)BitOperations.RoundUpToPowerOf2(RecyclableDefaults.MinPooledArrayLength) }; + public static IEnumerable<(string TestCase, IEnumerable TestData, long ItemsCount, int BlockSize)> BigSourceDataWithBlockSizeVariants { get; } = CreateBigSourceDataWithBlockSize(); + public static IEnumerable<(string TestCase, IEnumerable TestData, long ItemsCount, int BlockSize, IEnumerable<(long ItemIndex, long RangeStartItemIndex, long RangeItemsCount)> ItemIndexesWithRange)> BigSourceDataWithOutOfRangeItemIndexesWithRangeVariants { get; } = CreateBigSourceDataWithOutOfRangeItemIndexesWithRange(); public static IEnumerable BlockSizeTestCases { get; } = BlockSizeVariants.Select(x => new object[] { x }); public static IEnumerable<(string TestCase, IEnumerable TestData, long ItemsCount)> EmptySourceDataVariants { get; } = CreateSourceDataVariants(0);