public void XorShiftDoesNotRepeadedlyReturnTheSameNumber() { var rng = new XorShiftRng(); const int iterations = 20; double lastNumber = Double.NaN; int count = 0; // generate multiple random numbers for (int i = 0; i < iterations; ++i) { var number = rng.GetDouble(min: -1.0, max: 1.0); number.Should().BeGreaterOrEqualTo(-1.0, "because that is the lower bound"); number.Should().BeLessOrEqualTo(1.0, "because that is the upper bound"); // increase count if numbers are the same, otherwise reset counter if (number.Equals(lastNumber)) { ++count; } else { count = 0; } // store number lastNumber = number; } count.Should().BeLessOrEqualTo(5, "because more than five times the same number is highly unlikely"); }
public void GenerateInt64_Seed() { var rng = new XorShiftRng(1); for (var i = 0; i < 100; i++) { Console.WriteLine(rng.GenerateInt64()); } }
public void GenerateDoubleExceptZero() { var rng = new XorShiftRng(); for (var i = 0; i < 100; i++) { var x = rng.GenerateDoubleExceptZero(); Assert.IsTrue(0 < x && x < 1); Console.WriteLine(x); } }