public void CanIncToValue(long initial, long value, long expected) { var tslong = new ThreadSafeLong(initial); tslong.IncTo(value); Assert.Equal(expected, tslong.Value); }
public async Task IncToMultiThreads(int threads, int observations) { var tslong = new ThreadSafeLong(0); var testData = new IEnumerable <long> [threads]; var max = long.MinValue; for (var i = 0; i < threads; i++) { var data = GenerateTestData(observations); max = Math.Max(data.max, max); testData[i] = data.items; } await Task.WhenAll(testData.Select(async d => { foreach (long item in d) { await Task.Yield(); tslong.IncTo(item); } }).ToArray()); Assert.Equal(max, tslong.Value); }