public static void AtomicIntPtrArray() { IntPtr[] array = { new IntPtr(10) }; Equal(new IntPtr(11), array.IncrementAndGet(0L)); Equal(new IntPtr(10), array.DecrementAndGet(0L)); array.VolatileWrite(0L, new IntPtr(20)); True(array.CompareAndSet(0L, new IntPtr(20), new IntPtr(30))); Equal(new IntPtr(30), array.VolatileRead(0L)); False(array.CompareAndSet(0L, new IntPtr(20), new IntPtr(50))); Equal(new IntPtr(30), array.VolatileRead(0L)); Equal(new IntPtr(30), array.GetAndAccumulate(0L, new IntPtr(60), (x, y) => x + y.ToInt32())); Equal(new IntPtr(90), array.VolatileRead(0L)); Equal(new IntPtr(10), array.AccumulateAndGet(0L, new IntPtr(80), (x, y) => x - y.ToInt32())); Equal(new IntPtr(10), array.VolatileRead(0L)); Equal(new IntPtr(10), array.GetAndSet(0L, new IntPtr(25))); Equal(new IntPtr(25), array.VolatileRead(0L)); Equal(new IntPtr(42), array.UpdateAndGet(0L, current => new IntPtr(42))); Equal(new IntPtr(42), array.GetAndUpdate(0L, current => new IntPtr(52))); Equal(new IntPtr(52), array.VolatileRead(0L)); }
public static void AtomicDoubleArray() { double[] array = { 10D }; Equal(11D, array.IncrementAndGet(0L)); Equal(10D, array.DecrementAndGet(0L)); array.VolatileWrite(0L, 20D); True(array.CompareAndSet(0L, 20D, 30D)); Equal(30D, array.VolatileRead(0L)); False(array.CompareAndSet(0L, 20D, 50D)); Equal(30D, array.VolatileRead(0L)); Equal(80D, array.Add(0L, 50D)); Equal(80D, array.VolatileRead(0L)); Equal(80D, array.GetAndAccumulate(0L, 10D, (x, y) => x + y)); Equal(90D, array.VolatileRead(0L)); Equal(10D, array.AccumulateAndGet(0L, 80D, (x, y) => x - y)); Equal(10D, array.VolatileRead(0L)); Equal(10D, array.GetAndSet(0L, 25D)); Equal(25D, array.VolatileRead(0L)); Equal(42D, array.UpdateAndGet(0L, current => 42D)); Equal(42D, array.GetAndUpdate(0L, current => 52D)); Equal(52D, array.VolatileRead(0L)); }
public static void AtomicFloatArray() { float[] array = { 10F }; Equal(11F, array.IncrementAndGet(0L)); Equal(10F, array.DecrementAndGet(0L)); array.VolatileWrite(0L, 20F); True(array.CompareAndSet(0L, 20F, 30F)); Equal(30F, array.VolatileRead(0L)); False(array.CompareAndSet(0L, 20F, 50F)); Equal(30F, array.VolatileRead(0L)); Equal(80F, array.Add(0L, 50F)); Equal(80F, array.VolatileRead(0L)); Equal(80F, array.GetAndAccumulate(0L, 10F, (x, y) => x + y)); Equal(90F, array.VolatileRead(0L)); Equal(10F, array.AccumulateAndGet(0L, 80F, (x, y) => x - y)); Equal(10F, array.VolatileRead(0L)); Equal(10F, array.GetAndSet(0L, 25F)); Equal(25F, array.VolatileRead(0L)); Equal(42F, array.UpdateAndGet(0L, current => 42F)); Equal(42F, array.GetAndUpdate(0L, current => 52F)); Equal(52F, array.VolatileRead(0L)); }
public static void AtomicLongArray() { long[] array = { 10L }; Equal(11L, array.IncrementAndGet(0L)); Equal(10L, array.DecrementAndGet(0L)); array.VolatileWrite(0L, 20L); True(array.CompareAndSet(0L, 20L, 30L)); Equal(30L, array.VolatileRead(0L)); False(array.CompareAndSet(0L, 20L, 50L)); Equal(30L, array.VolatileRead(0L)); Equal(80L, array.Add(0L, 50L)); Equal(80L, array.VolatileRead(0L)); Equal(80L, array.GetAndAccumulate(0L, 10L, (x, y) => x + y)); Equal(90L, array.VolatileRead(0L)); Equal(10L, array.AccumulateAndGet(0L, 80L, (x, y) => x - y)); Equal(10L, array.VolatileRead(0L)); Equal(10L, array.GetAndSet(0L, 25L)); Equal(25L, array.VolatileRead(0L)); Equal(42L, array.UpdateAndGet(0L, current => 42L)); Equal(42L, array.GetAndUpdate(0L, current => 52L)); Equal(52L, array.VolatileRead(0L)); }
public static void AtomicIntArray() { int[] array = { 10 }; Equal(11, array.IncrementAndGet(0L)); Equal(10, array.DecrementAndGet(0L)); array.VolatileWrite(0L, 20); True(array.CompareAndSet(0L, 20, 30)); Equal(30, array.VolatileRead(0L)); False(array.CompareAndSet(0L, 20, 50)); Equal(30, array.VolatileRead(0L)); Equal(80, array.Add(0L, 50)); Equal(80, array.VolatileRead(0L)); Equal(80, array.GetAndAccumulate(0L, 10, (x, y) => x + y)); Equal(90, array.VolatileRead(0L)); Equal(10, array.AccumulateAndGet(0L, 80, (x, y) => x - y)); Equal(10, array.VolatileRead(0L)); Equal(10, array.GetAndSet(0L, 25)); Equal(25, array.VolatileRead(0L)); Equal(42, array.UpdateAndGet(0L, current => 42)); Equal(42, array.GetAndUpdate(0L, current => 52)); Equal(52, array.VolatileRead(0L)); }