private static IWorkItemWaiterEntry CreateNotSignalableWorkItemWaiterEntry() { IWorkItemWaiterEntry workItemWaiterEntry = Substitute.For <IWorkItemWaiterEntry>(); workItemWaiterEntry.TrySignal(null).ReturnsForAnyArgs(false); return(workItemWaiterEntry); }
public void EnqueueTrySignalMethodShouldBeCalledWhenWaitingStackIsNotEmpty() { IWorkItemWaiterEntry workItemWaiterEntry = Substitute.For <IWorkItemWaiterEntry>(); IWorkItemWaiterEntryStack workItemWaiterEntryStack = Substitute.For <IWorkItemWaiterEntryStack>(); int count = 1; workItemWaiterEntryStack.Count.Returns(x => count); workItemWaiterEntryStack.Pop().Returns( x => { if (count == 1) { count = 0; return(workItemWaiterEntry); } return(null); }); WorkItemQueue workItemQueue = new WorkItemQueue(1 * 1000, workItemWaiterEntryStack); IWorkItem workItem = Substitute.For <IWorkItem>(); workItemQueue.Enqueue(workItem); workItemWaiterEntry.Received(1).TrySignal(workItem); }
/// <summary> /// Ýþ parçasý bekleyici kaydý yýðýnýna bir tane kayýt ekler. /// </summary> /// <param name="workItemWaiterEntry">Ýþ parçasý bekleyici kaydý.</param> public void Push(IWorkItemWaiterEntry workItemWaiterEntry) { if (workItemWaiterEntry == null) { throw new ArgumentNullException("workItemWaiterEntry"); } m_WorkItemWaiterEntries.AddFirst(workItemWaiterEntry); }
public void PeekShouldReturnTheOnlyItemAndShouldNotRemovwItemWhenStackHasOneItems() { WorkItemWaiterEntryStack stack = new WorkItemWaiterEntryStack(); IWorkItemWaiterEntry entry = Substitute.For <IWorkItemWaiterEntry>(); stack.Push(entry); Assert.AreEqual(entry, stack.Peek()); Assert.AreEqual(1, stack.Count); Assert.AreEqual(entry, stack.Peek()); Assert.AreEqual(1, stack.Count); }
/// <summary> /// Ýþ parçasý bekleyici kaydý yýðýnýnýn en üstteki kaydýný yýðýndan çýkarmadan döndürür. /// </summary> /// <returns>Yýðýnýn en üstündeki iþ parçasý bekleyici kaydý.</returns> public IWorkItemWaiterEntry Peek() { LinkedListNode <IWorkItemWaiterEntry> firstNode = m_WorkItemWaiterEntries.First; if (firstNode == null) { return(null); } IWorkItemWaiterEntry first = firstNode.Value; return(first); }
public void PopShouldReturnTheOnlyItemAndSetCountToZeroWhenStackHasOneItems() { WorkItemWaiterEntryStack stack = new WorkItemWaiterEntryStack(); IWorkItemWaiterEntry entry = Substitute.For <IWorkItemWaiterEntry>(); stack.Push(entry); Assert.AreEqual(entry, stack.Pop()); Assert.AreEqual(0, stack.Count); Assert.AreEqual(null, stack.Pop()); Assert.AreEqual(0, stack.Count); }
public void RemoveShouldReturnFalseIfTheSpecifiedItemIsNotFoundInTheStack() { WorkItemWaiterEntryStack stack = new WorkItemWaiterEntryStack(); IWorkItemWaiterEntry firstEntry = Substitute.For <IWorkItemWaiterEntry>(); IWorkItemWaiterEntry lastEntry = Substitute.For <IWorkItemWaiterEntry>(); Assert.AreEqual(false, stack.Remove(firstEntry)); stack.Push(firstEntry); Assert.AreEqual(1, stack.Count); Assert.AreEqual(false, stack.Remove(lastEntry)); }
public void EnqueueTrySignalMethodShouldNotBeCalledWhenWaitingStackIsEmpty() { IWorkItemWaiterEntry workItemWaiterEntry = Substitute.For <IWorkItemWaiterEntry>(); IWorkItemWaiterEntryStack workItemWaiterEntryStack = Substitute.For <IWorkItemWaiterEntryStack>(); workItemWaiterEntryStack.Count.Returns(0); WorkItemQueue workItemQueue = new WorkItemQueue(1 * 1000, workItemWaiterEntryStack); IWorkItem workItem = Substitute.For <IWorkItem>(); workItemQueue.Enqueue(workItem); workItemWaiterEntry.DidNotReceiveWithAnyArgs().TrySignal(workItem); }
public void PushShouldAddTheItemToFirstPlace() { WorkItemWaiterEntryStack stack = new WorkItemWaiterEntryStack(); IWorkItemWaiterEntry firstEntry = Substitute.For <IWorkItemWaiterEntry>(); IWorkItemWaiterEntry lastEntry = Substitute.For <IWorkItemWaiterEntry>(); stack.Push(firstEntry); Assert.AreEqual(1, stack.Count); Assert.AreEqual(firstEntry, stack.Peek()); stack.Push(lastEntry); Assert.AreEqual(lastEntry, stack.Peek()); Assert.AreEqual(2, stack.Count); }
public void PeekShouldReturnLastAddedItemAndShouldNotRemoveItemWhenStackHasMoreThanOneItems() { WorkItemWaiterEntryStack stack = new WorkItemWaiterEntryStack(); IWorkItemWaiterEntry firstEntry = Substitute.For <IWorkItemWaiterEntry>(); IWorkItemWaiterEntry lastEntry = Substitute.For <IWorkItemWaiterEntry>(); stack.Push(firstEntry); stack.Push(lastEntry); Assert.AreEqual(2, stack.Count); Assert.AreEqual(lastEntry, stack.Peek()); Assert.AreEqual(2, stack.Count); Assert.AreEqual(lastEntry, stack.Peek()); Assert.AreEqual(2, stack.Count); }
public void EnqueueShouldNotAddWorkItemToQueueWhenWaiterIsSignaled() { IWorkItem workItem = Substitute.For <IWorkItem>(); IWorkItemWaiterEntry workItemWaiterEntry = Substitute.For <IWorkItemWaiterEntry>(); workItemWaiterEntry.TrySignal(workItem).Returns(true); IWorkItemWaiterEntryStack workItemWaiterEntryStack = Substitute.For <IWorkItemWaiterEntryStack>(); workItemWaiterEntryStack.Count.Returns(1); workItemWaiterEntryStack.Pop().Returns(workItemWaiterEntry); WorkItemQueue workItemQueue = new WorkItemQueue(1 * 1000, workItemWaiterEntryStack); workItemQueue.Enqueue(workItem); Assert.AreEqual(0, workItemQueue.Count); }
/// <summary> /// Ýþ parçasýný kuyruða atar. /// </summary> /// <param name="workItem">Ýþ parçasý.</param> public void Enqueue(IWorkItem workItem) { if (workItem == null) { throw new ArgumentNullException("workItem"); } lock (this) { if (m_IsShutDown) { throw new LaboThreadingException("Ýþ parçasý kuyruðu iþ parçasý eklemeye kapatýlmýþtýr. Yeni iþ parçasý ekleyemezsiniz."); } bool enqueue = true; // Eðer bekleyen Thread varsa iþ parçasýný ona yollayacaðýz. while (m_WorkItemWaiterEntryStack.Count > 0) { // Dequeue a waiter. IWorkItemWaiterEntry waiterEntry = m_WorkItemWaiterEntryStack.Pop(); // Eðer zaman aþýmý yoksa iþ parçasý bekleyen Thread'e iþlenmesi için yolluyoruz ve kuyruða eklememize gerek kalmýyor. if (waiterEntry.TrySignal(workItem)) { workItem.State = WorkItemState.Scheduled; enqueue = false; break; } } // Hiç bekleyen Thread yoksa iþ parçasýný kuyruða ekliyoruz. if (enqueue) { workItem.State = WorkItemState.Queued; // Enqueue the work item m_WorkItemsQueue.Enqueue(workItem); } } }
public void PopShouldReturnLastAddedItemAndDecrementCountWhenStackHasMoreThanOneItems() { WorkItemWaiterEntryStack stack = new WorkItemWaiterEntryStack(); IWorkItemWaiterEntry firstEntry = Substitute.For <IWorkItemWaiterEntry>(); IWorkItemWaiterEntry lastEntry = Substitute.For <IWorkItemWaiterEntry>(); stack.Push(firstEntry); stack.Push(lastEntry); Assert.AreEqual(2, stack.Count); Assert.AreEqual(lastEntry, stack.Pop()); Assert.AreEqual(1, stack.Count); Assert.AreEqual(firstEntry, stack.Pop()); Assert.AreEqual(0, stack.Count); Assert.AreEqual(null, stack.Pop()); Assert.AreEqual(0, stack.Count); }
public void RemoveShouldRemoveItemFromStack() { WorkItemWaiterEntryStack stack = new WorkItemWaiterEntryStack(); IWorkItemWaiterEntry firstEntry = Substitute.For <IWorkItemWaiterEntry>(); IWorkItemWaiterEntry lastEntry = Substitute.For <IWorkItemWaiterEntry>(); stack.Push(firstEntry); stack.Push(lastEntry); Assert.AreEqual(2, stack.Count); Assert.AreEqual(lastEntry, stack.Peek()); Assert.AreEqual(true, stack.Remove(lastEntry)); Assert.AreEqual(firstEntry, stack.Peek()); Assert.AreEqual(1, stack.Count); Assert.AreEqual(true, stack.Remove(firstEntry)); Assert.AreEqual(0, stack.Count); }
/// <summary> /// Ýþ parçasý bekleyici kaydý yýðýnýna bir tane kayýt çýkarýr. /// </summary> /// <param name="workItemWaiterEntry">Ýþ parçasý bekleyici kaydý.</param> /// <returns><c>true</c> eðer iþ parçasý bekleyici kaydý çýkarýldýysa, yoksa; <c>false</c></returns> public bool Remove(IWorkItemWaiterEntry workItemWaiterEntry) { return(m_WorkItemWaiterEntries.Remove(workItemWaiterEntry)); }
/// <summary> /// Ýþ parçasý bekleyici kaydý yýðýnýna bir tane kayýt çýkarýr. /// </summary> /// <param name="workItemWaiterEntry">Ýþ parçasý bekleyici kaydý.</param> /// <returns><c>true</c> eðer iþ parçasý bekleyici kaydý çýkarýldýysa, yoksa; <c>false</c></returns> public bool Remove(IWorkItemWaiterEntry workItemWaiterEntry) { return m_WorkItemWaiterEntries.Remove(workItemWaiterEntry); }