public void TestStatistics() { Simulation.NumberOfSamples = 100000; var distr = new ContinuousUniformDistribution(1, 12345); Assert.AreEqual(Statistics.Mean(distr.GetResult()), distr.Mean); Assert.AreEqual(Statistics.Median(distr.GetResult()), distr.Median); Assert.AreEqual(Statistics.StandardDeviation(distr.GetResult()), distr.StandardDeviation); Assert.AreEqual(Statistics.Variance(distr.GetResult()), distr.Variance); Assert.AreEqual(Statistics.Minimum(distr.GetResult()), distr.Minimum); Assert.AreEqual(Statistics.Maximum(distr.GetResult()), distr.Maximum); Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 0), distr.Percentile(0)); Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 5), distr.Percentile(5)); Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 50), distr.Percentile(50)); Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 95), distr.Percentile(95)); Assert.AreEqual(Statistics.Percentile(distr.GetResult(), 100), distr.Percentile(100)); var histogram = new Histogram(distr.GetResult(), 100); for (int i = 0; i < histogram.BucketCount; i++) { Assert.AreEqual(histogram[i].LowerBound, distr.Histogram[i].LowerBound); Assert.AreEqual(histogram[i].UpperBound, distr.Histogram[i].UpperBound); } }
public void Distribution_Resample() { Simulation.NumberOfSamples = 100000; var testInfo = ExpectedResults.Data["DistributionResults"]["ContinuousUniformDistribution"]; var inputs = testInfo["ConstructorInputs"]; ContinuousUniformDistribution distr = new ContinuousUniformDistribution( inputs["min"].Value <double>(), inputs["max"].Value <double>(), inputs["randomSeed"].Value <int>()); var resampledDist = distr.Resample(); Assert.AreEqual(distr.Maximum, resampledDist.Maximum); Assert.AreEqual(distr.Minimum, resampledDist.Minimum); Assert.AreEqual(distr.Mean, resampledDist.Mean, 10); Assert.AreEqual(distr.Median, resampledDist.Median); Assert.AreEqual(distr.StandardDeviation, resampledDist.StandardDeviation, 10); Assert.AreEqual(distr.Variance, resampledDist.Variance, 10); Assert.AreEqual(distr.ConstrainedToInt, resampledDist.ConstrainedToInt); Assert.IsTrue( distr.GetResult()[0] != resampledDist.GetResult()[0] || distr.GetResult()[1] != resampledDist.GetResult()[1] || distr.GetResult()[2] != resampledDist.GetResult()[2] || distr.GetResult()[3] != resampledDist.GetResult()[3] || distr.GetResult()[4] != resampledDist.GetResult()[4]); Assert.AreEqual(distr.Percentile(0), resampledDist.Percentile(0)); Assert.AreEqual(distr.Percentile(25), resampledDist.Percentile(25)); Assert.AreEqual(distr.Percentile(50), resampledDist.Percentile(50)); Assert.AreEqual(distr.Percentile(75), resampledDist.Percentile(75)); Assert.AreEqual(distr.Percentile(100), resampledDist.Percentile(100)); // Force recalculation by changing seed on original distribution distr.RandomSeed = distr.RandomSeed + 1; Assert.AreEqual(distr.Maximum, resampledDist.Maximum); Assert.AreEqual(distr.Minimum, resampledDist.Minimum); Assert.AreEqual(distr.Mean, resampledDist.Mean, 10); Assert.AreEqual(distr.Median, resampledDist.Median); Assert.AreEqual(distr.StandardDeviation, resampledDist.StandardDeviation, 10); Assert.AreEqual(distr.Variance, resampledDist.Variance, 10); }