private static void RunOrderablePartitionerTest1Core(int size, bool keysIncreasingInEachPartition, bool keysNormalized) { string methodInfo = string.Format("RunOrderablePartitionerTest1(size={0}, keysIncreasingInEachPartition={1}, keysNormalized={2})", size, keysIncreasingInEachPartition, keysNormalized); int[] arr = Enumerable.Range(0, size).ToArray(); Partitioner <int> partitioner = new OrderableListPartitioner <int>(arr, keysIncreasingInEachPartition, keysNormalized); // Without ordering: int[] res = partitioner.AsParallel().Select(x => - x).ToArray().Select(x => - x).OrderBy(x => x).ToArray(); if (!res.OrderBy(i => i).SequenceEqual(arr)) { Assert.True(false, string.Format(methodInfo + " > Failure: Incorrect output")); } // With ordering: int[] resOrdered = partitioner.AsParallel().AsOrdered().Select(x => - x).ToArray().Select(x => - x).ToArray(); if (!resOrdered.SequenceEqual(arr)) { Assert.True(false, string.Format(methodInfo + " > Failure: Incorrect output")); } }
public void OrderableListPartitionerTest() { var nums = Enumerable.Range(0, 100).ToArray(); OrderableListPartitioner <int> partitioner = new OrderableListPartitioner <int>(nums); // Use with Parallel.ForEach Parallel.ForEach(partitioner, (i) => Debug.WriteLine("Thread:" + Thread.CurrentThread.Name + "," + i)); // Use with PLINQ var query = from num in partitioner.AsParallel() where num % 2 == 0 select num; foreach (var v in query) { Debug.WriteLine(v); } }