public void AtomicIntegerArray_Load_Should_Success()
 {
     var atomicIntegerArray = new AtomicIntegerArray(new []{100});
     Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.Relaxed));
     Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.Acquire));
     Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.AcqRel));
     Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.SeqCst));
 }
        public void AtomicIntegerArray_Load_Should_Fail()
        {
            var atomicIntegerArray = new AtomicIntegerArray(new [] { 100 });

            Assert.Throws <InvalidOperationException>(() => atomicIntegerArray.Load(0, MemoryOrder.Release));
#pragma warning disable 618
            Assert.Throws <NotSupportedException>(() => atomicIntegerArray.Load(0, MemoryOrder.Consume));
#pragma warning restore 618
        }
        public void AtomicIntegerArray_Load_Should_Success()
        {
            var atomicIntegerArray = new AtomicIntegerArray(new [] { 100 });

            Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.Relaxed));
            Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.Acquire));
            Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.AcqRel));
            Assert.Equal(100, atomicIntegerArray.Load(0, MemoryOrder.SeqCst));
        }
        public void AtomicIntegerArray_Load_Acquire_Should_Success(MemoryOrder order)
        {
            var atomicIntegerArray = new AtomicIntegerArray(new int[3], order);

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(0, atomicIntegerArray.Load(i, MemoryOrder.Acquire));
                atomicIntegerArray.Store(i, i, MemoryOrder.Release);
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(i, atomicIntegerArray.Load(i, MemoryOrder.Acquire));
            }
        }
        public void AtomicIntegerArray_Load_Acquire_Should_Success(MemoryOrder order)
        {
            var atomicIntegerArray = new AtomicIntegerArray(new int[3], order);

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(0, atomicIntegerArray.Load(i, MemoryOrder.Acquire));
                atomicIntegerArray.Store(i, i, MemoryOrder.Release);
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(i, atomicIntegerArray.Load(i, MemoryOrder.Acquire));
            }
        }
        public void AtomicIntegerArray_Store_MemoryOrder_Should_Success(MemoryOrder order)
        {
            var atomicIntegerArray = new AtomicIntegerArray(new int[3], order);

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                atomicIntegerArray.Store(i, i, order);
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(i, atomicIntegerArray.Load(i, order));
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                atomicIntegerArray.Store(i, i, order);
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(i, atomicIntegerArray.Load(i, order));
            }
        }
        public void AtomicIntegerArray_Store_MemoryOrder_Should_Success(MemoryOrder order)
        {
            var atomicIntegerArray = new AtomicIntegerArray(new int[3], order);

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                atomicIntegerArray.Store(i, i, order);
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(i, atomicIntegerArray.Load(i, order));
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                atomicIntegerArray.Store(i, i, order);
            }

            for (int i = 0; i < atomicIntegerArray.Count; i++)
            {
                Assert.Equal(i, atomicIntegerArray.Load(i, order));
            }
        }
        public void AtomicIntegerArray_Load_Should_Fail()
        {
            var atomicIntegerArray = new AtomicIntegerArray(new []{100});
            Assert.Throws<InvalidOperationException>(() => atomicIntegerArray.Load(0, MemoryOrder.Release));
#pragma warning disable 618
            Assert.Throws<NotSupportedException>(() => atomicIntegerArray.Load(0, MemoryOrder.Consume));
#pragma warning restore 618
        }