public void New_TryDequeue_TryEnqueue_x50_TryDequeue_x50_TryDequeue_ItemCount() { int value; var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); for (int i = 0; i < 50; ++i) { q.TryEnqueue(100 - i); } Assert.AreEqual(50, q.ItemCount); Assert.IsFalse(q.ItemIsEmpty); for (int i = 0; i < 50; ++i) { q.TryDequeue(out value); Assert.AreEqual(100 - i, value); } Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); }
public void New_ItemCount() { var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); }
public void New_TryDequeue_TryEnqueue_x50_TryDequeue_x50_TryDequeue_ConsumerCount() { Action <int> value; var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ConsumerCount); q.TryDequeue(out value); Assert.AreEqual(0, q.ConsumerCount); for (int i = 0; i < 50; ++i) { q.TryEnqueue(x => { }); } Assert.AreEqual(50, q.ConsumerCount); for (int i = 0; i < 50; ++i) { q.TryDequeue(out value); Assert.IsAssignableFrom(typeof(Action <int>), value); } Assert.AreEqual(0, q.ConsumerCount); q.TryDequeue(out value); Assert.AreEqual(0, q.ConsumerCount); }
public void New_TryDequeue_TryEnqueue_TryDequeue_TryDequeue_ItemCount() { int value; var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryEnqueue(42); Assert.AreEqual(1, q.ItemCount); Assert.IsFalse(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(42, value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); }
public void New_TryEnqueue_ConsumerCount() { var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ConsumerCount); q.TryEnqueue(x => { }); Assert.AreEqual(1, q.ConsumerCount); }
public void New_TryDequeue_ConsumerCount() { var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ConsumerCount); int value; q.TryDequeue(out value); Assert.AreEqual(0, q.ConsumerCount); }
public void New_TryDequeue_ConsumerCount() { var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ConsumerCount); int value; q.TryDequeue(out value); Assert.AreEqual(0, q.ConsumerCount); }
public void New_TryDequeue_ItemCount() { int value; var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); }
public void New_TryDequeue_TryEnqueue_ConsumerCount() { Action <int> value; var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ConsumerCount); q.TryDequeue(out value); Assert.AreEqual(0, q.ConsumerCount); q.TryEnqueue(x => { }); Assert.AreEqual(1, q.ConsumerCount); }
public void New_TryEnqueueItem_x50_TryEnqueueConsumer_x50_ItemCount_ConsumerCount() { var q = new LockFreeItemConsumerQueue <int>(); var etp = new ElasticThreadPool(10, 10); // submit enqueue & dequeue work-items const int max = 10000; int count = max + 1; var e = new ManualResetEvent(false); int[] checks = new int[max]; for (int i = 0; i < max; ++i) { int j = i; etp.TryQueueWorkItem(() => { int k = Interlocked.Increment(ref checks[j]); Assert.AreEqual(1, k, "value for {0} was already increased", j); q.TryEnqueue(j); }); etp.TryQueueWorkItem(() => { q.TryEnqueue(x => { int k = Interlocked.Decrement(ref checks[x]); Assert.AreEqual(0, k, "value for {0} was already decreased", x); // ReSharper disable AccessToModifiedClosure if (Interlocked.Decrement(ref count) == 0) { // ReSharper restore AccessToModifiedClosure e.Set(); } }); }); } if (Interlocked.Decrement(ref count) == 0) { e.Set(); } if (!e.WaitOne(TimeSpan.FromSeconds(10))) { Assert.Fail("test timed out"); } for (int i = 0; i < max; ++i) { Assert.AreEqual(0, checks[i], "entry {0}", i); } Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); Assert.AreEqual(0, q.ConsumerCount); Assert.IsTrue(q.ConsumerIsEmpty); }
public void New_TryDequeue_TryEnqueue_ConsumerCount() { Action<int> value; var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ConsumerCount); q.TryDequeue(out value); Assert.AreEqual(0, q.ConsumerCount); q.TryEnqueue(x => { }); Assert.AreEqual(1, q.ConsumerCount); }
public void New_ConsumerCount() { var q = new LockFreeItemConsumerQueue <int>(); Assert.AreEqual(0, q.ConsumerCount); }
public void New_ItemCount() { var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); }
public void New_TryEnqueue_x50_TryDequeue_x50_TryDequeue_ItemCount() { int value; var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); for(int i = 0; i < 50; ++i) { q.TryEnqueue(100 - i); } Assert.AreEqual(50, q.ItemCount); Assert.IsFalse(q.ItemIsEmpty); for(int i = 0; i < 50; ++i) { q.TryDequeue(out value); Assert.AreEqual(100 - i, value); } Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryDequeue(out value); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); }
public void New_ConsumerCount() { var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ConsumerCount); }
public void New_TryEnqueue_x50_TryDequeue_x50_TryDequeue_ConsumerCount() { Action<int> value; var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ConsumerCount); for(int i = 0; i < 50; ++i) { q.TryEnqueue(x => { }); } Assert.AreEqual(50, q.ConsumerCount); for(int i = 0; i < 50; ++i) { q.TryDequeue(out value); Assert.IsAssignableFrom(typeof(Action<int>), value); } Assert.AreEqual(0, q.ConsumerCount); q.TryDequeue(out value); Assert.AreEqual(0, q.ConsumerCount); }
public void New_TryEnqueue_ItemCount() { var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); q.TryEnqueue(42); Assert.AreEqual(1, q.ItemCount); Assert.IsFalse(q.ItemIsEmpty); }
public void New_TryEnqueue_ConsumerCount() { var q = new LockFreeItemConsumerQueue<int>(); Assert.AreEqual(0, q.ConsumerCount); q.TryEnqueue(x => { }); Assert.AreEqual(1, q.ConsumerCount); }
public void New_TryEnqueueItem_x50_TryEnqueueConsumer_x50_ItemCount_ConsumerCount() { var q = new LockFreeItemConsumerQueue<int>(); var etp = new ElasticThreadPool(10, 10); // submit enqueue & dequeue work-items const int max = 10000; int count = max + 1; var e = new ManualResetEvent(false); int[] checks = new int[max]; for(int i = 0; i < max; ++i) { int j = i; etp.TryQueueWorkItem(() => { int k = Interlocked.Increment(ref checks[j]); Assert.AreEqual(1, k, "value for {0} was already increased", j); q.TryEnqueue(j); }); etp.TryQueueWorkItem(() => { q.TryEnqueue(x => { int k = Interlocked.Decrement(ref checks[x]); Assert.AreEqual(0, k, "value for {0} was already decreased", x); // ReSharper disable AccessToModifiedClosure if(Interlocked.Decrement(ref count) == 0) { // ReSharper restore AccessToModifiedClosure e.Set(); } }); }); } if(Interlocked.Decrement(ref count) == 0) { e.Set(); } if(!e.WaitOne(TimeSpan.FromSeconds(10))) { Assert.Fail("test timed out"); } for(int i = 0; i < max; ++i) { Assert.AreEqual(0, checks[i], "entry {0}", i); } Assert.AreEqual(0, q.ItemCount); Assert.IsTrue(q.ItemIsEmpty); Assert.AreEqual(0, q.ConsumerCount); Assert.IsTrue(q.ConsumerIsEmpty); }