public void GetSet() { bool mark; AtomicMarkable <T> ai = new AtomicMarkable <T>(one, false); Assert.AreEqual(one, ai.Value); Assert.IsFalse(ai.IsMarked); Assert.AreEqual(one, ai.GetValue(out mark)); Assert.IsFalse(mark); ai.SetNewAtomicValue(two, false); Assert.AreEqual(two, ai.Value); Assert.IsFalse(ai.IsMarked); Assert.AreEqual(two, ai.GetValue(out mark)); Assert.IsFalse(mark); ai.SetNewAtomicValue(one, true); Assert.AreEqual(one, ai.Value); Assert.IsTrue(ai.IsMarked); Assert.AreEqual(one, ai.GetValue(out mark)); Assert.IsTrue(mark); ai.SetNewAtomicValue(one, true); Assert.AreEqual(one, ai.Value); Assert.IsTrue(ai.IsMarked); Assert.AreEqual(one, ai.GetValue(out mark)); Assert.IsTrue(mark); }
public void AttemptMark() { bool mark; AtomicMarkable <T> ai = new AtomicMarkable <T>(one, false); Assert.IsFalse(ai.IsMarked, "Value is marked."); Assert.IsTrue(ai.AttemptMark(one, true), "Value was not marked"); Assert.IsTrue(ai.IsMarked, "Value is not marked."); Assert.AreEqual(one, ai.GetValue(out mark), "Value does not equal."); Assert.IsTrue(mark, "Mark returned is false"); }
public void CompareAndSet() { bool mark; AtomicMarkable <T> ai = new AtomicMarkable <T>(one, false); Assert.AreEqual(one, ai.GetValue(out mark)); Assert.IsFalse(ai.IsMarked); Assert.IsFalse(mark); Assert.IsTrue(ai.CompareAndSet(one, two, false, false)); Assert.AreEqual(two, ai.GetValue(out mark)); Assert.IsFalse(mark); Assert.IsTrue(ai.CompareAndSet(two, m3, false, true)); Assert.AreEqual(m3, ai.GetValue(out mark)); Assert.IsTrue(mark); Assert.IsFalse(ai.CompareAndSet(two, m3, true, true)); Assert.AreEqual(m3, ai.GetValue(out mark)); Assert.IsTrue(mark); }