public static void Sum_Int_SomeNull(Labeled <ParallelQuery <int> > labeled, int count, int sum) { ParallelQuery <int> query = labeled.Item; Assert.Equal(Functions.SumRange(0, count / 2), query.Select(x => x < count / 2 ? (int?)x : null).Sum()); Assert.Equal(-Functions.SumRange(0, count / 2), query.Sum(x => x < count / 2 ? -(int?)x : null)); }
public static void Aggregate_Sum_SeedFunction(Labeled <ParallelQuery <int> > labeled, int count) { ParallelQuery <int> query = labeled.Item; int actual = query.Aggregate( () => 0, (accumulator, x) => accumulator + x, (left, right) => left + right, result => result + ResultFuncModifier); Assert.Equal(Functions.SumRange(0, count) + ResultFuncModifier, actual); }
public static void DegreeOfParallelism_Aggregate_Accumulator(Labeled <ParallelQuery <int> > labeled, int count, int degree) { ParallelQuery <int> query = labeled.Item; int accumulatorCombineCount = 0; int actual = query.WithDegreeOfParallelism(degree).Aggregate( 0, (accumulator, x) => accumulator + x, (left, right) => { Interlocked.Increment(ref accumulatorCombineCount); return(left + right); }, result => result); Assert.Equal(Functions.SumRange(0, count), actual); Assert.Equal(degree - 1, accumulatorCombineCount); }
public static void Aggregate_Sum(Labeled <ParallelQuery <int> > labeled, int count) { ParallelQuery <int> query = labeled.Item; if (count == 0) { Assert.Throws <InvalidOperationException>(() => query.Aggregate((x, y) => x + y)); } else { // The operation will overflow for long-running sizes, but that's okay: // The helper is overflowing too! Assert.Equal(Functions.SumRange(0, count), query.Aggregate((x, y) => x + y)); } }
public static void DegreeOfParallelism_Barrier(Labeled <ParallelQuery <int> > labeled, int count, int degree) { Barrier barrier = new Barrier(degree); //If ThreadPool becomes available, uncomment the below. //_poolManager.ReserveThreads(degree); //try //{ Assert.Equal(Functions.SumRange(0, count), labeled.Item.WithDegreeOfParallelism(degree).Sum(x => { barrier.SignalAndWait(); return(x); })); //} //finally //{ // _poolManager.ReleaseThreads(); //} }
public static void Aggregate_Sum_Seed(Labeled <ParallelQuery <int> > labeled, int count) { ParallelQuery <int> query = labeled.Item; Assert.Equal(Functions.SumRange(0, count), query.Aggregate(0, (x, y) => x + y)); }
public static void Aggregate_Sum_Result(Labeled <ParallelQuery <int> > labeled, int count) { ParallelQuery <int> query = labeled.Item; Assert.Equal(Functions.SumRange(0, count) + ResultFuncModifier, query.Aggregate(0, (x, y) => x + y, result => result + ResultFuncModifier)); }
public static IEnumerable <object[]> SumData(int[] counts) { foreach (object[] results in UnorderedSources.Ranges(counts.Cast <int>(), x => Functions.SumRange(0L, x))) { yield return(results); } }
public static void DegreeOfParallelism(Labeled <ParallelQuery <int> > labeled, int count, int degree) { Assert.Equal(Functions.SumRange(0, count), labeled.Item.WithDegreeOfParallelism(degree).Sum()); }