From 67295a7a7e707da6953f2db7bcf21d7cd8358113 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Sat, 10 Feb 2018 22:08:29 +0100 Subject: [PATCH] Distributions: rework CommonDistributionTests to use test cases --- .../CommonDistributionTests.cs | 127 +++++++----------- 1 file changed, 50 insertions(+), 77 deletions(-) diff --git a/src/Numerics.Tests/DistributionTests/CommonDistributionTests.cs b/src/Numerics.Tests/DistributionTests/CommonDistributionTests.cs index 83ab5692..7b0c326b 100644 --- a/src/Numerics.Tests/DistributionTests/CommonDistributionTests.cs +++ b/src/Numerics.Tests/DistributionTests/CommonDistributionTests.cs @@ -28,7 +28,6 @@ // using System; -using System.Collections.Generic; using System.Linq; using MathNet.Numerics.Distributions; using MathNet.Numerics.Random; @@ -50,8 +49,7 @@ namespace MathNet.Numerics.UnitTests.DistributionTests public const double ErrorTolerance = 0.01; public const double ErrorProbability = 0.001; - readonly List _discreteDistributions = - new List + static readonly IDiscreteDistribution[] DiscreteDistributions = { new Bernoulli(0.6), new Binomial(0.7, 10), @@ -65,8 +63,7 @@ namespace MathNet.Numerics.UnitTests.DistributionTests new Zipf(3.0, 10), }; - readonly List _continuousDistributions = - new List + static readonly IContinuousDistribution[] ContinuousDistributions = { new Beta(1.0, 1.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), }; - [Test] - public void ValidateThatUnivariateDistributionsHaveRandomSource() + [Test, TestCaseSource(nameof(DiscreteDistributions))] + public void HasRandomSourceDiscrete(IDiscreteDistribution distribution) { - foreach (var dd in _discreteDistributions) - { - Assert.IsNotNull(dd.RandomSource); - } + Assert.IsNotNull(distribution.RandomSource); + } - foreach (var cd in _continuousDistributions) - { - Assert.IsNotNull(cd.RandomSource); - } + [Test, TestCaseSource(nameof(ContinuousDistributions))] + public void HasRandomSourceContinuous(IContinuousDistribution distribution) + { + Assert.IsNotNull(distribution.RandomSource); } - [Test] - public void CanSetRandomSource() + [Test, TestCaseSource(nameof(DiscreteDistributions))] + public void CanSetRandomSourceDiscrete(IDiscreteDistribution distribution) { - foreach (var dd in _discreteDistributions) - { - dd.RandomSource = MersenneTwister.Default; - } + distribution.RandomSource = MersenneTwister.Default; + } - foreach (var cd in _continuousDistributions) - { - cd.RandomSource = MersenneTwister.Default; - } + [Test, TestCaseSource(nameof(ContinuousDistributions))] + public void CanSetRandomSourceContinuous(IContinuousDistribution distribution) + { + distribution.RandomSource = MersenneTwister.Default; } - [Test] - public void HasRandomSourceEvenAfterSetToNull() + [Test, TestCaseSource(nameof(DiscreteDistributions))] + public void HasRandomSourceEvenAfterSetToNullDiscrete(IDiscreteDistribution distribution) { - foreach (var dd in _discreteDistributions) - { - Assert.DoesNotThrow(() => dd.RandomSource = null); - Assert.IsNotNull(dd.RandomSource); - } + Assert.DoesNotThrow(() => distribution.RandomSource = null); + Assert.IsNotNull(distribution.RandomSource); + } - foreach (var cd in _continuousDistributions) - { - Assert.DoesNotThrow(() => cd.RandomSource = null); - Assert.IsNotNull(cd.RandomSource); - } + [Test, TestCaseSource(nameof(ContinuousDistributions))] + public void HasRandomSourceEvenAfterSetToNullContinuous(IContinuousDistribution distribution) + { + Assert.DoesNotThrow(() => distribution.RandomSource = null); + Assert.IsNotNull(distribution.RandomSource); } - [Test, Category("LongRunning")] - public void DiscreteSampleIsDistributedCorrectly() + [Test, Category("LongRunning"), TestCaseSource(nameof(DiscreteDistributions))] + public void SampleIsDistributedCorrectlyDiscrete(IDiscreteDistribution distribution) { - foreach (var dist in _discreteDistributions) - { - dist.RandomSource = new SystemRandomSource(1, false); - var samples = new int[NumberOfTestSamples]; - for (var i = 0; i < NumberOfTestSamples; i++) - { - samples[i] = dist.Sample(); - } - DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist); - } + distribution.RandomSource = new SystemRandomSource(1, false); + var samples = new int[NumberOfTestSamples]; + distribution.Samples(samples); + DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution); } - [Test, Category("LongRunning")] - public void DiscreteSampleSequenceIsDistributedCorrectly() + [Test, Category("LongRunning"), TestCaseSource(nameof(DiscreteDistributions))] + public void SampleSequenceIsDistributedCorrectlyDiscrete(IDiscreteDistribution distribution) { - foreach (var dist in _discreteDistributions) - { - dist.RandomSource = new SystemRandomSource(1, false); - var samples = dist.Samples().Take(NumberOfTestSamples).ToArray(); - DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist); - } + distribution.RandomSource = new SystemRandomSource(1, false); + var samples = distribution.Samples().Take(NumberOfTestSamples).ToArray(); + DiscreteVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution); } - [Test, Category("LongRunning")] - public void ContinuousSampleIsDistributedCorrectly() + [Test, Category("LongRunning"), TestCaseSource(nameof(ContinuousDistributions))] + public void SampleIsDistributedCorrectlyContinuous(IContinuousDistribution distribution) { - foreach (var dist in _continuousDistributions) - { - dist.RandomSource = new SystemRandomSource(1, false); - var samples = new double[NumberOfTestSamples]; - for (var i = 0; i < NumberOfTestSamples; i++) - { - samples[i] = dist.Sample(); - } - ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist); - } + distribution.RandomSource = new SystemRandomSource(1, false); + var samples = new double[NumberOfTestSamples]; + distribution.Samples(samples); + ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution); } - [Test, Category("LongRunning")] - public void ContinuousSampleSequenceIsDistributedCorrectly() + [Test, Category("LongRunning"), TestCaseSource(nameof(ContinuousDistributions))] + public void SampleSequenceIsDistributedCorrectlyContinuous(IContinuousDistribution distribution) { - foreach (var dist in _continuousDistributions) - { - dist.RandomSource = new SystemRandomSource(1, false); - var samples = dist.Samples().Take(NumberOfTestSamples).ToArray(); - ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, dist); - } + distribution.RandomSource = new SystemRandomSource(1, false); + var samples = distribution.Samples().Take(NumberOfTestSamples).ToArray(); + ContinuousVapnikChervonenkisTest(ErrorTolerance, ErrorProbability, samples, distribution); } ///