public void SobolParallelForTest()
        {
            ParallelOptions options = new ParallelOptions
            {
                MaxDegreeOfParallelism = 16
            };

            var gen = new ParallelQRNGGenerator(typeof(SobolSequence), this.d, 16);

            double[][] value      = new double[this.n][];
            object     lock_value = new object();

            Parallel.For(0, (int)this.n, options, i =>
            {
                value[i] = gen.Next();
            });

            for (int i = 0; i < this.n; i++)
            {
                for (int j = 0; j < this.d; j++)
                {
                    if (value[i] != null)
                    {
                        Console.Write(value[i][j] + " ");
                    }
                    else
                    {
                        Console.Write("null ");
                    }
                }
                Console.WriteLine();
            }
        }
        public void SobolPseudoParallelTest()
        {
            ParallelQRNGGenerator generator = new ParallelQRNGGenerator(typeof(SobolSequence), this.d, 8);

            for (int i = 0; i < this.n; i++)
            {
                double[] vector = generator.Next();
                for (int j = 0; j < vector.Length; j++)
                {
                    Console.Write(vector[j] + " ");
                    Assert.AreEqual(this.reference[i][j], vector[j]);
                }
                Console.WriteLine();
            }
        }