Browse Source

Distributions: rework CommonDistributionTests to use test cases

spatial
Christoph Ruegg 9 years ago
parent
commit
67295a7a7e
  1. 127
      src/Numerics.Tests/DistributionTests/CommonDistributionTests.cs

127
src/Numerics.Tests/DistributionTests/CommonDistributionTests.cs

@ -28,7 +28,6 @@
// </copyright> // </copyright>
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using MathNet.Numerics.Distributions; using MathNet.Numerics.Distributions;
using MathNet.Numerics.Random; using MathNet.Numerics.Random;
@ -50,8 +49,7 @@ namespace MathNet.Numerics.UnitTests.DistributionTests
public const double ErrorTolerance = 0.01; public const double ErrorTolerance = 0.01;
public const double ErrorProbability = 0.001; public const double ErrorProbability = 0.001;
readonly List<IDiscreteDistribution> _discreteDistributions = static readonly IDiscreteDistribution[] DiscreteDistributions =
new List<IDiscreteDistribution>
{ {
new Bernoulli(0.6), new Bernoulli(0.6),
new Binomial(0.7, 10), new Binomial(0.7, 10),
@ -65,8 +63,7 @@ namespace MathNet.Numerics.UnitTests.DistributionTests
new Zipf(3.0, 10), new Zipf(3.0, 10),
}; };
readonly List<IContinuousDistribution> _continuousDistributions = static readonly IContinuousDistribution[] ContinuousDistributions =
new List<IContinuousDistribution>
{ {
new Beta(1.0, 1.0), new Beta(1.0, 1.0),
new BetaScaled(1.0, 1.5, 0.5, 2.0), new BetaScaled(1.0, 1.5, 0.5, 2.0),
@ -90,100 +87,76 @@ namespace MathNet.Numerics.UnitTests.DistributionTests
new Weibull(1.0, 1.0), new Weibull(1.0, 1.0),
}; };
[Test] [Test, TestCaseSource(nameof(DiscreteDistributions))]
public void ValidateThatUnivariateDistributionsHaveRandomSource() public void HasRandomSourceDiscrete(IDiscreteDistribution distribution)
{ {
foreach (var dd in _discreteDistributions) Assert.IsNotNull(distribution.RandomSource);
{ }
Assert.IsNotNull(dd.RandomSource);
}
foreach (var cd in _continuousDistributions) [Test, TestCaseSource(nameof(ContinuousDistributions))]
{ public void HasRandomSourceContinuous(IContinuousDistribution distribution)
Assert.IsNotNull(cd.RandomSource); {
} Assert.IsNotNull(distribution.RandomSource);
} }
[Test] [Test, TestCaseSource(nameof(DiscreteDistributions))]
public void CanSetRandomSource() public void CanSetRandomSourceDiscrete(IDiscreteDistribution distribution)
{ {
foreach (var dd in _discreteDistributions) distribution.RandomSource = MersenneTwister.Default;
{ }
dd.RandomSource = MersenneTwister.Default;
}
foreach (var cd in _continuousDistributions) [Test, TestCaseSource(nameof(ContinuousDistributions))]
{ public void CanSetRandomSourceContinuous(IContinuousDistribution distribution)
cd.RandomSource = MersenneTwister.Default; {
} distribution.RandomSource = MersenneTwister.Default;
} }
[Test] [Test, TestCaseSource(nameof(DiscreteDistributions))]
public void HasRandomSourceEvenAfterSetToNull() public void HasRandomSourceEvenAfterSetToNullDiscrete(IDiscreteDistribution distribution)
{ {
foreach (var dd in _discreteDistributions) Assert.DoesNotThrow(() => distribution.RandomSource = null);
{ Assert.IsNotNull(distribution.RandomSource);
Assert.DoesNotThrow(() => dd.RandomSource = null); }
Assert.IsNotNull(dd.RandomSource);
}
foreach (var cd in _continuousDistributions) [Test, TestCaseSource(nameof(ContinuousDistributions))]
{ public void HasRandomSourceEvenAfterSetToNullContinuous(IContinuousDistribution distribution)
Assert.DoesNotThrow(() => cd.RandomSource = null); {
Assert.IsNotNull(cd.RandomSource); Assert.DoesNotThrow(() => distribution.RandomSource = null);
} Assert.IsNotNull(distribution.RandomSource);
} }
[Test, Category("LongRunning")] [Test, Category("LongRunning"), TestCaseSource(nameof(DiscreteDistributions))]
public void DiscreteSampleIsDistributedCorrectly() public void SampleIsDistributedCorrectlyDiscrete(IDiscreteDistribution distribution)
{ {
foreach (var dist in _discreteDistributions) distribution.RandomSource = new SystemRandomSource(1, false);
{ var samples = new int[NumberOfTestSamples];
dist.RandomSource = new SystemRandomSource(1, false); distribution.Samples(samples);
var samples = new int[NumberOfTestSamples]; DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution);
for (var i = 0; i < NumberOfTestSamples; i++)
{
samples[i] = dist.Sample();
}
DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist);
}
} }
[Test, Category("LongRunning")] [Test, Category("LongRunning"), TestCaseSource(nameof(DiscreteDistributions))]
public void DiscreteSampleSequenceIsDistributedCorrectly() public void SampleSequenceIsDistributedCorrectlyDiscrete(IDiscreteDistribution distribution)
{ {
foreach (var dist in _discreteDistributions) distribution.RandomSource = new SystemRandomSource(1, false);
{ var samples = distribution.Samples().Take(NumberOfTestSamples).ToArray();
dist.RandomSource = new SystemRandomSource(1, false); DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution);
var samples = dist.Samples().Take(NumberOfTestSamples).ToArray();
DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist);
}
} }
[Test, Category("LongRunning")] [Test, Category("LongRunning"), TestCaseSource(nameof(ContinuousDistributions))]
public void ContinuousSampleIsDistributedCorrectly() public void SampleIsDistributedCorrectlyContinuous(IContinuousDistribution distribution)
{ {
foreach (var dist in _continuousDistributions) distribution.RandomSource = new SystemRandomSource(1, false);
{ var samples = new double[NumberOfTestSamples];
dist.RandomSource = new SystemRandomSource(1, false); distribution.Samples(samples);
var samples = new double[NumberOfTestSamples]; ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution);
for (var i = 0; i < NumberOfTestSamples; i++)
{
samples[i] = dist.Sample();
}
ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist);
}
} }
[Test, Category("LongRunning")] [Test, Category("LongRunning"), TestCaseSource(nameof(ContinuousDistributions))]
public void ContinuousSampleSequenceIsDistributedCorrectly() public void SampleSequenceIsDistributedCorrectlyContinuous(IContinuousDistribution distribution)
{ {
foreach (var dist in _continuousDistributions) distribution.RandomSource = new SystemRandomSource(1, false);
{ var samples = distribution.Samples().Take(NumberOfTestSamples).ToArray();
dist.RandomSource = new SystemRandomSource(1, false); ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution);
var samples = dist.Samples().Take(NumberOfTestSamples).ToArray();
ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist);
}
} }
/// <summary> /// <summary>

Loading…
Cancel
Save