public void NoncentralBetaMeanTest()
{
// Create a 4-parameter Beta distribution with the following parameters (α, β, a, b):
var beta = new GeneralizedBetaDistribution(alpha: 1.42, beta: 1.57, min: 1, max: 4.2);
double mean = beta.Mean; // 2.5197324414715716
double median = beta.Median; // 2.4997705845160225
double var = beta.Variance; // 0.19999664152943961
double mode = beta.Mode; // 2.3575757575757574
double h = beta.Entropy; // -0.050654548091478513
double cdf = beta.DistributionFunction(x: 2.27); // 0.40828630817664596
double pdf = beta.ProbabilityDensityFunction(x: 2.27); // 1.2766172921464953
double lpdf = beta.LogProbabilityDensityFunction(x: 2.27); // 0.2442138392176838
double chf = beta.CumulativeHazardFunction(x: 2.27); // 0.5247323897609667
double hf = beta.HazardFunction(x: 2.27); // 2.1574915534109484
double ccdf = beta.ComplementaryDistributionFunction(x: 2.27); // 0.59171369182335409
double icdf = beta.InverseDistributionFunction(p: cdf); // 2.27
string str = beta.ToString(System.Globalization.CultureInfo.InvariantCulture); // "B(x; α = 1.42, β = 1.57, min = 1, max = 4.2)"
Assert.AreEqual(2.5197324414715716, mean);
Assert.AreEqual(2.4997705845160225, median);
Assert.AreEqual(2.3575757575757574, mode);
Assert.AreEqual(-0.050654548091478513, h);
Assert.AreEqual(0.19999664152943961, var);
Assert.AreEqual(0.5247323897609667, chf);
Assert.AreEqual(0.40828630817664596, cdf);
Assert.AreEqual(1.2766172921464953, pdf);
Assert.AreEqual(0.2442138392176838, lpdf);
Assert.AreEqual(2.1574915534109484, hf);
Assert.AreEqual(0.59171369182335409, ccdf);
Assert.AreEqual(2.27, icdf, 1e-10);
Assert.AreEqual("B(x; α = 1.42, β = 1.57, min = 1, max = 4.2)", str);
Assert.IsFalse(Double.IsNaN(median));
var range1 = beta.GetRange(0.95);
var range2 = beta.GetRange(0.99);
var range3 = beta.GetRange(0.01);
Assert.AreEqual(1.2650560572620337, range1.Min);
Assert.AreEqual(3.8411806104750186, range1.Max);
Assert.AreEqual(1.0841613594568846, range2.Min);
Assert.AreEqual(4.0728683052205534, range2.Max);
Assert.AreEqual(1.0841613594568846, range3.Min);
Assert.AreEqual(4.0728683052205534, range3.Max);
}