Наследование: UnivariateContinuousDistribution, IFormattable
        public void ConstructorTest()
        {
            var ks = new KolmogorovSmirnovDistribution(samples: 42);

            double mean = ks.Mean;     // 0.13404812830261556
            double median = ks.Median;   // 0.12393613519421857
            double var = ks.Variance; // 0.019154717445778062

            double cdf = ks.DistributionFunction(x: 0.27); // 0.99659863602996079

            double ccdf = ks.ComplementaryDistributionFunction(x: 0.27); // 0.0034013639700392062
            double icdf = ks.InverseDistributionFunction(p: cdf); // 0.26999997446092017

            double chf = ks.CumulativeHazardFunction(x: 0.27); // 5.6835787601476619

            string str = ks.ToString(); // "KS(x; n = 42)"

            Assert.AreEqual(0.13404812830261556, mean);
            Assert.AreEqual(0.12393613519421857, median, 1e-6);
            Assert.AreEqual(0.019154717445778062, var);
            Assert.AreEqual(5.6835787601476619, chf);
            Assert.AreEqual(0.99659863602996079, cdf);
            Assert.AreEqual(0.0034013639700392062, ccdf);
            Assert.AreEqual(0.27, icdf, 1e-6);
            Assert.AreEqual("KS(x; n = 42)", str);
        }
        public void ConstructorTest()
        {
            var ks = new KolmogorovSmirnovDistribution(samples: 42);

            double mean = ks.Mean;     // 0.13404812830261556
            double median = ks.Median;   // 0.12393613519421857
            double var = ks.Variance; // 0.019154717445778062

            try { double mode = ks.Mode; Assert.Fail(); }
            catch { }

            double cdf = ks.DistributionFunction(x: 0.27); // 0.99659863602996079

            double ccdf = ks.ComplementaryDistributionFunction(x: 0.27); // 0.0034013639700392062
            double icdf = ks.InverseDistributionFunction(p: cdf); // 0.26999997446092017

            double chf = ks.CumulativeHazardFunction(x: 0.27); // 5.6835787601476619

            string str = ks.ToString(); // "KS(x; n = 42)"

            Assert.AreEqual(0.13404812830261556, mean);
            Assert.AreEqual(0.12393613519421857, median, 1e-6);
            Assert.AreEqual(0.019154717445778062, var);
            Assert.AreEqual(5.6835787601476619, chf);
            Assert.AreEqual(0.99659863602996079, cdf);
            Assert.AreEqual(0.0034013639700392062, ccdf);
            Assert.AreEqual(0.27, icdf, 1e-6);
            Assert.AreEqual("KS(x; n = 42)", str);

            var range1 = ks.GetRange(0.95);
            var range2 = ks.GetRange(0.99);
            var range3 = ks.GetRange(0.01);

            Assert.AreEqual(0.076658557134805502, range1.Min);
            Assert.AreEqual(0.20517007413251875, range1.Max);
            Assert.AreEqual(0.064613698945741663, range2.Min);
            Assert.AreEqual(0.24612731591151149, range2.Max);
            Assert.AreEqual(0.064613698945741649, range3.Min);
            Assert.AreEqual(0.24612731591151149, range3.Max);
        }
        public void MedianTest()
        {
            var target = new KolmogorovSmirnovDistribution(7);

            Assert.AreEqual(target.Median, target.InverseDistributionFunction(0.5));
        }
        public void NaN_Test()
        {
            var ks = new KolmogorovSmirnovDistribution(samples: 42);

            double nan = double.NaN;

            try
            {
                ks.DistributionFunction(x: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }

            try
            {
                ks.ComplementaryDistributionFunction(x: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }

            try
            {
                ks.InverseDistributionFunction(p: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }
            try
            {
                ks.CumulativeHazardFunction(x: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }

        }