public void IncrementIfGreaterThan_ShouldDoNothingIfTheConditionFailes() { int value = 0; Assert.That(InterlockedExtensions.IncrementIfGreaterThan(ref value, 0) is null); Assert.That(value, Is.EqualTo(0)); }
public void IncrementIfGreaterThan_ShouldWorkParallelly() { int value = 0; Task[] tasks = Enumerable .Repeat(0, 5) .Select(_ => Task.Run(Increment)) .ToArray(); Assert.DoesNotThrowAsync(() => Task.WhenAll(tasks)); Assert.That(value, Is.EqualTo(5000)); void Increment() { for (int i = 0; i < 1000; i++) { InterlockedExtensions.IncrementIfGreaterThan(ref value, -1); } } }