public void TestForSaltReuse() { var seen = new HashSet <int>(); var rng = new StatelessRng(kSeed); StatelessRng.SaltUsed = (salt) => { Assert.IsTrue(seen.Add(salt), "Salt {0} is unused", salt); }; try { rng.OnUnitCircle(0); seen.Clear(); rng.InUnitCircle(0); seen.Clear(); rng.OnUnitSphere(0); seen.Clear(); rng.InUnitSphere(0); seen.Clear(); rng.Rotation(0); seen.Clear(); } finally { StatelessRng.SaltUsed = null; } }
public void TestUniformity_InUnitSphere() { var rng = new StatelessRng(kSeed); Vector3[] vals = Gen(i => rng.InUnitSphere(i)).ToArray(); Func <Vector3, Vector3> ThetaRrrZr = v3 => { float r = v3.magnitude; if (r == 0) { return(Vector3.zero); } float angle01 = ToAngle01(Mathf.Atan2(v3.y, v3.x)); return(new Vector3(angle01, r * r * r, ((v3.z / r) + 1f) / 2f)); }; S.CheckUniformity(new[] { "theta", "rrr", "z/r" }, vals.Select(ThetaRrrZr)); }