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