public void ConstructorTest2()
{
double[] ranks = { 1, 2, 3, 4, 5.5, 5.5, 7, 8, 9, 10, 11, 12 };
var W = new WilcoxonDistribution(ranks, forceExact: true);
double mean = W.Mean; // 39
double median = W.Median; // 39
double var = W.Variance; // 162.5
double cdf = W.DistributionFunction(w: 42); // 0.582763671875
double pdf = W.ProbabilityDensityFunction(w: 42); // 0.014404296875
double lpdf = W.LogProbabilityDensityFunction(w: 42); // -4.2402287228136233
double ccdf = W.ComplementaryDistributionFunction(x: 42); // 0.417236328125
double icdf = W.InverseDistributionFunction(p: cdf); // 41.965447500067114
double icdf2 = W.InverseDistributionFunction(p: 0.5); // 39.000000487005138
double hf = W.HazardFunction(x: 42); // 0.03452311293153891
double chf = W.CumulativeHazardFunction(x: 42); // 0.87410248360375287
string str = W.ToString(); // "W+(x; R)"
Assert.AreEqual(39.0, mean);
Assert.AreEqual(39.0, median, 1e-6);
Assert.AreEqual(162.5, var);
Assert.AreEqual(0.87410248360375287, chf);
Assert.AreEqual(0.582763671875, cdf);
Assert.AreEqual(0.014404296875, pdf);
Assert.AreEqual(-4.2402287228136233, lpdf);
Assert.AreEqual(0.03452311293153891, hf);
Assert.AreEqual(0.417236328125, ccdf);
Assert.AreEqual(42, icdf, 0.05);
Assert.AreEqual("W+(x; R)", str);
var range1 = W.GetRange(0.95);
var range2 = W.GetRange(0.99);
var range3 = W.GetRange(0.01);
Assert.AreEqual(17.999999736111114, range1.Min);
Assert.AreEqual(60.000000315408002, range1.Max);
Assert.AreEqual(10.000000351098127, range2.Min);
Assert.AreEqual(67.99999981945885, range2.Max);
Assert.AreEqual(10.000000351098119, range3.Min);
Assert.AreEqual(67.99999981945885, range3.Max);
}