Example #1
0
        static void DoTest(RandomOps.Random Rand)
        {
            int i;

            Console.WriteLine("RNG name: {0}", Rand.Name);
            Console.WriteLine();

            if (TestByte)
            {
                Console.WriteLine("Byte()");
                int[] ByteCounts = new int[Byte.MaxValue + 1];
                ZeroCounts(ByteCounts);
                for (i = 0; i < ByteIterations; i++)
                {
                    ByteCounts[Rand.Byte()] += 1;
                }
                PrintCounts(ByteCounts);
                Console.WriteLine();
            }

            Console.WriteLine("Bytes({0})", NumBytes);
            byte[] byteArr = Rand.Bytes(NumBytes);
            for (i = 0; i < NumBytes; i++)
            {
                Console.WriteLine(byteArr[i]);
            }
            Console.WriteLine();

            Console.WriteLine("Uniform()");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform());
            }
            Console.WriteLine();

            Console.WriteLine("Uniform(-3, -1)");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform(-3, -1));
            }
            Console.WriteLine();

            Console.WriteLine("Uniform(-2, 2)");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform(-2, 2));
            }
            Console.WriteLine();

            Console.WriteLine("Uniform(3, 5)");
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Uniform(3, 5));
            }
            Console.WriteLine();

            Console.WriteLine("Gauss({0}, {1})", GaussMean, GaussDeviation);
            for (i = 0; i < NumIterations; i++)
            {
                Console.WriteLine(Rand.Gauss(GaussMean, GaussDeviation));
            }
            Console.WriteLine();

            double sum = 0;
            for (i = 0; i < MeanIterations; i++)
            {
                sum += Rand.Uniform();
            }
            Console.WriteLine("Mean of {0} x Uniform(): {1:0.0000}", MeanIterations, sum / MeanIterations);
            Console.WriteLine();

            sum = 0;
            for (i = 0; i < MeanIterations; i++)
            {
                sum += Rand.Gauss(0, 1);
            }
            Console.WriteLine("Mean of {0} x Gauss(0, 1): {1:0.0000}", MeanIterations, sum / MeanIterations);
            Console.WriteLine();

            Console.WriteLine("Disk()");
            PrintPoint(Rand.Disk());
            Console.WriteLine();

            Console.WriteLine("Circle()");
            PrintPoint(Rand.Circle());
            Console.WriteLine();

            Console.WriteLine("Sphere3()");
            PrintPoint(Rand.Sphere3());
            Console.WriteLine();

            Console.WriteLine("Sphere4()");
            PrintPoint(Rand.Sphere4());
            Console.WriteLine();

            Console.WriteLine("Sphere({0}, {1})", SphereDim, SphereRadius);
            PrintPoint(Rand.Sphere(SphereDim, SphereRadius));
            Console.WriteLine();

            if (TestBool)
            {
                Console.WriteLine("Bool()");
                int countTrue = 0;
                int countFalse = 0;
                for (i = 0; i < BoolIterations; i++)
                {
                    if (Rand.Bool())
                    {
                        countTrue++;
                    }
                    else
                    {
                        countFalse++;
                    }
                }
                Console.WriteLine("True: {0}", countTrue);
                Console.WriteLine("False: {0}", countFalse);
                Console.WriteLine();
            }

            Console.WriteLine("Index({0})", MaxIndex);
            ZeroCounts(IndexCounts);
            for (i = 0; i < IndexIterations; i++)
            {
                int idx = Rand.Index(MaxIndex);

                IndexCounts[idx] += 1;
            }
            PrintCounts(IndexCounts);
            Console.WriteLine();

            Console.WriteLine("Index2({0}, ...)", MaxIndex);
            ZeroCounts(IndexCounts);
            for (i = 0; i < IndexIterations; i++)
            {
                int idx1, idx2;

                Rand.Index2(MaxIndex, out idx1, out idx2);

                Debug.Assert(idx1 != idx2);

                IndexCounts[idx1] += 1;
                IndexCounts[idx2] += 1;
            }
            PrintCounts(IndexCounts);
            Console.WriteLine();

            RandomOps.Set RandSet = new RandomOps.Set(Rand, RandSetSize);

            Console.WriteLine("RandSet.Reset()");
            RandSet.Reset();
            Console.WriteLine();

            Console.WriteLine("RandSet.Draw() with set of size {0} and {1} iterations", RandSetSize, SetIterations / 2);
            for (i = 0; i < SetIterations / 2; i++)
            {
                Console.WriteLine(RandSet.Draw());
            }
            Console.WriteLine();

            Console.WriteLine("RandSet.Reset()");
            Console.WriteLine("RandSet.Draw() with set of size {0}", RandSetSize);
            RandSet.Reset();
            for (i = 0; i < SetIterations; i++)
            {
                Console.WriteLine(RandSet.Draw());
            }
            Console.WriteLine();

            //RandSet.Draw(); // Assertion fails.

            Console.WriteLine("RandSet.ResetExclude({0})", RandSetExclude);
            Console.WriteLine("RandSet.Draw() with set of size {0}", RandSetSize);
            RandSet.ResetExclude(RandSetExclude);
            for (i = 0; i < SetIterations - 1; i++)
            {
                Console.WriteLine(RandSet.Draw());
            }
            Console.WriteLine();

            //RandSet.Draw(); // Assertion fails.

            ZeroCounts(SetCounts);
            Console.WriteLine("RandSet.Draw() with set of size {0}", RandSetSize);
            for (i = 0; i < SetIterations2; i++)
            {
                RandSet.Reset();

                while (RandSet.Size > 0)
                {
                    int idx = RandSet.Draw();

                    SetCounts[idx] += 1;
                }
            }
            PrintCounts(SetCounts);
            Console.WriteLine();

            InitSetProbabilities(Rand);

            ZeroCounts(IndexDistributionCounts);
            Console.WriteLine("Rand.Index() with probability distribution");
            for (i = 0; i < IndexDistributionIterations; i++)
            {
                int idx = Rand.Index(IndexProbabilities);

                IndexDistributionCounts[idx] += 1;
            }
            PrintDistributionCounts();
            Console.WriteLine();

            RandomOps.IndexDistribution IndexDistribution = new RandomOps.IndexDistribution(Rand, IndexProbabilities);

            ZeroCounts(IndexDistributionCounts);
            Console.WriteLine("IndexDistribution.DrawLinearSearch()");
            for (i = 0; i < IndexDistributionIterations; i++)
            {
                int idx = IndexDistribution.DrawLinearSearch();

                IndexDistributionCounts[idx] += 1;
            }
            PrintDistributionCounts();
            Console.WriteLine();

            ZeroCounts(IndexDistributionCounts);
            Console.WriteLine("IndexDistribution.DrawBinarySearch()");
            for (i = 0; i < IndexDistributionIterations; i++)
            {
                int idx = IndexDistribution.DrawBinarySearch();

                IndexDistributionCounts[idx] += 1;
            }
            PrintDistributionCounts();
            Console.WriteLine();
        }