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