public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayHasTheSameOrderAsTheQueue() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new[] { new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow } }; foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var result = queue.PurgeAllItems(); // Assert for (int i = 0; i < result.Length; i++) { Assert.AreEqual(items[i], result[i].Item); } }
public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayWithThreeItems() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new[] { new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow } }; foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var result = queue.PurgeAllItems(); // Assert Assert.AreEqual(items.Length, result.Length); }
public void EnqueueAndDequeue_OneMillionItems() { // Arrange int itemCount = 1000000; var aLotOfItems = TestUtilities.GetSystemInformationObjects(itemCount); var queue = new SystemInformationMessageQueue(); // Act var enqueueWatch = new Stopwatch(); enqueueWatch.Start(); foreach (var item in aLotOfItems) { queue.Enqueue(new SystemInformationQueueItem(item)); } enqueueWatch.Stop(); Console.WriteLine("Enqueing {0} items took {1} milliseconds.", itemCount, enqueueWatch.ElapsedMilliseconds); // Assert for (int i = 0; i < aLotOfItems.Length; i++) { var dequedItem = queue.Dequeue(); Assert.AreEqual(aLotOfItems[i], dequedItem.Item); } }
public void EnqueueAndDequeue_OneMillionItems() { // Arrange int itemCount = 1000000; var aLotOfItems = TestUtilities.GetSystemInformationObjects(itemCount); var queue = new SystemInformationMessageQueue(); // Act var enqueueWatch = new Stopwatch(); enqueueWatch.Start(); foreach (var item in aLotOfItems) { queue.Enqueue(new SystemInformationQueueItem(item)); } enqueueWatch.Stop(); Console.WriteLine("Enqueing {0} items took {1} milliseconds.", itemCount, enqueueWatch.ElapsedMilliseconds); // Assert for (int i = 0; i < aLotOfItems.Length; i++) { var dequedItem = queue.Dequeue(); Assert.AreEqual(aLotOfItems[i], dequedItem.Item); } }
public void Dequeue_FirstItemThatIsAddedIsReturned() { // Arrange var queue = new SystemInformationMessageQueue(); var firstItem = new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }; queue.Enqueue(new SystemInformationQueueItem(firstItem)); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow })); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow })); // Act var dequeuedItem = queue.Dequeue(); // Assert Assert.AreEqual(firstItem, dequeuedItem.Item); }
public void Dequeue_ReturnsItemsInTheSameOrderAsTheyHaveBeenAdded() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new[] { new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow } }; // Act foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Assert foreach (var systemInformation in items) { var dequeuedItem = queue.Dequeue(); Assert.AreEqual(systemInformation, dequeuedItem.Item); } }
public void Dequeue_ReturnsItemsInTheSameOrderAsTheyHaveBeenAdded() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new[] { new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow } }; // Act foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Assert foreach (var systemInformation in items) { var dequeuedItem = queue.Dequeue(); Assert.AreEqual(systemInformation, dequeuedItem.Item); } }
public void Enqueue_ItemIsNull_ArgumentNullExceptionIsThrown() { // Arrange var queue = new SystemInformationMessageQueue(); IQueueItem <SystemInformation> item = null; // Act queue.Enqueue(item); }
public void PurgeQueueWhileEnqueuing_AllItemsThatAreEnqueuedAreAlsoDequeued() { // Arrange var itemPoolSize = 10000000; var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize); var queue = new SystemInformationMessageQueue(); // Act var purgeCount = 0; var dequeuedItemCount = 0; var enqueuedItemCount = 0; var thread1 = new Task( () => { foreach (var item in itemPool) { queue.Enqueue(new SystemInformationQueueItem(item)); enqueuedItemCount++; } }); var thread2 = new Task( () => { while (!queue.IsEmpty()) { purgeCount++; dequeuedItemCount += queue.PurgeAllItems().Count(); int millisecondsToWaitBeforeNextItemIsQueued = TestUtilities.GetRandNumber(50, 100); Thread.Sleep(millisecondsToWaitBeforeNextItemIsQueued); } }); var stopWatch = new Stopwatch(); stopWatch.Start(); thread1.Start(); thread2.Start(); Task.WaitAll(thread1, thread2); stopWatch.Stop(); // Assert Console.WriteLine( "Enqueuing {0} items while another thread purged the queue took {1} milliseconds. The queue has been purged {2} time(s) during this time.", enqueuedItemCount, stopWatch.ElapsedMilliseconds, purgeCount); Assert.AreEqual(enqueuedItemCount, dequeuedItemCount); Assert.IsTrue(queue.IsEmpty()); }
public void EnqueueItemsWithTwoParallelThreads_AllItemsAreAddedToQueue() { // Arrange var itemPoolSize = 10000000; var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize); var thread1Items = itemPool.Take(itemPoolSize / 2).ToList(); var thread2Items = itemPool.Skip(itemPoolSize / 2).Take(itemPoolSize / 2).ToList(); var queue = new SystemInformationMessageQueue(); // Act var thread1 = new Action( () => { foreach (var item in thread1Items) { queue.Enqueue(new SystemInformationQueueItem(item)); } }); var thread2 = new Action( () => { foreach (var item in thread2Items) { queue.Enqueue(new SystemInformationQueueItem(item)); } }); var enqueueWatch = new Stopwatch(); enqueueWatch.Start(); Parallel.Invoke(thread1, thread2); enqueueWatch.Stop(); Console.WriteLine("Enqueing {0} items with two parallel threads took {1} milliseconds.", itemPoolSize, enqueueWatch.ElapsedMilliseconds); // Assert Assert.AreEqual(itemPoolSize, queue.GetSize()); }
public void Enqueue_Collection_EachItemInTheSuppliedCollectionIsEnqueued() { // Arrange var queue = new SystemInformationMessageQueue(); var items = TestUtilities.GetSystemInformationObjects(10).Select(i => new SystemInformationQueueItem(i)).ToArray(); // Act queue.Enqueue(items); // Assert Assert.AreEqual(items.Length, queue.GetSize()); }
public void Enqueue_Collection_EachItemInTheSuppliedCollectionIsEnqueued() { // Arrange var queue = new SystemInformationMessageQueue(); var items = TestUtilities.GetSystemInformationObjects(10).Select(i => new SystemInformationQueueItem(i)).ToArray(); // Act queue.Enqueue(items); // Assert Assert.AreEqual(items.Length, queue.GetSize()); }
public void Enqueue_EmptyCollection_NoItemIsEnqueued() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new IQueueItem <SystemInformation>[] { }; // Act queue.Enqueue(items); // Assert Assert.AreEqual(0, queue.GetSize()); }
public void GetSize_QueueContainsOneItem_ResultIsOne() { // Arrange var queue = new SystemInformationMessageQueue(); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation())); // Act var result = queue.GetSize(); // Assert Assert.AreEqual(1, result); }
public void PurgeAllItems_OnNonEmptyQueue_QueueIsEmptyAfterwards() { // Arrange var queue = new SystemInformationMessageQueue(); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation())); // Act queue.PurgeAllItems(); // Assert Assert.IsTrue(queue.IsEmpty()); }
public void NonEmptyQueue_IsEmptyReturnsFalse() { // Arrange var queue = new SystemInformationMessageQueue(); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation())); // Act var result = queue.IsEmpty(); // Assert Assert.IsFalse(result); }
public void Dequeue_FirstItemThatIsAddedIsReturned() { // Arrange var queue = new SystemInformationMessageQueue(); var firstItem = new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }; queue.Enqueue(new SystemInformationQueueItem(firstItem)); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow })); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow })); // Act var dequeuedItem = queue.Dequeue(); // Assert Assert.AreEqual(firstItem, dequeuedItem.Item); }
public void Enqueue_Item_DequeueReturnsSameItem() { // Arrange var item = new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow }; var queue = new SystemInformationMessageQueue(); // Act queue.Enqueue(new SystemInformationQueueItem(item)); var dequeuedItem = queue.Dequeue(); // Assert Assert.AreEqual(item, dequeuedItem.Item); }
public void DequeueItemsWithTwoParallelThreads_AllItemsAreDequeued() { // Arrange var itemPoolSize = 10000000; var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize); var queue = new SystemInformationMessageQueue(); foreach (var item in itemPool) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var dequeuedItemCount = 0; var thread1 = new Action( () => { while (queue.Dequeue() != null) { Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); dequeuedItemCount++; Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); } }); var thread2 = new Action( () => { while (queue.Dequeue() != null) { Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); dequeuedItemCount++; Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); } }); var dequeueWatch = new Stopwatch(); dequeueWatch.Start(); Parallel.Invoke(thread1, thread2); dequeueWatch.Stop(); Console.WriteLine("Dequeuing {0} items with two parallel threads took {1} milliseconds.", dequeuedItemCount, dequeueWatch.ElapsedMilliseconds); // Assert Assert.AreEqual(itemPoolSize, dequeuedItemCount); }
public void DequeueItemsWithTwoParallelThreads_AllItemsAreDequeued() { // Arrange var itemPoolSize = 10000000; var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize); var queue = new SystemInformationMessageQueue(); foreach (var item in itemPool) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var dequeuedItemCount = 0; var thread1 = new Action( () => { while (queue.Dequeue() != null) { Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); dequeuedItemCount++; Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); } }); var thread2 = new Action( () => { while (queue.Dequeue() != null) { Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); dequeuedItemCount++; Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject); } }); var dequeueWatch = new Stopwatch(); dequeueWatch.Start(); Parallel.Invoke(thread1, thread2); dequeueWatch.Stop(); Console.WriteLine("Dequeuing {0} items with two parallel threads took {1} milliseconds.", dequeuedItemCount, dequeueWatch.ElapsedMilliseconds); // Assert Assert.AreEqual(itemPoolSize, dequeuedItemCount); }
public void Enqueue_QueueItemCounterIsIncreasedByOne() { // Arrange var item = new SystemInformationQueueItem(new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow }); int previousCount = item.EnqueuCount; var queue = new SystemInformationMessageQueue(); queue.Enqueue(item); // Act var dequeuedItem = queue.Dequeue(); // Assert Assert.AreEqual(previousCount + 1, dequeuedItem.EnqueuCount); }
public void GetSize_ResultIsWhatEverTheQueueSizeIs() { // Arrange var queue = new SystemInformationMessageQueue(); int expectedCount = TestUtilities.GetRandNumber(1, 10000000); var items = TestUtilities.GetSystemInformationObjects(expectedCount); foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var result = queue.GetSize(); // Assert Assert.AreEqual(expectedCount, result); }
public void Enqueue_EveryTimeAnItemIsEnqueued_TheItemCounterIsIncreasedByOne() { // Arrange int timesItemIsQueued = 10; var item = new SystemInformationQueueItem(new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow }); var queue = new SystemInformationMessageQueue(); // Act for (int i = 1; i <= timesItemIsQueued; i++) { queue.Enqueue(item); queue.Dequeue(); } // Assert Assert.AreEqual(timesItemIsQueued, item.EnqueuCount); }
public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayWithThreeItems() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new[] { new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow } }; foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var result = queue.PurgeAllItems(); // Assert Assert.AreEqual(items.Length, result.Length); }
public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayHasTheSameOrderAsTheQueue() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new[] { new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow }, new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow } }; foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var result = queue.PurgeAllItems(); // Assert for (int i = 0; i < result.Length; i++) { Assert.AreEqual(items[i], result[i].Item); } }
public void PurgeAllItems_OnNonEmptyQueue_QueueIsEmptyAfterwards() { // Arrange var queue = new SystemInformationMessageQueue(); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation())); // Act queue.PurgeAllItems(); // Assert Assert.IsTrue(queue.IsEmpty()); }
public void NonEmptyQueue_IsEmptyReturnsFalse() { // Arrange var queue = new SystemInformationMessageQueue(); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation())); // Act var result = queue.IsEmpty(); // Assert Assert.IsFalse(result); }
public void GetSize_ResultIsWhatEverTheQueueSizeIs() { // Arrange var queue = new SystemInformationMessageQueue(); int expectedCount = TestUtilities.GetRandNumber(1, 10000000); var items = TestUtilities.GetSystemInformationObjects(expectedCount); foreach (var item in items) { queue.Enqueue(new SystemInformationQueueItem(item)); } // Act var result = queue.GetSize(); // Assert Assert.AreEqual(expectedCount, result); }
public void GetSize_QueueContainsOneItem_ResultIsOne() { // Arrange var queue = new SystemInformationMessageQueue(); queue.Enqueue(new SystemInformationQueueItem(new SystemInformation())); // Act var result = queue.GetSize(); // Assert Assert.AreEqual(1, result); }
public void Enqueue_QueueItemCounterIsIncreasedByOne() { // Arrange var item = new SystemInformationQueueItem(new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow }); int previousCount = item.EnqueuCount; var queue = new SystemInformationMessageQueue(); queue.Enqueue(item); // Act var dequeuedItem = queue.Dequeue(); // Assert Assert.AreEqual(previousCount + 1, dequeuedItem.EnqueuCount); }
public void Enqueue_Item_DequeueReturnsSameItem() { // Arrange var item = new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow }; var queue = new SystemInformationMessageQueue(); // Act queue.Enqueue(new SystemInformationQueueItem(item)); var dequeuedItem = queue.Dequeue(); // Assert Assert.AreEqual(item, dequeuedItem.Item); }
public void Enqueue_ItemsParameterIsNull_ArgumentNullExceptionIsThrown() { // Arrange var queue = new SystemInformationMessageQueue(); IQueueItem<SystemInformation>[] items = null; // Act queue.Enqueue(items); }
public void Enqueue_EveryTimeAnItemIsEnqueued_TheItemCounterIsIncreasedByOne() { // Arrange int timesItemIsQueued = 10; var item = new SystemInformationQueueItem(new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow }); var queue = new SystemInformationMessageQueue(); // Act for (int i = 1; i <= timesItemIsQueued; i++) { queue.Enqueue(item); queue.Dequeue(); } // Assert Assert.AreEqual(timesItemIsQueued, item.EnqueuCount); }
public void PurgeQueueWhileEnqueuing_AllItemsThatAreEnqueuedAreAlsoDequeued() { // Arrange var itemPoolSize = 10000000; var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize); var queue = new SystemInformationMessageQueue(); // Act var purgeCount = 0; var dequeuedItemCount = 0; var enqueuedItemCount = 0; var thread1 = new Task( () => { foreach (var item in itemPool) { queue.Enqueue(new SystemInformationQueueItem(item)); enqueuedItemCount++; } }); var thread2 = new Task( () => { while (!queue.IsEmpty()) { purgeCount++; dequeuedItemCount += queue.PurgeAllItems().Count(); int millisecondsToWaitBeforeNextItemIsQueued = TestUtilities.GetRandNumber(50, 100); Thread.Sleep(millisecondsToWaitBeforeNextItemIsQueued); } }); var stopWatch = new Stopwatch(); stopWatch.Start(); thread1.Start(); thread2.Start(); Task.WaitAll(thread1, thread2); stopWatch.Stop(); // Assert Console.WriteLine( "Enqueuing {0} items while another thread purged the queue took {1} milliseconds. The queue has been purged {2} time(s) during this time.", enqueuedItemCount, stopWatch.ElapsedMilliseconds, purgeCount); Assert.AreEqual(enqueuedItemCount, dequeuedItemCount); Assert.IsTrue(queue.IsEmpty()); }
public void Enqueue_EmptyCollection_NoItemIsEnqueued() { // Arrange var queue = new SystemInformationMessageQueue(); var items = new IQueueItem<SystemInformation>[] { }; // Act queue.Enqueue(items); // Assert Assert.AreEqual(0, queue.GetSize()); }
public void EnqueueItemsWithTwoParallelThreads_AllItemsAreAddedToQueue() { // Arrange var itemPoolSize = 10000000; var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize); var thread1Items = itemPool.Take(itemPoolSize / 2).ToList(); var thread2Items = itemPool.Skip(itemPoolSize / 2).Take(itemPoolSize / 2).ToList(); var queue = new SystemInformationMessageQueue(); // Act var thread1 = new Action( () => { foreach (var item in thread1Items) { queue.Enqueue(new SystemInformationQueueItem(item)); } }); var thread2 = new Action( () => { foreach (var item in thread2Items) { queue.Enqueue(new SystemInformationQueueItem(item)); } }); var enqueueWatch = new Stopwatch(); enqueueWatch.Start(); Parallel.Invoke(thread1, thread2); enqueueWatch.Stop(); Console.WriteLine("Enqueing {0} items with two parallel threads took {1} milliseconds.", itemPoolSize, enqueueWatch.ElapsedMilliseconds); // Assert Assert.AreEqual(itemPoolSize, queue.GetSize()); }