コード例 #1
0
                /// <summary>
                /// Tests that the
                /// <see cref="O:Novacta.Analytics.ProbabilityDistribution.
                /// Sample"/>
                /// method fails when parameter sampleSize is not positive.
                /// </summary>
                /// <param name="testableDistribution">
                /// The testable probability distribution providing the instance
                /// on which to invoke the methods to test and their expected
                /// behaviors.
                /// </param>
                public static void SampleSizeIsNotPositive(
                    TestableProbabilityDistribution testableDistribution)
                {
                    string STR_EXCEPT_PAR_MUST_BE_POSITIVE =
                        (string)Reflector.ExecuteStaticMember(
                            typeof(ImplementationServices),
                            "GetResourceString",
                            new string[] { "STR_EXCEPT_PAR_MUST_BE_POSITIVE" });

                    string parameterName = "sampleSize";

                    // distribution.Sample(sampleSize)
                    ArgumentExceptionAssert.Throw(
                        () =>
                    {
                        var values = testableDistribution.Distribution.Sample(
                            sampleSize: 0);
                    },
                        expectedType: typeof(ArgumentOutOfRangeException),
                        expectedPartialMessage: STR_EXCEPT_PAR_MUST_BE_POSITIVE,
                        expectedParameterName: parameterName);

                    // distribution.Sample(sampleSize, destinationArray, destinationIndex)
                    ArgumentExceptionAssert.Throw(
                        () =>
                    {
                        testableDistribution.Distribution.Sample(
                            sampleSize: 0,
                            destinationArray: new double[1],
                            destinationIndex: 0);
                    },
                        expectedType: typeof(ArgumentOutOfRangeException),
                        expectedPartialMessage: STR_EXCEPT_PAR_MUST_BE_POSITIVE,
                        expectedParameterName: parameterName);
                }
コード例 #2
0
                /// <summary>
                /// Tests that the
                /// <see cref="ProbabilityDistribution.
                /// Sample(int, double[], int)"/>
                /// method fails when parameter sampleSize is too big to
                /// fit in the destination array.
                /// </summary>
                /// <param name="testableDistribution">
                /// The testable probability distribution providing the instance
                /// on which to invoke the methods to test and their expected
                /// behaviors.
                /// </param>
                public static void SampleSizeIsTooBig(
                    TestableProbabilityDistribution testableDistribution)
                {
                    string STR_EXCEPT_PDF_SAMPLESIZE_ARRAYLENGTH_MISMATCH =
                        String.Format(
                            (string)Reflector.ExecuteStaticMember(
                                typeof(ImplementationServices),
                                "GetResourceString",
                                new string[] { "STR_EXCEPT_PDF_SAMPLESIZE_ARRAYLENGTH_MISMATCH" }),
                            "sampleSize",
                            "destinationArray",
                            "destinationIndex");


                    string parameterName = "sampleSize";

                    ArgumentExceptionAssert.Throw(
                        () =>
                    {
                        testableDistribution.Distribution.Sample(
                            sampleSize: 2,
                            destinationArray: new double[1],
                            destinationIndex: 0);
                    },
                        expectedType: typeof(ArgumentException),
                        expectedPartialMessage: STR_EXCEPT_PDF_SAMPLESIZE_ARRAYLENGTH_MISMATCH,
                        expectedParameterName: parameterName);
                }
コード例 #3
0
                /// <summary>
                /// Provides methods to test that the
                /// <see cref="O:Novacta.Analytics.ProbabilityDistribution.
                /// InverseCdf"/>
                /// method fails when parameter arguments is <b>null</b>.
                /// </summary>
                /// <param name="testableDistribution">
                /// The testable probability distribution providing the instance
                /// on which to invoke the methods to test and their expected
                /// behaviors.
                /// </param>
                public static void ArgumentsIsNull(
                    TestableProbabilityDistribution testableDistribution)
                {
                    string parameterName = "arguments";

                    // DoubleMatrix
                    ArgumentExceptionAssert.Throw(
                        () =>
                    {
                        var values = testableDistribution.Distribution.InverseCdf(
                            arguments: (DoubleMatrix)null);
                    },
                        expectedType: typeof(ArgumentNullException),
                        expectedPartialMessage: ArgumentExceptionAssert.NullPartialMessage,
                        expectedParameterName: parameterName);

                    // ReadOnlyDoubleMatrix
                    ArgumentExceptionAssert.Throw(
                        () =>
                    {
                        var values = testableDistribution.Distribution.InverseCdf(
                            arguments: (ReadOnlyDoubleMatrix)null);
                    },
                        expectedType: typeof(ArgumentNullException),
                        expectedPartialMessage: ArgumentExceptionAssert.NullPartialMessage,
                        expectedParameterName: parameterName);
                }
コード例 #4
0
                /// <summary>
                /// Provides methods to test that the
                /// <see cref="O:Novacta.Analytics.ProbabilityDistribution.
                /// InverseCdf"/>
                /// method fails when the CDF cannot be inverted.
                /// </summary>
                /// <param name="testableDistribution">
                /// The testable probability distribution providing the instance
                /// on which to invoke the methods to test and their expected
                /// behaviors.
                /// </param>
                public static void CdfCannotBeInverted(
                    TestableProbabilityDistribution testableDistribution)
                {
                    string STR_EXCEPT_PDF_INVERSE_CDF_NOT_SUPPORTED =
                        (string)Reflector.ExecuteStaticMember(
                            typeof(ImplementationServices),
                            "GetResourceString",
                            new string[] { "STR_EXCEPT_PDF_INVERSE_CDF_NOT_SUPPORTED" });

                    // DoubleMatrix
                    ExceptionAssert.Throw(
                        () =>
                    {
                        var values = testableDistribution.Distribution.InverseCdf(
                            arguments: DoubleMatrix.Identity(2));
                    },
                        expectedType: typeof(NotSupportedException),
                        expectedMessage: STR_EXCEPT_PDF_INVERSE_CDF_NOT_SUPPORTED);

                    // ReadOnlyDoubleMatrix
                    ExceptionAssert.Throw(
                        () =>
                    {
                        var values = testableDistribution.Distribution.InverseCdf(
                            arguments: DoubleMatrix.Identity(2).AsReadOnly());
                    },
                        expectedType: typeof(NotSupportedException),
                        expectedMessage: STR_EXCEPT_PDF_INVERSE_CDF_NOT_SUPPORTED);
                }
コード例 #5
0
 /// <summary>
 /// Tests that the
 /// <see cref="ProbabilityDistribution.
 /// CanInvertCdf"/>
 /// property terminates successfully when expected.
 /// </summary>
 /// <param name="testableDistribution">
 /// The testable probability distribution providing the instance
 /// on which to invoke the methods to test and their expected
 /// behaviors.
 /// </param>
 public static void Succeed(
     TestableProbabilityDistribution testableDistribution)
 {
     Assert.AreEqual(
         expected: testableDistribution.CanInvertCdf,
         actual: testableDistribution.Distribution.CanInvertCdf);
 }
コード例 #6
0
 /// <summary>
 /// Tests that the
 /// <see cref="ProbabilityDistribution.
 /// StandardDeviation"/>
 /// method terminates successfully when expected.
 /// </summary>
 /// <param name="testableDistribution">
 /// The testable probability distribution providing the instance
 /// on which to invoke the methods to test and their expected
 /// behaviors.
 /// </param>
 public static void Succeed(
     TestableProbabilityDistribution testableDistribution)
 {
     Assert.AreEqual(
         expected: Math.Sqrt(testableDistribution.Variance),
         actual: testableDistribution.Distribution.StandardDeviation(),
         delta: DoubleMatrixTest.Accuracy);
 }
コード例 #7
0
 /// <summary>
 /// Tests that the
 /// <see cref="ProbabilityDistribution.
 /// Variance"/>
 /// method terminates successfully when expected.
 /// </summary>
 /// <param name="testableDistribution">
 /// The testable probability distribution providing the instance
 /// on which to invoke the methods to test and their expected
 /// behaviors.
 /// </param>
 public static void Succeed(
     TestableProbabilityDistribution testableDistribution)
 {
     Assert.AreEqual(
         expected: testableDistribution.Variance,
         actual: testableDistribution.Distribution.Variance(),
         delta: DoubleMatrixTest.Accuracy);
 }
コード例 #8
0
            /// <summary>
            /// Tests that the overloaded
            /// <see cref="O:Novacta.Analytics.ProbabilityDistribution.
            /// Cdf"/>
            /// method terminates successfully when expected.
            /// </summary>
            /// <param name="testableDistribution">
            /// The testable probability distribution providing the instance
            /// on which to invoke the methods to test and their expected
            /// behaviors.
            /// </param>
            public static void Succeed(TestableProbabilityDistribution testableDistribution)
            {
                var partialGraph = testableDistribution.CdfPartialGraph;

                var distribution = testableDistribution.Distribution;

                CheckPartialGraph(
                    (Func <double, double>)distribution.Cdf,
                    partialGraph);
                CheckPartialGraph(
                    (Func <DoubleMatrix, DoubleMatrix>)distribution.Cdf,
                    partialGraph);
                CheckPartialGraph(
                    (Func <ReadOnlyDoubleMatrix, DoubleMatrix>)distribution.Cdf,
                    partialGraph);
            }
コード例 #9
0
                /// <summary>
                /// Tests that the
                /// <see cref="ProbabilityDistribution.
                /// Sample(int, double[], int)"/>
                /// method fails when parameter destinationArray is <b>null</b>.
                /// </summary>
                /// <param name="testableDistribution">
                /// The testable probability distribution providing the instance
                /// on which to invoke the methods to test and their expected
                /// behaviors.
                /// </param>
                public static void DestinationArrayIsNull(
                    TestableProbabilityDistribution testableDistribution)
                {
                    string parameterName = "destinationArray";

                    ArgumentExceptionAssert.Throw(
                        () =>
                    {
                        testableDistribution.Distribution.Sample(
                            sampleSize: 1,
                            destinationArray: null,
                            destinationIndex: 0);
                    },
                        expectedType: typeof(ArgumentNullException),
                        expectedPartialMessage: ArgumentExceptionAssert.NullPartialMessage,
                        expectedParameterName: parameterName);
                }
コード例 #10
0
            /// <summary>
            /// Tests that the overloaded
            /// <see cref="O:Novacta.Analytics.ProbabilityDistribution.
            /// Sample"/>
            /// method terminates successfully when expected.
            /// </summary>
            /// <param name="testableDistribution">
            /// The testable probability distribution providing the instance
            /// on which to invoke the methods to test and their expected
            /// behaviors.
            /// </param>
            /// <param name="sampleSize">The sample size.</param>
            /// <param name="delta">The required accuracy.</param>
            public static void Succeed(
                TestableProbabilityDistribution testableDistribution,
                int sampleSize,
                double delta)
            {
                var distribution = testableDistribution.Distribution;

                bool CanCheckChebyshevInequality =
                    !Double.IsInfinity(distribution.Mean())
                    &&
                    !Double.IsPositiveInfinity(distribution.Variance());

                // distribution.Sample()
                {
                    var sample = DoubleMatrix.Dense(sampleSize, 1);

                    for (int i = 0; i < sampleSize; i++)
                    {
                        sample[i] = distribution.Sample();
                    }

                    if (CanCheckChebyshevInequality)
                    {
                        CheckChebyshevInequality(
                            distribution: distribution,
                            sampleMean: Stat.Mean(sample),
                            sampleSize: sampleSize,
                            delta: delta);
                    }
                }

                // distribution.Sample(sampleSize)
                {
                    var sample = distribution.Sample(sampleSize);

                    Assert.AreEqual(expected: sampleSize, actual: sample.Count);
                    Assert.AreEqual(expected: true, sample.IsColumnVector);

                    if (CanCheckChebyshevInequality)
                    {
                        CheckChebyshevInequality(
                            distribution: distribution,
                            sampleMean: Stat.Mean(sample),
                            sampleSize: sampleSize,
                            delta: delta);
                    }
                }

                // distribution.Sample(sampleSize, destinationArray, destinationIndex)
                {
                    int      destinationSize  = sampleSize * 10;
                    int      partialSize      = sampleSize;
                    var      sample           = DoubleMatrix.Dense(destinationSize, 1);
                    double[] destinationArray = sample.GetStorage();

                    IndexCollection destinationIndexes =
                        IndexCollection.Sequence(0, partialSize, destinationSize - 1);

                    foreach (var destinationIndex in destinationIndexes)
                    {
                        distribution.Sample(partialSize, destinationArray, destinationIndex);
                    }

                    if (CanCheckChebyshevInequality)
                    {
                        CheckChebyshevInequality(
                            distribution: distribution,
                            sampleMean: Stat.Mean(sample),
                            sampleSize: sampleSize,
                            delta: delta);
                    }
                }
            }