private static void testVonMises(GeneralContinuousDistribution vonMises, double prec)
{
double mean = vonMises.Mean; // 0.42
double median = vonMises.Median; // 0.42
double var = vonMises.Variance; // 0.48721760532782921
double cdf = vonMises.DistributionFunction(x: 1.4); // 0.81326928491589345
double pdf = vonMises.ProbabilityDensityFunction(x: 1.4); // 0.2228112141141676
double lpdf = vonMises.LogProbabilityDensityFunction(x: 1.4); // -1.5014304395467863
double ccdf = vonMises.ComplementaryDistributionFunction(x: 1.4); // 0.18673071508410655
double icdf = vonMises.InverseDistributionFunction(p: cdf); // 1.3999999637927665
double hf = vonMises.HazardFunction(x: 1.4); // 1.1932220899695576
double chf = vonMises.CumulativeHazardFunction(x: 1.4); // 1.6780877262500649
double imedian = vonMises.InverseDistributionFunction(p: 0.5);
Assert.AreEqual(0.42, mean, 1e-8 * prec);
Assert.AreEqual(0.42, median, 1e-8 * prec);
Assert.AreEqual(0.42000000260613551, imedian, 1e-8 * prec);
// TODO: Von Mises variance doesn't match.
// Assert.AreEqual(0.48721760532782921, var);
Assert.AreEqual(1.6780877262500649, chf, 1e-7 * prec);
Assert.AreEqual(0.81326928491589345, cdf, 1e-7 * prec);
Assert.AreEqual(0.2228112141141676, pdf, 1e-8 * prec);
Assert.AreEqual(-1.5014304395467863, lpdf, 1e-6 * prec);
Assert.AreEqual(1.1932220899695576, hf, 1e-6 * prec);
Assert.AreEqual(0.18673071508410655, ccdf, 1e-8 * prec);
Assert.AreEqual(1.39999999999, icdf, 1e-8 * prec);
}