public void AtomicInt32SupportsGetAndAddNegativesMultiThreaded()
        {
            const int expected = 1000;

            var i = new AtomicInt32();

            System.Threading.Tasks.Parallel.For(0, expected, j => i.GetAndAdd(1));

            Assert.AreEqual(expected, (int)i);
            Assert.AreEqual(expected, i.Value);
        }
        public void AtomicInt32SupportsGetAndAdd()
        {
            const int expected = 1000;

            var i = new AtomicInt32();

            for (int j = 0; j < expected; j++)
            {
                i.GetAndAdd(1);
            }

            Assert.AreEqual(expected, (int)i);
            Assert.AreEqual(expected, i.Value);
        }
        public void AtomicInt32SupportsGetAndAddNegatives()
        {
            const int expected = 0;

            var i = new AtomicInt32();

            i.GetAndSet(1000);

            for (int j = 0; j < 1000; j++)
            {
                i.GetAndAdd(-1);
            }

            Assert.AreEqual(expected, (int)i);
            Assert.AreEqual(expected, i.Value);
        }