namespace Amphora.UnitTests { public class RanduTests : UnitTestSharp.TestFixture { public class SeedCtorTests : UnitTestSharp.TestFixture { public void StartsTheSequenceThatMultipliesBy65539() { var generator = new Randu(1); CheckEqual(65539UL, generator.NextUInt64() >> 33); CheckEqual(393225UL, generator.NextUInt64() >> 33); CheckEqual(1769499UL, generator.NextUInt64() >> 33); } public void MakesAnEvenSeedOdd() { var even = new Randu(2); var odd = new Randu(3); CheckEqual(odd.NextUInt64(), even.NextUInt64()); } public void KeepsTheLowest31BitsOfTheSeed() { var wide = new Randu(0x80000002UL); var narrow = new Randu(3); CheckEqual(narrow.NextUInt64(), wide.NextUInt64()); } } public class NextUInt64Tests : UnitTestSharp.TestFixture { public void PutsThe31BitStateAtTheTop() { var generator = new Randu(1); CheckEqual(0x0002000600000000UL, generator.NextUInt64()); CheckEqual(0x000c001200000000UL, generator.NextUInt64()); CheckEqual(0x0036003600000000UL, generator.NextUInt64()); CheckEqual(0x00d800a200000000UL, generator.NextUInt64()); CheckEqual(0x032a01e600000000UL, generator.NextUInt64()); CheckEqual(0x0b6405b200000000UL, generator.NextUInt64()); } } public class NextUInt32Tests : UnitTestSharp.TestFixture { public void ShiftsTheStateUpOneBit() { var generator = new Randu(1); CheckEqual(0x00020006U, generator.NextUInt32()); CheckEqual(0x000c0012U, generator.NextUInt32()); CheckEqual(0x00360036U, generator.NextUInt32()); CheckEqual(0x00d800a2U, generator.NextUInt32()); CheckEqual(0x032a01e6U, generator.NextUInt32()); CheckEqual(0x0b6405b2U, generator.NextUInt32()); } } } }