diff --git a/FastRngTests/Double/MultiThreadedRngTests.cs b/FastRngTests/Double/MultiThreadedRngTests.cs index ea185a0..c7c7c7f 100644 --- a/FastRngTests/Double/MultiThreadedRngTests.cs +++ b/FastRngTests/Double/MultiThreadedRngTests.cs @@ -153,6 +153,76 @@ namespace FastRngTests.Double Assert.That(await distUniform.NextNumber(20.0, 1), Is.InRange(1, 20)); Assert.That(await distNormal.NextNumber(20.0, 1), Is.InRange(1, 20)); } + + [Test] + [Category(TestCategories.LONG_RUNNING)] + public async Task TestRange05() + { + var distUniform = new Uniform(this.rng); + var distLorentz = new CauchyLorentzX1(this.rng); + + var rngContains0 = false; + var rngContains1 = false; + + var uniformContains0 = false; + var uniformContains1 = false; + + var lorentzContains0 = false; + var lorentzContains1 = false; + + for (int i = 0; i < 100_000_000; i++) + { + var rngValue = await rng.GetUniform(); + var uniform = await distUniform.NextNumber(); + var lorentz = await distLorentz.NextNumber(); + + switch (rngValue) + { + case 0.0: + rngContains0 = true; + break; + case 1.0: + rngContains1 = true; + break; + } + + switch (uniform) + { + case 0.0: + uniformContains0 = true; + break; + case 1.0: + uniformContains1 = true; + break; + } + + switch (lorentz) + { + case 0.0: + lorentzContains0 = true; + break; + case 1.0: + lorentzContains1 = true; + break; + } + } + + TestContext.WriteLine($"Uniform generator contained 0? {rngContains0} (expected=false)"); + TestContext.WriteLine($"Uniform generator contained 1? {rngContains1} (expected=true)"); + TestContext.WriteLine($"Uniform distribution contained 0? {uniformContains0} (expected=false)"); + TestContext.WriteLine($"Uniform distribution contained 1? {uniformContains1} (expected=true)"); + TestContext.WriteLine($"Lorentz distribution contained 0? {lorentzContains0} (expected=false)"); + TestContext.WriteLine($"Lorentz distribution contained 1? {lorentzContains1} (expected=true)"); + + Assert.That(rngContains0, Is.False, "Uniform generator contained 0"); + Assert.That(rngContains1, Is.True, "Uniform generator does not contained 1"); + + Assert.That(uniformContains0, Is.False, "Uniform distribution contained 0"); + Assert.That(uniformContains1, Is.True, "Uniform distribution does not contained 1"); + + Assert.That(lorentzContains0, Is.False, "Lorentz distribution contained 0"); + Assert.That(lorentzContains1, Is.True, "Lorentz distribution does not contained 1"); + } [Test] [Category(TestCategories.COVER)] diff --git a/FastRngTests/Float/MultiThreadedRngTests.cs b/FastRngTests/Float/MultiThreadedRngTests.cs index 7fc0ec3..f4f706c 100644 --- a/FastRngTests/Float/MultiThreadedRngTests.cs +++ b/FastRngTests/Float/MultiThreadedRngTests.cs @@ -153,6 +153,76 @@ namespace FastRngTests.Float Assert.That(await distUniform.NextNumber(20.0f, 1), Is.InRange(1, 20)); Assert.That(await distNormal.NextNumber(20.0f, 1), Is.InRange(1, 20)); } + + [Test] + [Category(TestCategories.LONG_RUNNING)] + public async Task TestRange05() + { + var distUniform = new Uniform(this.rng); + var distLorentz = new CauchyLorentzX1(this.rng); + + var rngContains0 = false; + var rngContains1 = false; + + var uniformContains0 = false; + var uniformContains1 = false; + + var lorentzContains0 = false; + var lorentzContains1 = false; + + for (int i = 0; i < 100_000_000; i++) + { + var rngValue = await rng.GetUniform(); + var uniform = await distUniform.NextNumber(); + var lorentz = await distLorentz.NextNumber(); + + switch (rngValue) + { + case 0.0f: + rngContains0 = true; + break; + case 1.0f: + rngContains1 = true; + break; + } + + switch (uniform) + { + case 0.0f: + uniformContains0 = true; + break; + case 1.0f: + uniformContains1 = true; + break; + } + + switch (lorentz) + { + case 0.0f: + lorentzContains0 = true; + break; + case 1.0f: + lorentzContains1 = true; + break; + } + } + + TestContext.WriteLine($"Uniform generator contained 0? {rngContains0} (expected=false)"); + TestContext.WriteLine($"Uniform generator contained 1? {rngContains1} (expected=true)"); + TestContext.WriteLine($"Uniform distribution contained 0? {uniformContains0} (expected=false)"); + TestContext.WriteLine($"Uniform distribution contained 1? {uniformContains1} (expected=true)"); + TestContext.WriteLine($"Lorentz distribution contained 0? {lorentzContains0} (expected=false)"); + TestContext.WriteLine($"Lorentz distribution contained 1? {lorentzContains1} (expected=true)"); + + Assert.That(rngContains0, Is.False, "Uniform generator contained 0"); + Assert.That(rngContains1, Is.True, "Uniform generator does not contained 1"); + + Assert.That(uniformContains0, Is.False, "Uniform distribution contained 0"); + Assert.That(uniformContains1, Is.True, "Uniform distribution does not contained 1"); + + Assert.That(lorentzContains0, Is.False, "Lorentz distribution contained 0"); + Assert.That(lorentzContains1, Is.True, "Lorentz distribution does not contained 1"); + } [Test] [Category(TestCategories.COVER)]