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()); }