public void MultiRandInt64() { var mr = Rng.WyHash64().ToPolyrand(); var data = mr.Stream <long>().Take(Pow2.T16); int pos = 0, neg = 0, zed = 0; foreach (var x in data) { if (x > 0) { pos++; } else if (x < 0) { neg++; } else { zed++; } } var r = math.abs(pos - neg) / ((double)pos + (double)neg); var tolerance = .01; Claim.lt(r, tolerance); }
public void reproduce() { var s1 = Rng.FixedSeed(54ul); var s2 = Rng.FixedSeed(54ul + 8ul); var rng1 = Rng.WyHash64(s1).ToPolyrand(); var rng2 = Rng.WyHash64(s2).ToPolyrand(); var rng3 = Rng.WyHash64(s1).ToPolyrand(); var sample1 = rng1.Stream <ulong>().Take(Pow2.T08).ToArray(); var sample2 = rng2.Stream <ulong>().Take(Pow2.T08).ToArray(); var sample3 = rng3.Stream <ulong>().Take(Pow2.T08).ToArray(); for (var i = 0; i < Pow2.T08; i++) { Claim.neq(sample1[i], sample2[i]); } for (var i = 0; i < Pow2.T08; i++) { Claim.eq(sample1[i], sample3[i]); } }
public void TestWyHash64() { var rng = Rng.WyHash64(); var data = rng.Array <ulong>(Pow2.T16); var cutpoint = (double)UInt64.MaxValue / 2.0; var above = 0; var below = 0; foreach (var x in data) { if (x >= cutpoint) { above++; } else if (x < cutpoint) { below++; } } var r = (math.abs(above - below) / ((double)(above + below))).Round(4); var tolerance = .01; Claim.lt(r, tolerance); }
public void bench_wyhash_uniform_u64() { Benchmark(Rng.WyHash64().PointSource <ulong>()); }