コード例 #1
0
 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();
 }
コード例 #2
0
 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");
 }
コード例 #3
0
 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();
     }
 }
コード例 #4
0
 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();
         }
     }
 }
コード例 #5
0
 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]);
     }
 }
コード例 #6
0
 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]);
     }
 }
コード例 #7
0
 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();
     }
 }
コード例 #8
0
 public void DequeueAsync_before_Enqueue()
 {
     var queue = new AsyncBoundedQueue<string>(3);
     var task = queue.DequeueAsync();
     queue.EnqueueAsync("A").AssertSuccess();
     task.AssertResult("A");
 }
コード例 #9
0
 public void DequeueAsync_already_canceled()
 {
     var queue = new AsyncBoundedQueue<string>(3);
     queue.EnqueueAsync("A").AssertSuccess();
     var task = queue.DequeueAsync(new CancellationToken(true));
     task.AssertCanceled();
 }
コード例 #10
0
 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);
 }