From 2b0e92a91df1a453ee2868693f2cb6b5e61513dd Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sat, 26 Sep 2020 13:32:27 +0200 Subject: [PATCH] Added test for stopping producers --- FastRngTests/Double/MultiThreadedRngTests.cs | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/FastRngTests/Double/MultiThreadedRngTests.cs b/FastRngTests/Double/MultiThreadedRngTests.cs index f1a6793..a8fd69d 100644 --- a/FastRngTests/Double/MultiThreadedRngTests.cs +++ b/FastRngTests/Double/MultiThreadedRngTests.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Threading; using System.Threading.Tasks; using FastRng.Double; using FastRng.Double.Distributions; @@ -261,5 +262,36 @@ namespace FastRngTests.Double Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000)); } + + [Test] + [Category(TestCategories.COVER)] + [Category(TestCategories.NORMAL)] + public async Task TestStoppingProducers01() + { + var rng = new MultiThreadedRng(); + rng.StopProducer(); + + var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token; + var wasCanceled = false; + + while(true) + { + var tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(3)); + await rng.GetUniform(tokenSource.Token); + if (tokenSource.IsCancellationRequested) + { + wasCanceled = true; + break; + } + + if (masterToken.IsCancellationRequested) + { + break; + } + } + + Assert.That(masterToken.IsCancellationRequested, Is.False, "Master token was used to stop test"); + Assert.That(wasCanceled, Is.True, "The consumer was not canceled"); + } } } \ No newline at end of file