public void CorrectlyDivides(ulong divisor, ulong testDividend)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var quotient      = testDividend / uInt64Divisor;

            Assert.AreEqual(testDividend / divisor, quotient, SerializeDivisor(uInt64Divisor));
        }
        public void CalculatesModulusCorrectly(ulong divisor, ulong testDividend)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var remainder     = testDividend % uInt64Divisor;

            Assert.AreEqual(testDividend % divisor, remainder, SerializeDivisor(uInt64Divisor));
        }
        public void CalculatesFloorCorrectly(ulong divisor, ulong testDividend)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var rounded       = uInt64Divisor.Floor(testDividend);

            Assert.AreEqual(testDividend / divisor * divisor, rounded, SerializeDivisor(uInt64Divisor));
        }
        public void CalculatesFloorRemCorrectly(ulong divisor, ulong testDividend)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var remainder     = uInt64Divisor.FloorRem(testDividend, out var rounded);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(testDividend % divisor, remainder, SerializeDivisor(uInt64Divisor));
                Assert.AreEqual(testDividend / divisor * divisor, rounded, SerializeDivisor(uInt64Divisor));
            });
        }
        public void DivRemReturnsCorrectly(ulong divisor, ulong testDividend)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var remainder     = uInt64Divisor.DivRem(testDividend, out var quotient);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(testDividend % divisor, remainder, SerializeDivisor(uInt64Divisor));
                Assert.AreEqual(testDividend / divisor, quotient, SerializeDivisor(uInt64Divisor));
            });
        }
        public void CalculatesFloorCorrectlyRandomNumerators(ulong divisor)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var rng           = new PcgRandom();

            for (ulong i = 0; i < RandomTestCount; i++)
            {
                var testDividend = rng.Next() | ((ulong)rng.Next() << 32);
                var rounded      = uInt64Divisor.Floor(testDividend);
                Assert.AreEqual(testDividend / divisor * divisor, rounded, $"Trying to test {testDividend} / {SerializeDivisor(uInt64Divisor)} * {SerializeDivisor(uInt64Divisor)}");
            }
        }
        public void CalculatesModulusCorrectlyRandomNumerators(ulong divisor)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var rng           = new PcgRandom();

            for (ulong i = 0; i < RandomTestCount; i++)
            {
                var testDividend = rng.Next() | ((ulong)rng.Next() << 32);
                var remainder    = testDividend % uInt64Divisor;
                Assert.AreEqual(testDividend % divisor, remainder, $"Trying to test {testDividend} % {SerializeDivisor(uInt64Divisor)}");
            }
        }
        public void CorrectlyDividesRandomNumerators(ulong divisor)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var rng           = new PcgRandom();

            for (ulong i = 0; i < RandomTestCount; i++)
            {
                var testDividend = rng.Next() | ((ulong)rng.Next() << 32);
                var quotient     = testDividend / uInt64Divisor;
                Assert.AreEqual(testDividend / divisor, quotient, $"Trying to test {testDividend} / {SerializeDivisor(uInt64Divisor)}");
            }
        }
        public void DivRemReturnsCorrectlyRandomNumerators(ulong divisor)
        {
            var uInt64Divisor = new UInt64Divisor(divisor);
            var rng           = new PcgRandom();

            for (ulong i = 0; i < RandomTestCount; i++)
            {
                var testDividend = rng.Next() | ((ulong)rng.Next() << 32);
                var remainder    = uInt64Divisor.DivRem(testDividend, out var quotient);
                Assert.AreEqual(testDividend % divisor, remainder, $"Trying to test {testDividend} % {SerializeDivisor(uInt64Divisor)}");
                Assert.AreEqual(testDividend / divisor, quotient, $"Trying to test {testDividend} / {SerializeDivisor(uInt64Divisor)}");
            }
        }
 public void Setup()
 {
     rng = new PcgRandom();
     Console.WriteLine($"Setup with value {ValueToDivideBy}");
     divisorBranching = new UInt64Divisor(ValueToDivideBy);
 }
 private static string SerializeDivisor(UInt64Divisor divisor) => $"{JsonConvert.SerializeObject(divisor)}";
 public UInt64Divisor UInt64Divisor() => u64D = new UInt64Divisor(Divisor() | ((ulong)Divisor() << 32));