예제 #1
0
        public void RandomSeedingLCSize()
        {
            using (var r = MpirRandom.LinearCongruential(128))
            {
                uint seed      = 12345789;
                uint max       = 10000000;
                uint bits      = 62;
                uint expected1 = 8017343;
                uint expected2 = 2122346;
                var  expected3 = Platform.Ui(1653945017297503111, 4060840839);

                TestRandom(r, seed, x =>
                {
                    Assert.AreEqual(expected1, x.GetLimb(max));
                    Assert.AreEqual(expected2, x.GetLimb(max));
                    Assert.AreEqual(expected3, x.GetLimbBits(bits));
                });
            }
        }
예제 #2
0
        public void RandomSeedingLC()
        {
            uint seed      = 12345789;
            uint max       = 10000000;
            uint bits      = 62;
            var  expected1 = Platform.Ui(6524662, 5635868);
            var  expected2 = Platform.Ui(5428780, 5488683);
            var  expected3 = Platform.Ui(4189233241027086562, 278391078);
            var  c         = Platform.Ui(98570948725939831, 985709487);

            using (var a = new HugeInt("5209384572093847098342590872309452304529345409827509283745078"))
                using (var r = MpirRandom.LinearCongruential(a, c, 256))
                {
                    TestRandom(r, seed, x =>
                    {
                        Assert.AreEqual(expected1, x.GetLimb(max));
                        Assert.AreEqual(expected2, x.GetLimb(max));
                        Assert.AreEqual(expected3, x.GetLimbBits(bits));
                    });
                }
        }