public void TestCompareAndSet()
        {
            AtomicInt64 ai = new AtomicInt64(1);

            assertTrue(ai.CompareAndSet(1, 2));
            assertTrue(ai.CompareAndSet(2, -4));
            assertEquals(-4, ai.Value);
            assertFalse(ai.CompareAndSet(-5, 7));
            assertFalse((7 == ai.Value));
            assertTrue(ai.CompareAndSet(-4, 7));
            assertEquals(7, ai.Value);
        }
        public void TestCompareAndSetInMultipleThreads()
        {
            AtomicInt64 ai = new AtomicInt64(1);
            Thread      t  = new Thread(() =>
            {
                while (!ai.CompareAndSet(2, 3))
                {
                    Thread.Yield();
                }
            });

            try
            {
                t.Start();
                assertTrue(ai.CompareAndSet(1, 2));
                t.Join(LONG_DELAY_MS);
                assertFalse(t.IsAlive);
                assertEquals(ai.Value, 3);
            }
            catch (Exception e)
            {
                unexpectedException();
            }
        }