public void ConstructorTest()
{
var bin = new BinomialDistribution(trials: 16, probability: 0.12);
double mean = bin.Mean; // 1.92
double median = bin.Median; // 2
double var = bin.Variance; // 1.6896
double mode = bin.Mode; // 2
double cdf = bin.DistributionFunction(k: 0); // 0.12933699143209909
double pdf = bin.ProbabilityMassFunction(k: 1); // 0.28218979948821621
double lpdf = bin.LogProbabilityMassFunction(k: 0); // -2.0453339441581582
double ccdf = bin.ComplementaryDistributionFunction(k: 0); // 0.87066300856790091
int icdf0 = bin.InverseDistributionFunction(p: 0.37); // 1
int icdf1 = bin.InverseDistributionFunction(p: 0.50); // 2
int icdf2 = bin.InverseDistributionFunction(p: 0.99); // 5
int icdf3 = bin.InverseDistributionFunction(p: 0.999); // 7
double hf = bin.HazardFunction(x: 0); // 1.3809523809523814
double chf = bin.CumulativeHazardFunction(x: 0); // 0.86750056770472328
string str = bin.ToString(CultureInfo.InvariantCulture); // "Binomial(x; n = 16, p = 0.12)"
double[] probabilities = new double[10];
for (int i = 0; i < probabilities.Length; i++)
probabilities[i] = bin.ProbabilityMassFunction(i);
Assert.AreEqual(1.92, mean);
Assert.AreEqual(2, median);
Assert.AreEqual(2, mode);
Assert.AreEqual(1.6896, var);
Assert.AreEqual(0.13850027875444251, chf, 1e-10);
Assert.AreEqual(0.12933699143209909, cdf, 1e-10);
Assert.AreEqual(0.28218979948821621, pdf, 1e-10);
Assert.AreEqual(-2.0453339441581582, lpdf);
Assert.AreEqual(0.14855000173354949, hf, 1e-10);
Assert.AreEqual(0.87066300856790091, ccdf, 1e-10);
Assert.AreEqual(1, icdf0);
Assert.AreEqual(2, icdf1);
Assert.AreEqual(5, icdf2);
Assert.AreEqual(7, icdf3);
Assert.AreEqual("Binomial(x; n = 16, p = 0.12)", str);
var range1 = bin.GetRange(0.95);
var range2 = bin.GetRange(0.99);
var range3 = bin.GetRange(0.01);
Assert.AreEqual(0.0, range1.Min);
Assert.AreEqual(4.0, range1.Max);
Assert.AreEqual(0.0, range2.Min);
Assert.AreEqual(5.0, range2.Max);
Assert.AreEqual(0.0, range3.Min);
Assert.AreEqual(5.0, range3.Max);
}