public void BoundedExhaustiveTest(int[] arr, int capacity) { // expected: top 'capacity' elements in the sorted version of 'arr' var expectedResult = arr.OrderBy(i => i).Reverse().Take(capacity).Reverse().ToArray(); var sl = new ConcurrentBoundedSortedCollection<int, int>(capacity); Parallel.ForEach(arr, e => sl.TryAdd(e, e)); var slArray = sl.Select(kvp => kvp.Key).ToArray(); XAssert.ArrayEqual(expectedResult, slArray); }
public void BoundedExhaustiveTest(int n) { var arr = Enumerable.Range(0, n).ToArray(); var perms = GenAllPermutations(arr).ToArray(); Assert.All( Enumerable.Range(1, n + 1), // test for all possible capacities from 1 to n+1 capacity => { var top = arr.OrderBy(i => i).Reverse().Take(capacity).Reverse().ToArray(); Assert.All( perms, // test for all possible permutations perm => { var sl = new ConcurrentBoundedSortedCollection <int, int>(capacity); Parallel.ForEach(perm, e => sl.TryAdd(e, e)); var slArray = sl.Select(kvp => kvp.Key).ToArray(); XAssert.ArrayEqual(top, slArray); }); }); }
public void AddParallelManyElements(int capacity) { Random r = new Random(); ConcurrentBoundedSortedCollection <int, int> cbsl = new ConcurrentBoundedSortedCollection <int, int>(capacity); // Build array of random ints int arraySize = 400; int[] valArray = new int[arraySize]; for (int i = 0; i < arraySize; i++) { valArray[i] = r.Next(); } Parallel.ForEach(valArray, i => cbsl.TryAdd(i, i)); XAssert.ArrayEqual(valArray.OrderByDescending(i => i).Take(capacity).Reverse().ToArray(), cbsl.Select(kvp => kvp.Key).ToArray()); }