/// <summary> /// Tests that samplers /// in <see cref="RandomNumberGenerator"/> /// filling an array with a sample fail /// when parameter sampleSize is too big to /// fit in the destination array. /// </summary> /// <typeparam name="TSample">The type of a sample point.</typeparam> /// <typeparam name="TParameters"> /// The type of the distribution parameters.</typeparam> /// <param name="sampleArrayFunc"> /// A method returning a sample from a /// statistical distribution having the specified /// parameters.</param> /// <param name="distributionParameters">The parameters of the distribution /// from which the sample is drawn.</param> public static void SampleSizeIsTooBig <TSample, TParameters>( SampleArrayFunc <TSample, TParameters> sampleArrayFunc, TParameters[] distributionParameters) { 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( () => { sampleArrayFunc( sampleSize: 2, destinationArray: new TSample[1], destinationIndex: 0, parameters: distributionParameters); }, expectedType: typeof(ArgumentException), expectedPartialMessage: STR_EXCEPT_PDF_SAMPLESIZE_ARRAYLENGTH_MISMATCH, expectedParameterName: parameterName); }
/// <summary> /// Tests that samplers /// in <see cref="RandomNumberGenerator"/> /// filling an array with a sample fail /// when parameter destinationIndex is negative. /// </summary> /// <typeparam name="TSample">The type of a sample point.</typeparam> /// <typeparam name="TParameters"> /// The type of the distribution parameters.</typeparam> /// <param name="sampleArrayFunc"> /// A method returning a sample from a /// statistical distribution having the specified /// parameters.</param> /// <param name="distributionParameters">The parameters of the distribution /// from which the sample is drawn.</param> public static void DestinationIndexIsNegative <TSample, TParameters>( SampleArrayFunc <TSample, TParameters> sampleArrayFunc, TParameters[] distributionParameters) { string STR_EXCEPT_PAR_MUST_BE_NON_NEGATIVE = (string)Reflector.ExecuteStaticMember( typeof(ImplementationServices), "GetResourceString", new string[] { "STR_EXCEPT_PAR_MUST_BE_NON_NEGATIVE" }); string parameterName = "destinationIndex"; // distribution.Sample(sampleSize, destinationArray, destinationIndex) ArgumentExceptionAssert.Throw( () => { sampleArrayFunc( sampleSize: 1, destinationArray: new TSample[1], destinationIndex: -1, parameters: distributionParameters); }, expectedType: typeof(ArgumentOutOfRangeException), expectedPartialMessage: STR_EXCEPT_PAR_MUST_BE_NON_NEGATIVE, expectedParameterName: parameterName); }
/// <summary> /// Tests that samplers /// in <see cref="RandomNumberGenerator"/> /// filling an array with a sample fail /// when parameter destinationArray is <b>null</b>. /// </summary> /// <typeparam name="TSample">The type of a sample point.</typeparam> /// <typeparam name="TParameters"> /// The type of the distribution parameters.</typeparam> /// <param name="sampleArrayFunc"> /// A method returning a sample from a /// statistical distribution having the specified /// parameters.</param> /// <param name="distributionParameters">The parameters of the distribution /// from which the sample is drawn.</param> public static void DestinationArrayIsNull <TSample, TParameters>( SampleArrayFunc <TSample, TParameters> sampleArrayFunc, TParameters[] distributionParameters) { string parameterName = "destinationArray"; ArgumentExceptionAssert.Throw( () => { sampleArrayFunc( sampleSize: 1, destinationArray: null, destinationIndex: 0, parameters: distributionParameters); }, expectedType: typeof(ArgumentNullException), expectedPartialMessage: ArgumentExceptionAssert.NullPartialMessage, expectedParameterName: parameterName); }
/// <summary> /// Tests that methods /// of <see cref="RandomNumberGenerator"/> /// returning a sample of integers to an array from a /// statistical distribution /// terminates successfully when expected. /// </summary> /// <typeparam name="TParameters"> /// The type of the distribution parameters.</typeparam> /// <param name="distributionMean">The mean of the distribution /// from which the sample has been drawn.</param> /// <param name="distributionVariance"> /// The variance of the distribution /// from which the sample has been drawn.</param> /// <param name="sampleSize">The sample size.</param> /// <param name="delta">The required accuracy.</param> /// <param name="sampleArrayFunc"> /// A method returning a sample from a /// statistical distribution having the specified /// parameters.</param> /// <param name="distributionParameters">The parameters of the distribution /// from which the sample is drawn.</param> public static void Int32Succeed <TParameters>( double distributionMean, double distributionVariance, int sampleSize, double delta, SampleArrayFunc <int, TParameters> sampleArrayFunc, params TParameters[] distributionParameters) { bool CanCheckChebyshevInequality = !Double.IsInfinity(distributionMean) && !Double.IsPositiveInfinity(distributionVariance); // distribution.Sample(sampleSize, destinationArray, destinationIndex) { int destinationSize = sampleSize * 10; int partialSize = sampleSize; var sample = new int[destinationSize]; int[] destinationArray = sample; IndexCollection destinationIndexes = IndexCollection.Sequence(0, partialSize, destinationSize - 1); foreach (var destinationIndex in destinationIndexes) { sampleArrayFunc( partialSize, destinationArray, destinationIndex, distributionParameters); } if (CanCheckChebyshevInequality) { RandomNumberGeneratorTest.CheckChebyshevInequality( distributionMean: distributionMean, distributionVariance: distributionVariance, sampleMean: sample.Average(), sampleSize: sampleSize, delta: delta); } } }
/// <summary> /// Tests that methods /// of <see cref="RandomNumberGenerator"/> /// returning a sample of doubles to an array from a /// statistical distribution /// terminates successfully when expected. /// </summary> /// <typeparam name="TParameters"> /// The type of the distribution parameters.</typeparam> /// <param name="distributionMean">The mean of the distribution /// from which the sample has been drawn.</param> /// <param name="distributionVariance"> /// The variance of the distribution /// from which the sample has been drawn.</param> /// <param name="sampleSize">The sample size.</param> /// <param name="delta">The required accuracy.</param> /// <param name="sampleArrayFunc"> /// A method returning a sample from a /// statistical distribution having the specified /// parameters.</param> /// <param name="distributionParameters">The parameters of the distribution /// from which the sample is drawn.</param> public static void DoubleSucceed <TParameters>( double distributionMean, double distributionVariance, int sampleSize, double delta, SampleArrayFunc <double, TParameters> sampleArrayFunc, params TParameters[] distributionParameters) { bool canCheckChebyshevInequality = !Double.IsInfinity(distributionMean) && !Double.IsPositiveInfinity(distributionVariance); // 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) { sampleArrayFunc( partialSize, destinationArray, destinationIndex, distributionParameters); } if (canCheckChebyshevInequality) { RandomNumberGeneratorTest.CheckChebyshevInequality( distributionMean: distributionMean, distributionVariance: distributionVariance, sampleMean: Stat.Mean(sample), sampleSize: sampleSize, delta: delta); } } }