Пример #1
0
        public static char RandomBraille(ulong seed, int dots)
        {
            string s = BrailleByDots[dots % 9];

            return(s[RNG.DetermineBounded(seed, s.Length)]);
        }
Пример #2
0
        public void TestDetermineBounded()
        {
            ulong[] states =
            {
                0UL,
                ulong.MinValue,
                ulong.MaxValue,
                ulong.MaxValue / 2
            };

            int[] boundaries =
            {
                int.MaxValue,
                int.MinValue,
                0,
                1,
                -1,
                2,
                -2,
                int.MaxValue / 2,
                int.MinValue / 2
            };

            foreach (ulong state in states)
            {
                for (ulong adding = 0; adding <= 300; adding += 3)
                {
                    foreach (int bound in boundaries)
                    {
                        int value = RNG.DetermineBounded(state + adding, bound);
                        Assert.AreEqual(value, RNG.DetermineBounded(state + adding, bound));
                        switch (bound)
                        {
                        case 0:
                            Assert.AreEqual(0, value);
                            break;

                        case { } _ when bound > 0:
                            Assert.IsTrue(value >= 0, $"Boundary fail with value {value} and bound {bound}");
                            Assert.IsTrue(value < bound, $"Boundary fail with value {value} and bound {bound}");
                            break;

                        case { } _ when bound < 0:
                            Assert.IsTrue(value <= 0, $"Boundary fail with value {value} and bound {bound}");
                            Assert.IsTrue(value > bound, $"Boundary fail with value {value} and bound {bound}");
                            break;

                        default:
                            Assert.Fail($"Untested value: {bound}");
                            break;
                        }
                    }
                    int sum = 0;
                    for (ulong i = 0; i < 1000; i++)
                    {
                        sum += RNG.DetermineBounded(state + adding + i, -2);
                    }
                    Assert.IsTrue(sum <-375 && sum> -625, $"Sum of 1000 calls to DetermineBounded(-2): {sum}");
                }
            }
        }