示例#1
0
        public void RemoveParticipantsAsync_Underflow_ThrowsException()
        {
            var barrier = new AsyncBarrier(2);

            barrier.SignalAndWaitAsync();
            AssertEx.ThrowsException <InvalidOperationException>(() => barrier.RemoveParticipantsAsync(2));
        }
示例#2
0
        public void RemoveZeroParticipants_DoesNothing()
        {
            var barrier = new AsyncBarrier(1);

            Assert.AreEqual(1, barrier.ParticipantCount);
            barrier.RemoveParticipantsAsync(0);
            Assert.AreEqual(1, barrier.ParticipantCount);
        }
示例#3
0
 public void RemoveParticipantsAsync_LastParticipant_CompletesPhase()
 {
     AsyncContext.Run(async() =>
     {
         var barrier = new AsyncBarrier(1);
         Assert.AreEqual(0, barrier.CurrentPhaseNumber);
         Assert.AreEqual(1, barrier.ParticipantCount);
         Assert.AreEqual(1, barrier.ParticipantsRemaining);
         await barrier.RemoveParticipantsAsync(1);
         Assert.AreEqual(1, barrier.CurrentPhaseNumber);
         Assert.AreEqual(0, barrier.ParticipantCount);
         Assert.AreEqual(0, barrier.ParticipantsRemaining);
     });
 }
示例#4
0
 public void AddParticipants_FromZero_IncreasesParticipantsForCurrentPhase()
 {
     AsyncContext.Run(async() =>
     {
         var barrier = new AsyncBarrier(1);
         Assert.AreEqual(0, barrier.CurrentPhaseNumber);
         Assert.AreEqual(1, barrier.ParticipantCount);
         Assert.AreEqual(1, barrier.ParticipantsRemaining);
         await barrier.RemoveParticipantsAsync();
         Assert.AreEqual(1, barrier.CurrentPhaseNumber);
         Assert.AreEqual(0, barrier.ParticipantCount);
         Assert.AreEqual(0, barrier.ParticipantsRemaining);
         barrier.AddParticipants();
         Assert.AreEqual(1, barrier.CurrentPhaseNumber);
         Assert.AreEqual(1, barrier.ParticipantCount);
         Assert.AreEqual(1, barrier.ParticipantsRemaining);
     });
 }