public void Average() { const UInt32 numerator = 3; const UInt32 denominator = 10; const Double p = (Double)numerator / denominator; const UInt64 sampleCount = 100_000; var rng1 = Mt1993764.Create(5489); var rng2 = Mt1993764.Create(5489); var ratioDist = Bernoulli.FromRatio(numerator, denominator); var pDist = Bernoulli.FromP(p); UInt64 sum = 0; for (UInt64 i = 0; i < sampleCount; i++) { Assert.True(ratioDist.TrySample(rng1, out Boolean result1)); Assert.True(pDist.TrySample(rng2, out Boolean result2)); Assert.Equal(result1, result2); if (result1) { sum++; } } Assert.True(Statistics.WithinConfidenceBernoulli(sum, p, sampleCount)); }
public RngUInt32() { _chaCha8 = ChaCha.GetChaCha8Factory().Create(new ChaCha.Seed()); _chaCha12 = ChaCha.GetChaCha12Factory().Create(new ChaCha.Seed()); _chaCha20 = ChaCha.GetChaCha20Factory().Create(new ChaCha.Seed()); _pcg32 = Rngs.Pcg32.Create(0, 0); _mt1993764 = Rngs.Mt1993764.Create(0); _xorShift = Rngs.XorShift.Create(1, 1, 1, 1); _systemCryptoRng = Rngs.SystemCryptoRng.Create(); #pragma warning disable CS0618 _cryptoServiceProvider = Rngs.CryptoServiceProvider.Create(); #pragma warning restore CS0618 _random = new Random(42); }
public void TrivialRatios() { Assert.Throws <ArgumentOutOfRangeException>(() => Bernoulli.FromRatio(11, 10)); var alwaysTrue = Bernoulli.FromRatio(10, 10); var alwaysFalse = Bernoulli.FromRatio(0, 10); var rng = Mt1993764.Create(5489); for (Int32 i = 0; i < 10; i++) { Assert.True(alwaysTrue.TrySample(rng, out Boolean definitelyTrue)); Assert.True(alwaysFalse.TrySample(rng, out Boolean definitelyFalse)); Assert.True(definitelyTrue); Assert.False(definitelyFalse); } }