public void RemoveParticipantsAsync_Underflow_ThrowsException() { var barrier = new AsyncBarrier(2); barrier.SignalAndWaitAsync(); AssertEx.ThrowsException <InvalidOperationException>(() => barrier.RemoveParticipantsAndWaitAsync(2)); }
public void RemoveParticipantsAsync_LastParticipant_CompletesPhase() { Test.Async(async() => { var barrier = new AsyncBarrier(1); Assert.AreEqual(0, barrier.CurrentPhaseNumber); Assert.AreEqual(1, barrier.ParticipantCount); Assert.AreEqual(1, barrier.ParticipantsRemaining); await barrier.RemoveParticipantsAndWaitAsync(1); Assert.AreEqual(1, barrier.CurrentPhaseNumber); Assert.AreEqual(0, barrier.ParticipantCount); Assert.AreEqual(0, barrier.ParticipantsRemaining); }); }
public void AddParticipants_FromZero_IncreasesParticipantsForCurrentPhase() { Test.Async(async() => { var barrier = new AsyncBarrier(1); Assert.AreEqual(0, barrier.CurrentPhaseNumber); Assert.AreEqual(1, barrier.ParticipantCount); Assert.AreEqual(1, barrier.ParticipantsRemaining); await barrier.RemoveParticipantsAndWaitAsync(); 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); }); }