public void CheckWithOneThread()
        {
            var incValue    = new IncValue();
            var expectedMax = _iterations;
            var expectedSum = _iterations * (_iterations + 1) / 2;

            for (int i = 1; i <= _iterations; i++)
            {
                incValue.Add(i);
            }

            Assert.Equal(expectedMax, incValue.GetMax());
            Assert.Equal(expectedSum, incValue.GetSum());
        }
        public async Task CheckWithMultipleThreads()
        {
            const int max = 200;

            ThreadPool.SetMinThreads(_iterations / 10, 10);

            var    incValue         = new IncValue();
            var    parallelActions  = new List <Task>(_iterations);
            var    valuesSet        = new List <List <double> >(_iterations);
            double expectedMaxValue = 0;
            double expectedSum      = 0;
            double localMax;
            double localSum;

            for (int i = 0; i < _iterations; i++)
            {
                valuesSet.Add(Helpers.GetRandomDoubles(_iterations, max, out localMax, out localSum));
                expectedSum += localSum;
                if (expectedMaxValue < localMax)
                {
                    expectedMaxValue = localMax;
                }
            }

            for (int i = 0; i < _iterations; i++)
            {
                parallelActions.Add(
                    Task.Factory.StartNew(
                        (parameters) =>
                {
                    var currentSet = (int)parameters;
                    for (int j = 0; j < _iterations; j++)
                    {
                        incValue.Add(valuesSet[currentSet][j]);
                    }
                },
                        i));
            }

            await Task.WhenAll(parallelActions);

            Assert.Equal(expectedMaxValue, incValue.GetMax());
            Assert.Equal(expectedSum, incValue.GetSum());
        }