diff --git a/Config/SettingsAbstract.php b/Config/SettingsAbstract.php index d05f7da53..745ead076 100644 --- a/Config/SettingsAbstract.php +++ b/Config/SettingsAbstract.php @@ -14,7 +14,6 @@ declare(strict_types=1); namespace phpOMS\Config; -use phpOMS\DataStorage\Database\DatabaseExceptionFactory; use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Cache\CachePool; use phpOMS\DataStorage\Database\Connection\ConnectionAbstract; @@ -117,10 +116,7 @@ abstract class SettingsAbstract implements OptionsInterface return \count($options) > 1 ? $options : \reset($options); } catch (\PDOException $e) { // @codeCoverageIgnoreStart - $exception = DatabaseExceptionFactory::createException($e); - $message = DatabaseExceptionFactory::createExceptionMessage($e); - - throw new $exception($message); + echo $e->getMessage(); // @codeCoverageIgnoreEnd } } diff --git a/DataStorage/Database/DatabaseExceptionFactory.php b/DataStorage/Database/DatabaseExceptionFactory.php deleted file mode 100644 index 64ffaf630..000000000 --- a/DataStorage/Database/DatabaseExceptionFactory.php +++ /dev/null @@ -1,66 +0,0 @@ -getCode()) { - case '42S02': - return '\phpOMS\DataStorage\Database\Schema\Exception\TableException'; - default: - return '\PDOException'; - } - } - - /** - * Create exception message based on exception. - * - * @param \PDOException $e Exception - * - * @return string Returns exception pessage - * - * @since 1.0.0 - */ - public static function createExceptionMessage(\PDOException $e) : string - { - switch ($e->getCode()) { - case '42S02': - return TableException::findTable($e->getMessage()); - default: - return $e->getMessage(); - } - } -} diff --git a/DataStorage/Database/Schema/Exception/TableException.php b/DataStorage/Database/Schema/Exception/TableException.php deleted file mode 100644 index ed93b218f..000000000 --- a/DataStorage/Database/Schema/Exception/TableException.php +++ /dev/null @@ -1,68 +0,0 @@ - 1 ? $alpha * $xm / ($alpha - 1) : \PHP_FLOAT_MAX; + } + /** * Get median * @@ -96,11 +111,22 @@ class ParetoDistribution */ public static function getVariance(float $xm, float $alpha) : float { - if ($alpha < 2) { - return \PHP_FLOAT_MAX; - } + return $alpha < 3 ? \PHP_FLOAT_MAX : $xm ** 2 * $alpha / (($alpha - 1) ** 2 * ($alpha - 2)); + } - return $xm ** 2 * $alpha / (($alpha - 1) ** 2 * ($alpha - 2)); + /** + * Get standard deviation + * + * @param float $xm Lower bound + * @param float $alpha Alpha shape + * + * @return float + * + * @since 1.0.0 + */ + public static function getStandardDeviation(float $xm, float $alpha) : float + { + return \sqrt(self::getVariance($xm, $alpha)); } /** @@ -114,11 +140,7 @@ class ParetoDistribution */ public static function getSkewness(float $alpha) : float { - if ($alpha < 4) { - return 0.0; - } - - return 2 * (1 + $alpha) / ($alpha - 3) * \sqrt(($alpha - 2) / $alpha); + return $alpha < 4 ? 0.0 : 2 * (1 + $alpha) / ($alpha - 3) * \sqrt(($alpha - 2) / $alpha); } /** diff --git a/Math/Stochastic/Distribution/PoissonDistribution.php b/Math/Stochastic/Distribution/PoissonDistribution.php index a452d43a4..4e87be2bc 100644 --- a/Math/Stochastic/Distribution/PoissonDistribution.php +++ b/Math/Stochastic/Distribution/PoissonDistribution.php @@ -121,6 +121,20 @@ class PoissonDistribution return $lambda; } + /** + * Get standard deviation. + * + * @param float $lambda Lambda + * + * @return float + * + * @since 1.0.0 + */ + public static function getStandardDeviation(float $lambda) : float + { + return \sqrt($lambda); + } + /** * Get moment generating function. * diff --git a/Math/Stochastic/Distribution/TDistribution.php b/Math/Stochastic/Distribution/TDistribution.php index 454c5c47d..d2f77d345 100644 --- a/Math/Stochastic/Distribution/TDistribution.php +++ b/Math/Stochastic/Distribution/TDistribution.php @@ -27,7 +27,7 @@ class TDistribution /** * Get expected value. * - * @return float + * @return int * * @since 1.0.0 */ @@ -83,10 +83,34 @@ class TDistribution */ public static function getVariance(int $nu) : float { - if ($nu < 2) { - return \PHP_FLOAT_MAX; - } + return $nu < 3 ? \PHP_FLOAT_MAX : $nu / ($nu - 2); + } - return $nu / ($nu - 2); + /** + * Get standard deviation. + * + * @param int $nu Degrees of freedom + * + * @return float + * + * @since 1.0.0 + */ + public static function getStandardDeviation(int $nu) : float + { + return $nu < 3 ? \PHP_FLOAT_MAX : \sqrt(self::getVariance($nu)); + } + + /** + * Get Ex. kurtosis. + * + * @param float $nu Degrees of freedom + * + * @return float + * + * @since 1.0.0 + */ + public static function getExKurtosis(float $nu) : float + { + return $nu < 5 && $nu > 2 ? \PHP_FLOAT_MAX : 6 / ($nu - 4); } } diff --git a/Math/Stochastic/Distribution/UniformDistributionContinuous.php b/Math/Stochastic/Distribution/UniformDistributionContinuous.php index 4b0c96333..11a268c1d 100644 --- a/Math/Stochastic/Distribution/UniformDistributionContinuous.php +++ b/Math/Stochastic/Distribution/UniformDistributionContinuous.php @@ -162,4 +162,19 @@ class UniformDistributionContinuous { return 1 / 12 * ($b - $a) ** 2; } + + /** + * Get standard deviation. + * + * @param float $a Value a + * @param float $b Value b + * + * @return float + * + * @since 1.0.0 + */ + public static function getStandardDeviation(float $a, float $b) : float + { + return \sqrt(self::getVariance($a, $b)); + } } diff --git a/Math/Stochastic/Distribution/UniformDistributionDiscrete.php b/Math/Stochastic/Distribution/UniformDistributionDiscrete.php index 434ef9a0d..4496327cb 100644 --- a/Math/Stochastic/Distribution/UniformDistributionDiscrete.php +++ b/Math/Stochastic/Distribution/UniformDistributionDiscrete.php @@ -151,4 +151,19 @@ class UniformDistributionDiscrete { return (($b - $a + 1) ** 2 - 1) / 12; } + + /** + * Get standard deviation. + * + * @param float $a Value a + * @param float $b Value b + * + * @return float + * + * @since 1.0.0 + */ + public static function getStandardDeviation(float $a, float $b) : float + { + return \sqrt(self::getVariance($a, $b)); + } } diff --git a/Math/Stochastic/Distribution/WeibullDistribution.php b/Math/Stochastic/Distribution/WeibullDistribution.php index 9b5d82422..84f6e8a32 100644 --- a/Math/Stochastic/Distribution/WeibullDistribution.php +++ b/Math/Stochastic/Distribution/WeibullDistribution.php @@ -36,11 +36,7 @@ class WeibullDistribution */ public static function getPdf(float $x, float $lambda, float $k) : float { - if ($x < 0) { - return 0.0; - } - - return $k / $lambda * \pow($x / $lambda, $k - 1) * \exp(-($x / $lambda) ** $k); + return $x < 0.0 ? 0.0 : $k / $lambda * \pow($x / $lambda, $k - 1) * \exp(-($x / $lambda) ** $k); } /** @@ -56,11 +52,7 @@ class WeibullDistribution */ public static function getCdf(float $x, float $lambda, float $k) : float { - if ($x < 0) { - return 0.0; - } - - return 1 - \exp(-($x / $lambda) ** $k); + return $x < 0.0 ? 0.0 : 1 - \exp(-($x / $lambda) ** $k); } /** diff --git a/tests/DataStorage/Database/DatabaseExceptionFactoryTest.php b/tests/DataStorage/Database/DatabaseExceptionFactoryTest.php deleted file mode 100644 index fb97394c5..000000000 --- a/tests/DataStorage/Database/DatabaseExceptionFactoryTest.php +++ /dev/null @@ -1,33 +0,0 @@ -get())); } } diff --git a/tests/DataStorage/Database/Schema/Exception/TableExceptionTest.php b/tests/DataStorage/Database/Schema/Exception/TableExceptionTest.php deleted file mode 100644 index c20d6ebf5..000000000 --- a/tests/DataStorage/Database/Schema/Exception/TableExceptionTest.php +++ /dev/null @@ -1,26 +0,0 @@ -C->upperTriangular()->getMatrix()); + self::markTestIncomplete(); //self::assertEquals([], $this->C->lowerTriangular()->getMatrix()); //self::assertEquals([], $this->C->diagonalize()->getMatrix()); } diff --git a/tests/Math/Stochastic/Distribution/BernoulliDistributionTest.php b/tests/Math/Stochastic/Distribution/BernoulliDistributionTest.php index 51f5a6edf..90ca38dfc 100644 --- a/tests/Math/Stochastic/Distribution/BernoulliDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/BernoulliDistributionTest.php @@ -61,6 +61,14 @@ class BernoulliDistributionTest extends \PHPUnit\Framework\TestCase self::assertEqualsWithDelta($p * $q, BernoulliDistribution::getVariance($p), 0.01); } + public function testStandardDeviation() : void + { + $p = 0.3; + $q = 1 - $p; + + self::assertEqualsWithDelta(\sqrt($p * $q), BernoulliDistribution::getStandardDeviation($p), 0.01); + } + public function testSkewness() : void { $p = 0.3; diff --git a/tests/Math/Stochastic/Distribution/BetaDistributionTest.php b/tests/Math/Stochastic/Distribution/BetaDistributionTest.php index d16c074eb..63e40850f 100644 --- a/tests/Math/Stochastic/Distribution/BetaDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/BetaDistributionTest.php @@ -14,13 +14,45 @@ declare(strict_types=1); namespace phpOMS\tests\Math\Stochastic\Distribution; +use phpOMS\Math\Stochastic\Distribution\BetaDistribution; + /** * @internal */ class BetaDistributionTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testMean() : void { - self::markTestIncomplete(); + self::assertEquals(1 / 2, BetaDistribution::getMean(2.0, 2.0)); + } + + public function testMode() : void + { + self::assertEquals(1 / 2, BetaDistribution::getMode(2.0, 2.0)); + self::assertEqualsWithDelta(0.2, BetaDistribution::getMode(2.0, 5.0), 0.1); + self::assertEquals(0.0, BetaDistribution::getMode(1.0, 2.0)); + self::assertEquals(1.0, BetaDistribution::getMode(1.0, 1.0)); + } + + public function testVariance() : void + { + self::assertEqualsWithDelta(1 / 20, BetaDistribution::getVariance(2.0, 2.0), 0.001); + } + + public function testStandardDeviation() : void + { + self::assertEqualsWithDelta(\sqrt(1 / 20), BetaDistribution::getStandardDeviation(2.0, 2.0), 0.001); + } + + public function testSkewness() : void + { + self::assertEqualsWithDelta(0, BetaDistribution::getSkewness(2.0, 2.0), 0.001); + self::assertEqualsWithDelta(0.565685, BetaDistribution::getSkewness(1.0, 2.0), 0.001); + self::assertEqualsWithDelta(-0.565685, BetaDistribution::getSkewness(2.0, 1.0), 0.001); + } + + public function testExKurtosis() : void + { + self::assertEqualsWithDelta(-6 / 7, BetaDistribution::getExKurtosis(2.0, 2.0), 0.001); } } diff --git a/tests/Math/Stochastic/Distribution/BinomialDistributionTest.php b/tests/Math/Stochastic/Distribution/BinomialDistributionTest.php index e3ab6cc54..a60629372 100644 --- a/tests/Math/Stochastic/Distribution/BinomialDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/BinomialDistributionTest.php @@ -71,6 +71,14 @@ class BinomialDistributionTest extends \PHPUnit\Framework\TestCase self::assertEqualsWithDelta($n * $p * (1 - $p), BinomialDistribution::getVariance($n, $p), 0.01); } + public function testStandardDeviation() : void + { + $n = 20; + $p = 0.4; + + self::assertEqualsWithDelta(\sqrt($n * $p * (1 - $p)), BinomialDistribution::getStandardDeviation($n, $p), 0.01); + } + public function testSkewness() : void { $n = 20; diff --git a/tests/Math/Stochastic/Distribution/ChiSquaredDistributionTest.php b/tests/Math/Stochastic/Distribution/ChiSquaredDistributionTest.php index 428c168b4..2c384e988 100644 --- a/tests/Math/Stochastic/Distribution/ChiSquaredDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/ChiSquaredDistributionTest.php @@ -67,6 +67,13 @@ class ChiSquaredDistributionTest extends \PHPUnit\Framework\TestCase self::assertEquals(2 * $df, ChiSquaredDistribution::getVariance($df)); } + public function testStandardDeviation() : void + { + $df = 5; + + self::assertEquals(\sqrt(2 * $df), ChiSquaredDistribution::getStandardDeviation($df)); + } + public function testMedian() : void { $df = 5; diff --git a/tests/Math/Stochastic/Distribution/ExponentialDistributionTest.php b/tests/Math/Stochastic/Distribution/ExponentialDistributionTest.php index e80a5ce5d..7c27315a4 100644 --- a/tests/Math/Stochastic/Distribution/ExponentialDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/ExponentialDistributionTest.php @@ -65,6 +65,11 @@ class ExponentialDistributionTest extends \PHPUnit\Framework\TestCase self::assertEquals(1/(3 ** 2), ExponentialDistribution::getVariance(3)); } + public function testStandardDeviation() : void + { + self::assertEquals(\sqrt(1/(3 ** 2)), ExponentialDistribution::getStandardDeviation(3)); + } + public function testExKurtosis() : void { self::assertEquals(6, ExponentialDistribution::getExKurtosis()); diff --git a/tests/Math/Stochastic/Distribution/GammaDistributionTest.php b/tests/Math/Stochastic/Distribution/GammaDistributionTest.php index 7e0d21c1c..5d81acaee 100644 --- a/tests/Math/Stochastic/Distribution/GammaDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/GammaDistributionTest.php @@ -14,13 +14,41 @@ declare(strict_types=1); namespace phpOMS\tests\Math\Stochastic\Distribution; +use phpOMS\Math\Stochastic\Distribution\GammaDistribution; + /** * @internal */ class GammaDistributionTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testPDFIntegerK() : void { - self::markTestIncomplete(); + self::assertEqualsWithDelta(\exp(-1), GammaDistribution::getPdfIntegerK(1, 1, 1), 0.001); + self::assertEqualsWithDelta(3 * \exp(-3/4) / 16, GammaDistribution::getPdfIntegerK(3, 2, 4), 0.001); + } + + public function testMeanK() : void + { + self::assertEqualsWithDelta(8, GammaDistribution::getMeanK(2, 4), 0.001); + } + + public function testVarianceK() : void + { + self::assertEqualsWithDelta(32, GammaDistribution::getVarianceK(2, 4), 0.001); + } + + public function testStandardDeviationK() : void + { + self::assertEqualsWithDelta(\sqrt(32), GammaDistribution::getStandardDeviationK(2, 4), 0.001); + } + + public function testExKurtosis() : void + { + self::assertEqualsWithDelta(3, GammaDistribution::getExKurtosis(2, 4), 0.001); + } + + public function testSkewness() : void + { + self::assertEqualsWithDelta(\sqrt(2), GammaDistribution::getSkewness(2, 4), 0.001); } } diff --git a/tests/Math/Stochastic/Distribution/GeometricDistributionTest.php b/tests/Math/Stochastic/Distribution/GeometricDistributionTest.php index 6a2fee4cc..3e8b93b37 100644 --- a/tests/Math/Stochastic/Distribution/GeometricDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/GeometricDistributionTest.php @@ -56,6 +56,13 @@ class GeometricDistributionTest extends \PHPUnit\Framework\TestCase self::assertEquals((1 - $p) / $p ** 2, GeometricDistribution::getVariance($p)); } + public function testgetStandardDeviation() : void + { + $p = 0.3; + + self::assertEquals(\sqrt((1 - $p) / $p ** 2), GeometricDistribution::getStandardDeviation($p)); + } + public function testSkewness() : void { $p = 0.3; diff --git a/tests/Math/Stochastic/Distribution/HypergeometricDistributionTest.php b/tests/Math/Stochastic/Distribution/HypergeometricDistributionTest.php index 570be815b..325e97c50 100644 --- a/tests/Math/Stochastic/Distribution/HypergeometricDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/HypergeometricDistributionTest.php @@ -14,13 +14,35 @@ declare(strict_types=1); namespace phpOMS\tests\Math\Stochastic\Distribution; +use phpOMS\Math\Stochastic\Distribution\HypergeometricDistribution; + /** * @internal */ class HypergeometricDistributionTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testMean() : void { - self::markTestIncomplete(); + self::assertEquals(9, HypergeometricDistribution::getMean(15, 20, 12)); + } + + public function testVariance() : void + { + self::assertEqualsWithDelta(0.973328526784575 ** 2, HypergeometricDistribution::getVariance(15, 20, 12), 0.001); + } + + public function testStandardDeviation() : void + { + self::assertEqualsWithDelta(0.973328526784575, HypergeometricDistribution::getStandardDeviation(15, 20, 12), 0.001); + } + + public function testSkewness() : void + { + self::assertEqualsWithDelta(0.114156, HypergeometricDistribution::getSkewness(15, 20, 12), 0.001); + } + + public function testExKurtosis() : void + { + self::assertEqualsWithDelta(-0.247277, HypergeometricDistribution::getExKurtosis(15, 20, 12), 0.001); } } diff --git a/tests/Math/Stochastic/Distribution/LaplaceDistributionTest.php b/tests/Math/Stochastic/Distribution/LaplaceDistributionTest.php index f3bec8ba5..da7b6f704 100644 --- a/tests/Math/Stochastic/Distribution/LaplaceDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/LaplaceDistributionTest.php @@ -71,6 +71,13 @@ class LaplaceDistributionTest extends \PHPUnit\Framework\TestCase self::assertEquals(2 * $b ** 2, LaplaceDistribution::getVariance($b)); } + public function testStandardDeviation() : void + { + $b = 3; + + self::assertEquals(\sqrt(2 * $b ** 2), LaplaceDistribution::getStandardDeviation($b)); + } + public function testMgf() : void { $t = 2; diff --git a/tests/Math/Stochastic/Distribution/LogNormalDistributionTest.php b/tests/Math/Stochastic/Distribution/LogNormalDistributionTest.php index cb7983937..542186205 100644 --- a/tests/Math/Stochastic/Distribution/LogNormalDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/LogNormalDistributionTest.php @@ -14,13 +14,41 @@ declare(strict_types=1); namespace phpOMS\tests\Math\Stochastic\Distribution; +use phpOMS\Math\Stochastic\Distribution\LogNormalDistribution; + /** * @internal */ class LogNormalDistributionTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testPdf() : void { - self::markTestIncomplete(); + self::assertEqualsWithDelta(0.060069054, LogNormalDistribution::getPdf(3, 2, 2), 0.001); + } + + public function testMean() : void + { + self::assertEqualsWithDelta(\exp(13/2), LogNormalDistribution::getMean(2, 3), 0.001); + } + + public function testVariance() : void + { + self::assertEqualsWithDelta((\exp(9) - 1) * \exp(13), LogNormalDistribution::getVariance(2, 3), 0.001); + } + + public function testStandardDeviation() : void + { + self::assertEqualsWithDelta(\exp(13/2) * \sqrt(\exp(9) - 1), LogNormalDistribution::getStandardDeviation(2, 3), 0.001); + self::assertEqualsWithDelta(\sqrt((\exp(9) - 1) * \exp(13)), LogNormalDistribution::getStandardDeviation(2, 3), 0.001); + } + + public function testSkewness() : void + { + self::assertEqualsWithDelta(\sqrt(\exp(9) - 1) * (\exp(9) + 2), LogNormalDistribution::getSkewness(3), 0.001); + } + + public function testExKurtosis() : void + { + self::assertEqualsWithDelta(\exp(16) + 2 * \exp(12) + 3 * \exp(8) - 6, LogNormalDistribution::getExKurtosis(2), 0.001); } } diff --git a/tests/Math/Stochastic/Distribution/NormalDistributionTest.php b/tests/Math/Stochastic/Distribution/NormalDistributionTest.php index 8f41ed832..cc266b876 100644 --- a/tests/Math/Stochastic/Distribution/NormalDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/NormalDistributionTest.php @@ -76,4 +76,11 @@ class NormalDistributionTest extends \PHPUnit\Framework\TestCase self::assertEquals($sig ** 2, NormalDistribution::getVariance($sig)); } + + public function testStandardDeviation() : void + { + $sig = 0.8; + + self::assertEquals($sig, NormalDistribution::getStandardDeviation($sig)); + } } diff --git a/tests/Math/Stochastic/Distribution/ParetoDistributionTest.php b/tests/Math/Stochastic/Distribution/ParetoDistributionTest.php index 99d2323d3..a607fc5f8 100644 --- a/tests/Math/Stochastic/Distribution/ParetoDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/ParetoDistributionTest.php @@ -14,13 +14,49 @@ declare(strict_types=1); namespace phpOMS\tests\Math\Stochastic\Distribution; +use phpOMS\Math\Stochastic\Distribution\ParetoDistribution; + /** * @internal */ class ParetoDistributionTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testPdf() : void { - self::markTestIncomplete(); + self::assertEqualsWithDelta(0.263374485596, ParetoDistribution::getPdf(3, 2, 4), 0.001); + } + + public function testCdf() : void + { + self::assertEqualsWithDelta(0.8024691358, ParetoDistribution::getCdf(3, 2, 4), 0.001); + } + + public function testMean() : void + { + self::assertEqualsWithDelta(8 / 3, ParetoDistribution::getMean(2, 4), 0.001); + self::assertEquals(\PHP_FLOAT_MAX, ParetoDistribution::getMean(2, 1)); + } + + public function testVariance() : void + { + self::assertEqualsWithDelta(2, ParetoDistribution::getVariance(3, 4), 0.001); + self::assertEqualsWithDelta(\PHP_FLOAT_MAX, ParetoDistribution::getVariance(3, 2), 0.001); + } + + public function testStandardDeviation() : void + { + self::assertEqualsWithDelta(\sqrt(2), ParetoDistribution::getStandardDeviation(3, 4), 0.001); + } + + public function testExKurtosis() : void + { + self::assertEqualsWithDelta(35.666666666666664, ParetoDistribution::getExKurtosis(6, 5), 0.001); + self::assertEquals(0.0, ParetoDistribution::getExKurtosis(4)); + } + + public function testSkewness() : void + { + self::assertEqualsWithDelta(3.810317377662722, ParetoDistribution::getSkewness(6, 5), 0.001); + self::assertEquals(0.0, ParetoDistribution::getSkewness(3)); } } diff --git a/tests/Math/Stochastic/Distribution/PoissonDistributionTest.php b/tests/Math/Stochastic/Distribution/PoissonDistributionTest.php index 6addd2dd6..1ea07ba2f 100644 --- a/tests/Math/Stochastic/Distribution/PoissonDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/PoissonDistributionTest.php @@ -58,6 +58,13 @@ class PoissonDistributionTest extends \PHPUnit\Framework\TestCase self::assertEquals($l, PoissonDistribution::getVariance($l)); } + public function testStandardDeviation() : void + { + $l = 4.6; + + self::assertEquals(\sqrt($l), PoissonDistribution::getStandardDeviation($l)); + } + public function testSkewness() : void { $l = 4.6; diff --git a/tests/Math/Stochastic/Distribution/TDistributionTest.php b/tests/Math/Stochastic/Distribution/TDistributionTest.php index 7c1685ebf..19832ca9e 100644 --- a/tests/Math/Stochastic/Distribution/TDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/TDistributionTest.php @@ -14,13 +14,48 @@ declare(strict_types=1); namespace phpOMS\tests\Math\Stochastic\Distribution; +use phpOMS\Math\Stochastic\Distribution\TDistribution; + /** * @internal */ class TDistributionTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testMean() : void { - self::markTestIncomplete(); + self::assertEquals(0, TDistribution::getMean()); + } + + public function testMedian() : void + { + self::assertEquals(0, TDistribution::getMedian()); + } + + public function testMode() : void + { + self::assertEquals(0, TDistribution::getMode()); + } + + public function testVariance() : void + { + self::assertEqualsWithDelta(5/3, TDistribution::getVariance(5), 0.001); + self::assertEqualsWithDelta(\PHP_FLOAT_MAX, TDistribution::getVariance(2), 0.001); + } + + public function testStandardDeviation() : void + { + self::assertEqualsWithDelta(\sqrt(5/3), TDistribution::getStandardDeviation(5), 0.001); + self::assertEqualsWithDelta(\PHP_FLOAT_MAX, TDistribution::getStandardDeviation(2), 0.001); + } + + public function testExKurtosis() : void + { + self::assertEqualsWithDelta(6, TDistribution::getExKurtosis(5), 0.001); + self::assertEqualsWithDelta(\PHP_FLOAT_MAX, TDistribution::getExKurtosis(3), 0.001); + } + + public function testSkewness() : void + { + self::assertEquals(0, TDistribution::getSkewness()); } } diff --git a/tests/Math/Stochastic/Distribution/UniformDistributionContinuousTest.php b/tests/Math/Stochastic/Distribution/UniformDistributionContinuousTest.php index 08b4c1d83..3e208a1f0 100644 --- a/tests/Math/Stochastic/Distribution/UniformDistributionContinuousTest.php +++ b/tests/Math/Stochastic/Distribution/UniformDistributionContinuousTest.php @@ -80,6 +80,14 @@ class UniformDistributionContinuousTest extends \PHPUnit\Framework\TestCase self::assertEquals(1 / 12 * ($b - $a) ** 2, UniformDistributionContinuous::getVariance($a, $b)); } + public function testStandardDeviation() : void + { + $a = 1; + $b = 4; + + self::assertEquals(\sqrt(1 / 12 * ($b - $a) ** 2), UniformDistributionContinuous::getStandardDeviation($a, $b)); + } + public function testSkewness() : void { self::assertEquals(0, UniformDistributionContinuous::getSkewness()); diff --git a/tests/Math/Stochastic/Distribution/UniformDistributionDiscreteTest.php b/tests/Math/Stochastic/Distribution/UniformDistributionDiscreteTest.php index cb1d54445..b6326bb39 100644 --- a/tests/Math/Stochastic/Distribution/UniformDistributionDiscreteTest.php +++ b/tests/Math/Stochastic/Distribution/UniformDistributionDiscreteTest.php @@ -67,6 +67,14 @@ class UniformDistributionDiscreteTest extends \PHPUnit\Framework\TestCase self::assertEquals((($b - $a + 1) ** 2 - 1) / 12, UniformDistributionDiscrete::getVariance($a, $b)); } + public function testStandardDeviation() : void + { + $a = 1; + $b = 4; + + self::assertEquals(\sqrt((($b - $a + 1) ** 2 - 1) / 12), UniformDistributionDiscrete::getStandardDeviation($a, $b)); + } + public function testExKurtosis() : void { $a = 1; diff --git a/tests/Math/Stochastic/Distribution/WeibullDistributionTest.php b/tests/Math/Stochastic/Distribution/WeibullDistributionTest.php index 4b431924f..7b4207dce 100644 --- a/tests/Math/Stochastic/Distribution/WeibullDistributionTest.php +++ b/tests/Math/Stochastic/Distribution/WeibullDistributionTest.php @@ -14,13 +14,22 @@ declare(strict_types=1); namespace phpOMS\tests\Math\Stochastic\Distribution; +use phpOMS\Math\Stochastic\Distribution\WeibullDistribution; + /** * @internal */ class WeibullDistributionTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testPdf() : void { - self::markTestIncomplete(); + self::assertEqualsWithDelta(0.213668559, WeibullDistribution::getPdf(3, 4, 2), 0.001); + self::assertEqualsWithDelta(0.0, WeibullDistribution::getPdf(-1, 4, 2), 0.001); + } + + public function testCdf() : void + { + self::assertEqualsWithDelta(0.430217175, WeibullDistribution::getCdf(3, 4, 2), 0.001); + self::assertEqualsWithDelta(0.0, WeibullDistribution::getCdf(-1, 4, 2), 0.001); } } diff --git a/tests/Stdlib/Base/NullLocationTest.php b/tests/Stdlib/Base/NullLocationTest.php index 5638dec3f..b31c0c6e7 100644 --- a/tests/Stdlib/Base/NullLocationTest.php +++ b/tests/Stdlib/Base/NullLocationTest.php @@ -14,13 +14,15 @@ declare(strict_types=1); namespace phpOMS\tests\Stdlib\Base; +use phpOMS\Stdlib\Base\NullLocation; + /** * @internal */ class NullLocationTest extends \PHPUnit\Framework\TestCase { - public function testPlaceholder() : void + public function testNullLocation() : void { - self::markTestIncomplete(); + self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', new NullLocation()); } }