public void ConstructorTest()
{
// Create a new Poisson distribution with
var dist = new PoissonDistribution(lambda: 4.2);
// Common measures
double mean = dist.Mean; // 4.2
double median = dist.Median; // 4.0
double var = dist.Variance; // 4.2
// Cumulative distribution functions
double cdf1 = dist.DistributionFunction(k: 2); // 0.21023798702309743
double cdf2 = dist.DistributionFunction(k: 4); // 0.58982702131057763
double cdf3 = dist.DistributionFunction(k: 7); // 0.93605666027257894
double ccdf = dist.ComplementaryDistributionFunction(k: 2); // 0.78976201297690252
// Probability mass functions
double pmf1 = dist.ProbabilityMassFunction(k: 4); // 0.19442365170822165
double pmf2 = dist.ProbabilityMassFunction(k: 5); // 0.1633158674349062
double pmf3 = dist.ProbabilityMassFunction(k: 6); // 0.11432110720443435
double lpmf = dist.LogProbabilityMassFunction(k: 2); // -2.0229781299813
// Quantile function
int icdf1 = dist.InverseDistributionFunction(p: cdf1); // 2
int icdf2 = dist.InverseDistributionFunction(p: cdf2); // 4
int icdf3 = dist.InverseDistributionFunction(p: cdf3); // 7
// Hazard (failure rate) functions
double hf = dist.HazardFunction(x: 4); // 0.47400404660843515
double chf = dist.CumulativeHazardFunction(x: 4); // 0.89117630901575073
// String representation
string str = dist.ToString(CultureInfo.InvariantCulture); // "Poisson(x; λ = 4.2)"
// Median bounds
// (http://en.wikipedia.org/wiki/Poisson_distribution#Median)
double max = 4.2 + 1 / 3.0;
double min = 4.2 - System.Math.Log(2);
Assert.IsTrue(median < max);
Assert.IsTrue(min <= median);
Assert.AreEqual(4.2, mean);
Assert.AreEqual(4.0, median);
Assert.AreEqual(4.2, var);
Assert.AreEqual(0.89117630901575073, chf, 1e-10);
Assert.AreEqual(0.21023798702309743, cdf1);
Assert.AreEqual(0.58982702131057763, cdf2);
Assert.AreEqual(0.93605666027257894, cdf3);
Assert.AreEqual(0.19442365170822165, pmf1);
Assert.AreEqual(0.1633158674349062, pmf2);
Assert.AreEqual(0.11432110720443435, pmf3);
Assert.AreEqual(-2.0229781299813, lpmf);
Assert.AreEqual(0.47400404660843515, hf);
Assert.AreEqual(0.89117630901575073, chf);
Assert.AreEqual(0.78976201297690252, ccdf);
Assert.AreEqual(2, icdf1);
Assert.AreEqual(4, icdf2);
Assert.AreEqual(7, icdf3);
Assert.AreEqual("Poisson(x; λ = 4.2)", str);
var range1 = dist.GetRange(0.95);
var range2 = dist.GetRange(0.99);
var range3 = dist.GetRange(0.01);
Assert.AreEqual(1, range1.Min);
Assert.AreEqual(8, range1.Max);
Assert.AreEqual(0, range2.Min);
Assert.AreEqual(10, range2.Max);
Assert.AreEqual(0, range3.Min);
Assert.AreEqual(10, range3.Max);
}