public void Capacity_zero_EnqueueAsync_then_DequeueAsync() { var queue = new AsyncBoundedQueue<string>(0); var enqueueTask = queue.EnqueueAsync("A").AssertNotCompleted(); queue.DequeueAsync().AssertResult("A"); enqueueTask.AssertSuccess(); }
public void Capacity_zero_DequeueAsync_then_TryEnqueue() { var queue = new AsyncBoundedQueue<string>(0); var dequeueTask = queue.DequeueAsync().AssertNotCompleted(); Assert.IsTrue(queue.TryEnqueue("A")); dequeueTask.AssertResult("A"); }
public void CancelAllDequeue() { var queue = new AsyncBoundedQueue<string>(3); var tasks = Enumerable.Range(0, 3).Select(_ => queue.DequeueAsync()).ToList(); queue.CancelAllDequeue().Dispose(); foreach (var task in tasks) { task.AssertCanceled(); } }
public void First_in_first_out_exceeding_capacity() { var queue = new AsyncBoundedQueue<string>(3); var values = new List<string> { "A", "B", "C", "D", "E", "F" }; var enqueueTasks = values.Select(queue.EnqueueAsync).ToList(); for (int i = 0; i < values.Count; i++) { if (i < queue.Capacity) { enqueueTasks[i].AssertSuccess(); } else { enqueueTasks[i].AssertNotCompleted(); } } for (int i = 0; i < values.Count; i++) { queue.DequeueAsync().AssertResult(values[i]); if (i + queue.Capacity < values.Count) { enqueueTasks[i + queue.Capacity].AssertSuccess(); } } }
public void First_in_first_out() { var queue = new AsyncBoundedQueue<string>(3); var values = new List<string> { "A", "B", "C" }; for (int i = 0; i < values.Count; i++) { queue.EnqueueAsync(values[i]).AssertSuccess(); } for (int i = 0; i < values.Count; i++) { queue.DequeueAsync().AssertResult(values[i]); } }
public void DequeueAsync_handled_in_order_of_caller() { var queue = new AsyncBoundedQueue<string>(3); var values = new List<string> { "A", "B", "C" }; var tasks = values.Select(_ => queue.DequeueAsync()).ToList(); for (int i = 0; i < values.Count; i++) { tasks[i].AssertNotCompleted(); queue.EnqueueAsync(values[i]).AssertSuccess(); tasks[i].AssertResult(values[i]); } }
public void DequeueAsync_empty_canceled() { var queue = new AsyncBoundedQueue<string>(3); using (var cts = new CancellationTokenSource()) { var task = queue.DequeueAsync(cts.Token); cts.Cancel(); queue.EnqueueAsync("A").AssertSuccess(); task.AssertCanceled(); } }
public void DequeueAsync_before_Enqueue() { var queue = new AsyncBoundedQueue<string>(3); var task = queue.DequeueAsync(); queue.EnqueueAsync("A").AssertSuccess(); task.AssertResult("A"); }
public void DequeueAsync_already_canceled() { var queue = new AsyncBoundedQueue<string>(3); queue.EnqueueAsync("A").AssertSuccess(); var task = queue.DequeueAsync(new CancellationToken(true)); task.AssertCanceled(); }
public void Count_nonempty() { var queue = new AsyncBoundedQueue<string>(4); queue.EnqueueAsync("A").AssertSuccess(); queue.EnqueueAsync("B").AssertSuccess(); queue.EnqueueAsync("C").AssertSuccess(); queue.EnqueueAsync("D").AssertSuccess(); queue.DequeueAsync().AssertSuccess(); Assert.AreEqual(3, queue.Count); }