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