bug fixes and implement some incomplete tests

This commit is contained in:
Dennis Eichhorn 2019-10-31 21:03:34 +01:00
parent 6c5a7dbdcb
commit 18c11fb229
45 changed files with 619 additions and 247 deletions

View File

@ -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
}
}

View File

@ -1,66 +0,0 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package phpOMS\DataStorage\Database
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace phpOMS\DataStorage\Database;
use phpOMS\DataStorage\Database\Schema\Exception\TableException;
/**
* Database exception factory.
*
* @package phpOMS\DataStorage\Database
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
class DatabaseExceptionFactory
{
/**
* Create exception class string based on exception.
*
* @param \PDOException $e Exception
*
* @return string Returns exception namespace/class
*
* @since 1.0.0
*/
public static function createException(\PDOException $e) : string
{
switch ($e->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();
}
}
}

View File

@ -1,68 +0,0 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package phpOMS\DataStorage\Database\Schema\Exception
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace phpOMS\DataStorage\Database\Schema\Exception;
/**
* Path exception class.
*
* @package phpOMS\DataStorage\Database\Schema\Exception
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
class TableException extends \PDOException
{
/**
* Constructor.
*
* @param string $message Exception message
* @param int $code Exception code
* @param \Exception $previous Previous exception
*
* @since 1.0.0
*/
public function __construct(string $message, int $code = 0, \Exception $previous = null)
{
parent::__construct('The table "' . $message . '" doesn\'t exist.', $code, $previous);
}
/**
* Get table name from exception.
*
* @param string $message Exception message
*
* @return string
*
* @since 1.0.0
*/
public static function findTable(string $message) : string
{
$pos1 = \strpos($message, '\'');
if ($pos1 === false) {
return $message;
}
$pos2 = \strpos($message, '\'', $pos1 + 1);
if ($pos2 === false) {
return $message;
}
$table = \substr($message, $pos1 + 1, $pos2 - $pos1 - 1);
return $table === false ? $message : $table;
}
}

View File

@ -136,6 +136,20 @@ class BernoulliDistribution
return $p * (1 - $p);
}
/**
* Get standard deviation.
*
* @param float $p Value p
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $p) : float
{
return \sqrt(self::getVariance($p));
}
/**
* Get moment generating function.
*

View File

@ -78,6 +78,21 @@ class BetaDistribution
return $alpha * $beta / (($alpha + $beta) ** 2 * ($alpha + $beta + 1));
}
/**
* Get standard deviation.
*
* @param float $alpha Alpha
* @param float $beta Beta
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $alpha, float $beta) : float
{
return \sqrt(self::getVariance($alpha, $beta));
}
/**
* Get skewness.
*
@ -123,7 +138,7 @@ class BetaDistribution
public static function getMgf(float $t, float $alpha, float $beta) : float
{
$sum = 0;
for ($k = 1; $k < 100000; ++$k) {
for ($k = 1; $k < 20; ++$k) {
$product = 1;
for ($r = 0; $r < $k - 1; ++$r) {
$product *= ($alpha + $r) / ($alpha + $beta + $r);

View File

@ -187,4 +187,19 @@ class BinomialDistribution
{
return $n * $p * (1 - $p);
}
/**
* Get standard deviation.
*
* @param int $n Value n
* @param float $p Value p
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(int $n, float $p) : float
{
return \sqrt(self::getVariance($n, $p));
}
}

View File

@ -219,6 +219,20 @@ class ChiSquaredDistribution
return 2 * $df;
}
/**
* Get standard deviation.
*
* @param int $df Degrees of freedom
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(int $df) : float
{
return \sqrt(self::getVariance($df));
}
/**
* Get moment generating function.
*

View File

@ -108,6 +108,20 @@ class ExponentialDistribution
return \pow($lambda, -2);
}
/**
* Get standard deviation.
*
* @param float $lambda Lambda
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $lambda) : float
{
return \sqrt(self::getVariance($lambda));
}
/**
* Get moment generating function.
*

View File

@ -76,6 +76,21 @@ class FDistribution
/ ($d1 * ($d2 - 2) ** 2 * ($d2 - 4));
}
/**
* Get standard deviation.
*
* @param int $d1 Degree of freedom
* @param int $d2 Degree of freedom
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(int $d1, int $d2) : float
{
return \sqrt(self::getVariance($d1, $d2));
}
/**
* Get skewness.
*

View File

@ -160,6 +160,21 @@ class GammaDistribution
return $k * $theta ** 2;
}
/**
* Get standard deviation.
*
* @param float $k k shape
* @param float $theta Theta scale
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviationK(float $k, float $theta) : float
{
return \sqrt(self::getVarianceK($k, $theta));
}
/**
* Get variance.
*
@ -175,6 +190,21 @@ class GammaDistribution
return $alpha / ($beta ** 2);
}
/**
* Get standard deviation.
*
* @param float $alpha Alpha shape
* @param float $beta Beta scale
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviationAlphaBeta(float $alpha, float $beta) : float
{
return \sqrt(self::getVarianceAlphaBeta($alpha, $beta));
}
/**
* Get moment generating function.
*

View File

@ -108,6 +108,20 @@ class GeometricDistribution
return (1 - $p) / $p ** 2;
}
/**
* Get standard deviation.
*
* @param float $p Value p
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $p) : float
{
return \sqrt(self::getVariance($p));
}
/**
* Get moment generating function.
*

View File

@ -87,7 +87,7 @@ class HypergeometricDistribution
* @param int $N Population size
* @param int $n Number of draws
*
* @return int
* @return float
*
* @todo: this can be heavily optimized
*
@ -98,6 +98,24 @@ class HypergeometricDistribution
return $n * $K / $N * ($N - $K) / $N * ($N - $n) / ($N - 1);
}
/**
* Get standard deviation.
*
* @param int $K Successful states in the population
* @param int $N Population size
* @param int $n Number of draws
*
* @return float
*
* @todo: this can be heavily optimized
*
* @since 1.0.0
*/
public static function getStandardDeviation(int $K, int $N, int $n) : float
{
return \sqrt(self::getVariance($K, $N, $n));
}
/**
* Get skewness.
*
@ -105,7 +123,7 @@ class HypergeometricDistribution
* @param int $N Population size
* @param int $n Number of draws
*
* @return int
* @return float
*
* @todo: this can be heavily optimized
*
@ -124,7 +142,7 @@ class HypergeometricDistribution
* @param int $N Population size
* @param int $n Number of draws
*
* @return int
* @return float
*
* @todo: this can be heavily optimized
*
@ -132,7 +150,7 @@ class HypergeometricDistribution
*/
public static function getExKurtosis(int $K, int $N, int $n) : float
{
return 1 / ($n * $K * ($N - $K) * ($N - $n) * ($N - 2) * ($N - 3))
* (($N - 1) * $N ** 2 * ($N * ($N + 1) - 6 * $K * ($N - $K) - 6 * $n * ($N - $n)) + 6 * $n * $K * ($N - $K) * ($N - $n) * (5 * $N - 6));
return (($N - 1) * $N ** 2 * ($N * ($N + 1) - 6 * $K * ($N - $K) - 6 * $n * ($N - $n)) + 6 * $n * $K * ($N - $K) * ($N - $n) * (5 * $N - 6))
/ ($n * $K * ($N - $K) * ($N - $n) * ($N - 2) * ($N - 3));
}
}

View File

@ -112,6 +112,20 @@ class LaplaceDistribution
return 2 * $b ** 2;
}
/**
* Get standard deviation.
*
* @param float $b Value b
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $b) : float
{
return \sqrt(self::getVariance($b));
}
/**
* Get moment generating function.
*

View File

@ -79,6 +79,20 @@ class LogDistribution
/ ((1 - $p) ** 2 * \log(1 - $p) ** 2);
}
/**
* Get standard deviation.
*
* @param float $p Value p
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $p) : float
{
return \sqrt(self::getVariance($p));
}
/**
* Get moment generating function.
*

View File

@ -44,7 +44,7 @@ class LogNormalDistribution
* Get expected value.
*
* @param float $mu Mu
* @param float $sigma Sigma
* @param float $sigma Sigma = standard deviation
*
* @return float
*
@ -99,6 +99,21 @@ class LogNormalDistribution
return (\exp($sigma ** 2) - 1) * \exp(2 * $mu + $sigma ** 2);
}
/**
* Get standard deviation.
*
* @param float $mu Mu
* @param float $sigma Sigma
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $mu, float $sigma) : float
{
return \sqrt(self::getVariance($mu, $sigma));
}
/**
* Get skewness.
*

View File

@ -112,6 +112,20 @@ class LogisticDistribution
return $s ** 2 * \M_PI ** 2 / 3;
}
/**
* Get standard deviation.
*
* @param float $s s scale
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $s) : float
{
return \sqrt(self::getVariance($s));
}
/**
* Get skewness.
*

View File

@ -133,6 +133,20 @@ class NormalDistribution
return $sig ** 2;
}
/**
* Get standard deviation.
*
* @param float $sig Sigma
*
* @return float
*
* @since 1.0.0
*/
public static function getStandardDeviation(float $sig) : float
{
return $sig;
}
/**
* Get moment generating function.
*

View File

@ -55,6 +55,21 @@ class ParetoDistribution
return 1 - ($xm / $x) ** $alpha;
}
/**
* Get expected value.
*
* @param float $xm Lower bound
* @param float $alpha Alpha shape
*
* @return float
*
* @since 1.0.0
*/
public static function getMean(float $xm, float $alpha) : float
{
return $alpha > 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);
}
/**

View File

@ -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.
*

View File

@ -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);
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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);
}
/**

View File

@ -1,33 +0,0 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace phpOMS\tests\DataStorage\Database;
use phpOMS\DataStorage\Database\DatabaseExceptionFactory;
/**
* @internal
*/
class DatabaseExceptionFactoryTest extends \PHPUnit\Framework\TestCase
{
public function testException() : void
{
self::assertEquals('\PDOException', DatabaseExceptionFactory::createException(new \PDOException()));
}
public function testExceptionMessage() : void
{
self::assertEquals('', DatabaseExceptionFactory::createExceptionMessage(new \PDOException()));
}
}

View File

@ -14,13 +14,15 @@ declare(strict_types=1);
namespace phpOMS\tests\DataStorage\Database\Query;
use phpOMS\DataStorage\Database\Query\Expression;
/**
* @internal
*/
class ExpressionTest extends \PHPUnit\Framework\TestCase
{
public function testPlaceholder() : void
public function testDefault() : void
{
self::markTestIncomplete();
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Builder', new Expression($GLOBALS['dbpool']->get()));
}
}

View File

@ -1,26 +0,0 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace phpOMS\tests\DataStorage\Database\Schema\Exception;
/**
* @internal
*/
class TableExceptionTest extends \PHPUnit\Framework\TestCase
{
public function testPlaceholder() : void
{
self::markTestIncomplete();
}
}

View File

@ -184,6 +184,7 @@ class MatrixTest extends \PHPUnit\Framework\TestCase
public function testReduce() : void
{
self::assertEquals([[-6, -7], [0, -5]], $this->C->upperTriangular()->getMatrix());
self::markTestIncomplete();
//self::assertEquals([], $this->C->lowerTriangular()->getMatrix());
//self::assertEquals([], $this->C->diagonalize()->getMatrix());
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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());

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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;

View File

@ -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());
}
}

View File

@ -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());

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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());
}
}