示例#1
0
        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());
        }