public void ConstructorTest() { var fn = new FoldedNormalDistribution(mean: 4, stdDev: 4.2); double mean = fn.Mean; // 4.765653108337438 double median = fn.Median; // 4.259356588022813 double mode = fn.Mode; // 2.0806531871308014 double var = fn.Variance; // 10.928550450993715 double cdf = fn.DistributionFunction(x: 1.4); // 0.16867109769018807 double pdf = fn.ProbabilityDensityFunction(x: 1.4); // 0.11998602818182187 double lpdf = fn.LogProbabilityDensityFunction(x: 1.4); // -2.1203799747969523 double ccdf = fn.ComplementaryDistributionFunction(x: 1.4); // 0.83132890230981193 double icdf = fn.InverseDistributionFunction(p: cdf); // 1.4 double hf = fn.HazardFunction(x: 1.4); // 0.14433039420191671 double chf = fn.CumulativeHazardFunction(x: 1.4); // 0.18472977144474392 string str = fn.ToString(CultureInfo.InvariantCulture); // FN(x; μ = 4, σ² = 17.64) // Tested against GNU R's VGAM package // // dfnorm(1.4, mean= 4, sd= 4.2) // [1] 0.11998602818182191321 // // pfnorm(1.4, mean= 4, sd= 4.2) // [1] 0.16867109769018800991 // Assert.AreEqual(4.765653108337438, mean); Assert.AreEqual(4.2593565884089237, median); Assert.AreEqual(2.0806531871308014, mode); Assert.AreEqual(10.928550450993715, var); Assert.AreEqual(0.18472977144474392, chf); Assert.AreEqual(0.16867109769018800991, cdf, 1e-10); // from R Assert.AreEqual(0.11998602818182191321, pdf, 1e-10); // from R Assert.AreEqual(-2.1203799747969523, lpdf); Assert.AreEqual(0.14433039420191671, hf); Assert.AreEqual(0.83132890230981193, ccdf); Assert.AreEqual(1.4, icdf, 1e-8); Assert.AreEqual("FN(x; μ = 4, σ² = 17.64)", str); var range1 = fn.GetRange(0.95); Assert.AreEqual(0.41428977779338388, range1.Min); Assert.AreEqual(10.916197224646602, range1.Max); var range2 = fn.GetRange(0.99); Assert.AreEqual(0.082845881461525633, range2.Min); Assert.AreEqual(13.77249095493084, range2.Max); var range3 = fn.GetRange(0.01); Assert.AreEqual(0.082845881461525495, range3.Min); Assert.AreEqual(13.77249095493084, range3.Max); }