Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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));
            }
        }
Beispiel #5
0
        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();
            //}
        }
Beispiel #6
0
        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));
        }
Beispiel #7
0
        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));
        }
Beispiel #8
0
 public static IEnumerable <object[]> SumData(int[] counts)
 {
     foreach (object[] results in UnorderedSources.Ranges(counts.Cast <int>(), x => Functions.SumRange(0L, x)))
     {
         yield return(results);
     }
 }
Beispiel #9
0
 public static void DegreeOfParallelism(Labeled <ParallelQuery <int> > labeled, int count, int degree)
 {
     Assert.Equal(Functions.SumRange(0, count), labeled.Item.WithDegreeOfParallelism(degree).Sum());
 }