mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-24 07:08:40 +00:00
More unit tests
This commit is contained in:
parent
766b79cfd3
commit
0e8876ce4d
|
|
@ -129,7 +129,7 @@ final class CookieJar
|
|||
throw new LockException('CookieJar');
|
||||
}
|
||||
|
||||
if (!headers_sent()) {
|
||||
if (!\headers_sent()) {
|
||||
\setcookie($id, '', time() - 3600);
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -124,9 +124,9 @@ final class Average
|
|||
$start = $t - 1 - ($periods - 2);
|
||||
|
||||
if (!empty($weight)) {
|
||||
return self::weightedAverage(array_slice($x, $start, $end - $start), array_slice($weight, $start, $end - $start));
|
||||
return self::weightedAverage(\array_slice($x, $start, $end - $start), \array_slice($weight, $start, $end - $start));
|
||||
} else {
|
||||
return self::arithmeticMean(array_slice($x, $start, $end - $start));
|
||||
return self::arithmeticMean(\array_slice($x, $start, $end - $start));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ final class Average
|
|||
throw new ZeroDevisionException();
|
||||
}
|
||||
|
||||
return array_sum($values) / $count;
|
||||
return \array_sum($values) / $count;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -196,7 +196,7 @@ final class Average
|
|||
*/
|
||||
public static function mode(array $values) : float
|
||||
{
|
||||
$count = array_count_values($values);
|
||||
$count = \array_count_values($values);
|
||||
$best = \max($count);
|
||||
|
||||
return (float) (\array_keys($count, $best)[0] ?? 0.0);
|
||||
|
|
@ -217,7 +217,7 @@ final class Average
|
|||
{
|
||||
\sort($values);
|
||||
$count = \count($values);
|
||||
$middleval = (int) floor(($count - 1) / 2);
|
||||
$middleval = (int) \floor(($count - 1) / 2);
|
||||
|
||||
if ($count % 2) {
|
||||
$median = $values[$middleval];
|
||||
|
|
@ -274,7 +274,7 @@ final class Average
|
|||
\sort($values);
|
||||
|
||||
if ($offset > 0) {
|
||||
$values = array_slice($values, $offset, -$offset);
|
||||
$values = \array_slice($values, $offset, -$offset);
|
||||
}
|
||||
|
||||
$count = \count($values);
|
||||
|
|
@ -310,14 +310,14 @@ final class Average
|
|||
$size = \count($angles);
|
||||
|
||||
for ($i = 0; $i < $size; ++$i) {
|
||||
$x += \cos(deg2rad($angles[$i]));
|
||||
$y += \sin(deg2rad($angles[$i]));
|
||||
$x += \cos(\deg2rad($angles[$i]));
|
||||
$y += \sin(\deg2rad($angles[$i]));
|
||||
}
|
||||
|
||||
$x /= $size;
|
||||
$y /= $size;
|
||||
|
||||
return rad2deg(atan2($y, $x));
|
||||
return \rad2deg(\atan2($y, $x));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -337,20 +337,20 @@ final class Average
|
|||
\sort($angles);
|
||||
|
||||
if ($offset > 0) {
|
||||
$angles = array_slice($angles, $offset, -$offset);
|
||||
$angles = \array_slice($angles, $offset, -$offset);
|
||||
}
|
||||
|
||||
$sins = 0.0;
|
||||
$coss = 0.0;
|
||||
|
||||
foreach ($angles as $a) {
|
||||
$sins += \sin(deg2rad($a));
|
||||
$coss += \cos(deg2rad($a));
|
||||
$sins += \sin(\deg2rad($a));
|
||||
$coss += \cos(\deg2rad($a));
|
||||
}
|
||||
|
||||
$avgsin = $sins / (0.0 + \count($angles));
|
||||
$avgcos = $coss / (0.0 + \count($angles));
|
||||
$avgang = rad2deg(atan2($avgsin, $avgcos));
|
||||
$avgang = \rad2deg(\atan2($avgsin, $avgcos));
|
||||
|
||||
while ($avgang < 0.0) {
|
||||
$avgang += 360.0;
|
||||
|
|
|
|||
|
|
@ -356,7 +356,7 @@ class Error
|
|||
}
|
||||
|
||||
/**
|
||||
* Get mean absolute scaled error (MASE)
|
||||
* Get mean absolute scaled error (MSSE)
|
||||
*
|
||||
* @param array $scaledErrors Scaled errors
|
||||
*
|
||||
|
|
@ -386,7 +386,7 @@ class Error
|
|||
$naive = 1 / (\count($observed) - $m) * self::getNaiveForecast($observed, $m);
|
||||
|
||||
foreach ($errors as $error) {
|
||||
$error[] = $error / $naive;
|
||||
$scaled[] = $error / $naive;
|
||||
}
|
||||
|
||||
return $scaled;
|
||||
|
|
|
|||
|
|
@ -45,4 +45,20 @@ class MultipleLinearRegression
|
|||
public static function getPredictionInterval() : array
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function getSlope(float $b1, float $y, float $x) : float
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function getElasticity(float $b1, float $y, float $x): float
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -164,10 +164,7 @@ abstract class RegressionAbstract
|
|||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function getSlope(float $b1, float $x, float $y) : float
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
abstract public static function getSlope(float $b1, float $x, float $y) : float;
|
||||
|
||||
/**
|
||||
* Get elasticity
|
||||
|
|
@ -180,8 +177,5 @@ abstract class RegressionAbstract
|
|||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function getElasticity(float $b1, float $x, float $y): float
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
abstract public static function getElasticity(float $b1, float $x, float $y): float;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -229,7 +229,20 @@ final class MeasureOfDispersion
|
|||
*/
|
||||
public static function getIQR(array $x) : float
|
||||
{
|
||||
return 0.0;
|
||||
$count = \count($x);
|
||||
|
||||
if ($count % 2 !== 0) {
|
||||
--$count;
|
||||
}
|
||||
|
||||
$count /= 2;
|
||||
|
||||
\sort($x);
|
||||
|
||||
$Q1 = Average::median(\array_slice($x, 0, $count));
|
||||
$Q3 = Average::median(\array_slice($x, -$count, $count));
|
||||
|
||||
return $Q3 - $Q1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -146,6 +146,13 @@ class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase
|
|||
$GLOBALS['dbpool']->get()->con->prepare('DROP TABLE oms_test_has_many_rel_relations')->execute();
|
||||
}
|
||||
|
||||
public function testDefault()
|
||||
{
|
||||
self::assertEquals('test_base_id', BaseModelMapper::getPrimaryField());
|
||||
self::assertEquals('test_base', BaseModelMapper::getTable());
|
||||
self::assertEquals('test_base_datetime', BaseModelMapper::getCreatedAt());
|
||||
}
|
||||
|
||||
public function testCreate()
|
||||
{
|
||||
self::assertGreaterThan(0, BaseModelMapper::create($this->model));
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ class ErrorTest extends \PHPUnit\Framework\TestCase
|
|||
[300, 700, 200, -300]
|
||||
)
|
||||
);
|
||||
|
||||
self::assertEquals([Error::getForecastError(1000, 700)], Error::getForecastErrorArray([1000], [700]));
|
||||
}
|
||||
|
||||
public function testErrorPercentage()
|
||||
|
|
@ -67,4 +69,30 @@ class ErrorTest extends \PHPUnit\Framework\TestCase
|
|||
self::assertEquals(125000, Error::getMeanSquaredError($errors), '', 0.01);
|
||||
self::assertEquals(406.2019, Error::getRootMeanSquaredError($errors), '', 0.01);
|
||||
}
|
||||
|
||||
public function testMASE()
|
||||
{
|
||||
$observed = [
|
||||
-2.9, -2.83, -0.95, -0.88, 1.21, -1.67, 0.83, -0.27, 1.36,
|
||||
-0.34, 0.48, -2.83, -0.95, -0.88, 1.21, -1.67, -2.99, 1.24, 0.64
|
||||
];
|
||||
|
||||
$forecast = [
|
||||
-2.95, -2.7, -1.00, -0.68, 1.50, -1.00, 0.90, -0.37, 1.26,
|
||||
-0.54, 0.58, -2.13, -0.75, -0.89, 1.25, -1.65, -3.20, 1.29, 0.60
|
||||
];
|
||||
|
||||
$errors = Error::getForecastErrorArray($observed, $forecast);
|
||||
$scaledErrors = Error::getScaledErrorArray($errors, $observed);
|
||||
|
||||
self::assertEquals(0.0983, Error::getMeanAbsoluteScaledError($scaledErrors), '', 0.01);
|
||||
}
|
||||
|
||||
public function testScaledError()
|
||||
{
|
||||
self::assertEquals(
|
||||
[Error::getScaledError(Error::getForecastError(1000, 700), 1000)],
|
||||
Error::getScaledErrorArray([Error::getForecastError(1000, 700)], [1000])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.2
|
||||
*
|
||||
* @package TBD
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link http://website.orange-management.de
|
||||
*/
|
||||
|
||||
namespace phpOMS\tests\Math\Statistic\Forecast\Regression;
|
||||
|
||||
use phpOMS\Math\Statistic\Forecast\Regression\LevelLevelRegression;
|
||||
|
||||
class LevelLevelRegressionTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testRegression()
|
||||
{
|
||||
// y = 3 + 4 * x
|
||||
$x = [0, 1, 2, 3, 4];
|
||||
$y = [3, 7, 11, 15, 19];
|
||||
|
||||
$reg = LevelLevelRegression::getRegression($x, $y);
|
||||
|
||||
self::assertEquals(['b0' => 3, 'b1' => 4], $reg, '', 0.2);
|
||||
self::assertEquals(4, LevelLevelRegression::getSlope($reg['b1'], 0, 0));
|
||||
self::assertEquals(22, LevelLevelRegression::getElasticity($reg['b1'], 11, 2));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.2
|
||||
*
|
||||
* @package TBD
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link http://website.orange-management.de
|
||||
*/
|
||||
|
||||
namespace phpOMS\tests\Math\Statistic\Forecast\Regression;
|
||||
|
||||
use phpOMS\Math\Statistic\Forecast\Regression\LevelLogRegression;
|
||||
use phpOMS\Math\Statistic\Forecast\Regression\LevelLevelRegression;
|
||||
|
||||
class LevelLogRegressionTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testRegression()
|
||||
{
|
||||
// y = 1 + log(x)
|
||||
$x = [0.25, 0.5, 1, 1.5];
|
||||
$y = [-0.386, 0.307, 1, 1.405];
|
||||
|
||||
$reg = LevelLogRegression::getRegression($x, $y);
|
||||
|
||||
self::assertEquals(['b0' => 1, 'b1' => 1], $reg, '', 0.2);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.2
|
||||
*
|
||||
* @package TBD
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link http://website.orange-management.de
|
||||
*/
|
||||
|
||||
namespace phpOMS\tests\Math\Statistic\Forecast\Regression;
|
||||
|
||||
use phpOMS\Math\Statistic\Forecast\Regression\LogLevelRegression;
|
||||
|
||||
class LogLevelRegressionTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testRegression()
|
||||
{
|
||||
// ln(y) = -1 + 2 * x => y = e^(-1 + 2 * x)
|
||||
$x = [0.25, 0.5, 1, 1.5];
|
||||
$y = [0.6065, 1, 2.718, 7.389];
|
||||
|
||||
$reg = LogLevelRegression::getRegression($x, $y);
|
||||
|
||||
self::assertEquals(['b0' => -1, 'b1' => 2], $reg, '', 0.2);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.2
|
||||
*
|
||||
* @package TBD
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link http://website.orange-management.de
|
||||
*/
|
||||
|
||||
namespace phpOMS\tests\Math\Statistic\Forecast\Regression;
|
||||
|
||||
use phpOMS\Math\Statistic\Forecast\Regression\LogLogRegression;
|
||||
|
||||
class LogLogRegressionTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testRegression()
|
||||
{
|
||||
// ln(y) = 2 + 3 * ln(x) => y = e^(2 + 3 * ln(x))
|
||||
$x = [0.25, 0.5, 1, 1.5];
|
||||
$y = [0.115, 0.924, 7.389, 24.938];
|
||||
|
||||
$reg = LogLogRegression::getRegression($x, $y);
|
||||
|
||||
self::assertEquals(['b0' => 2, 'b1' => 3], $reg, '', 0.2);
|
||||
}
|
||||
}
|
||||
|
|
@ -56,6 +56,12 @@ class MeasureOfDispersionTest extends \PHPUnit\Framework\TestCase
|
|||
self::assertEquals(0.5400, MeasureOfDispersion::empiricalVariationCoefficient([1, 2, 3, 4, 5, 6, 7]), '', 0.01);
|
||||
}
|
||||
|
||||
public function testIQR()
|
||||
{
|
||||
$x = [7, 7, 31, 31, 47, 75, 87, 115, 116, 119, 119, 155, 177];
|
||||
self::assertEquals(88, MeasureOfDispersion::getIQR($x));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException phpOMS\Math\Exception\ZeroDevisionException
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user