fix tests

This commit is contained in:
Dennis Eichhorn 2023-10-22 17:51:18 +00:00
parent 1f9f97f8d9
commit 90b807093b
5 changed files with 85 additions and 88 deletions

View File

@ -569,7 +569,7 @@ class Matrix implements \ArrayAccess, \Iterator
$newMatrixArr = $this->matrix;
foreach ($newMatrixArr as $i => $vector) {
foreach ($vector as $j => $value) {
foreach ($vector as $j => $_) {
$newMatrixArr[$i][$j] *= $scalar;
}
}
@ -913,21 +913,20 @@ class Matrix implements \ArrayAccess, \Iterator
throw new InvalidDimensionException($this->m . 'x' . $this->n);
}
$identity = new IdentityMatrix($this->m);
$matrix = $identity;
$sum = new IdentityMatrix($this->m);
$factorial = 1;
$pow = clone $matrix;
$pow = clone $sum;
for ($i = 1; $i <= $iterations; ++$i) {
$factorial *= $i;
$coeff = 1 / $factorial;
$term = clone $pow->mult($this);
$matrix = $matrix->add($term->mult($coeff));
$pow = $pow->mult($this);
$sum = $sum->add($pow->mult($coeff));
}
return $matrix;
return $sum;
}
/**

View File

@ -106,7 +106,7 @@ final class MetricsND
*/
public static function cosine(array $a, array $b) : float
{
if (($length = \count($a)) !== \count($b)) {
if (\count($a) !== \count($b)) {
throw new InvalidDimensionException(\count($a) . 'x' . \count($b));
}

View File

@ -26,11 +26,14 @@ use phpOMS\Math\Optimization\Simplex;
*/
final class SimplexTest extends \PHPUnit\Framework\TestCase
{
public function testSimplex() : void
public function testSimplexBasicInfeasible() : void
{
$simplex = new Simplex();
self::assertEquals(
[],
self::assertEqualsWithDelta(
[
[11.333333, 3.333333, 0.0, 11.666667, 0.0],
21.333333
],
$simplex->solve(
[
[-1, 1],
@ -39,15 +42,19 @@ final class SimplexTest extends \PHPUnit\Framework\TestCase
],
[8, -3, 2],
[1, 3]
)
),
0.01
);
}
public function testSimplexBasicFeasible() : void
{
$simplex = new Simplex();
self::assertEquals(
[],
self::assertEqualsWithDelta(
[
[1.0, 0.0, 0.0, 0.0],
5.0
],
$simplex->solve(
[
[-1, 1],
@ -55,24 +62,8 @@ final class SimplexTest extends \PHPUnit\Framework\TestCase
],
[1, 2],
[5, -3]
)
);
}
public function testSimplexBasicInfeasible() : void
{
$simplex = new Simplex();
self::assertEquals(
[],
$simplex->solve(
[
[-1, 1],
[1, 1],
[1, -4],
],
[8, -3, 2],
[1, 3]
)
),
0.0
);
}
@ -80,7 +71,10 @@ final class SimplexTest extends \PHPUnit\Framework\TestCase
{
$simplex = new Simplex();
self::assertEquals(
[],
[
[\INF, \INF],
\INF
],
$simplex->solve(
[
[-1, -1],
@ -95,8 +89,11 @@ final class SimplexTest extends \PHPUnit\Framework\TestCase
public function testSimplexLPUnbound() : void
{
$simplex = new Simplex();
self::assertEquals(
[],
self::assertEqualsWithDelta(
[
[\INF, \INF],
\INF
],
$simplex->solve(
[
[2, -1],
@ -104,7 +101,8 @@ final class SimplexTest extends \PHPUnit\Framework\TestCase
],
[-1, -2],
[1, -1]
)
),
0.01
);
}
}

View File

@ -25,91 +25,91 @@ final class Kernel2DTest extends \PHPUnit\Framework\TestCase
{
public function testUniform() : void
{
self::assertEquals(0.5, Kernel2D::uniformKernel(0, 1));
self::assertEquals(0.5, Kernel2D::uniformKernel(-1, 1));
self::assertEquals(0.5, Kernel2D::uniformKernel(1, 1));
self::assertEquals(0.5, Kernel2D::uniformKernel(0, 2));
self::assertEquals(0.5, Kernel2D::uniformKernel(-1, 2));
self::assertEquals(0.5, Kernel2D::uniformKernel(1, 2));
self::assertEquals(0.0, Kernel2D::uniformKernel(2, 1));
self::assertEquals(0.0, Kernel2D::uniformKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::uniformKernel(2, 2));
self::assertEquals(0.0, Kernel2D::uniformKernel(-2, 2));
}
public function testTriangle() : void
{
self::assertEquals(1.0, Kernel2D::triangularKernel(0, 1));
self::assertEquals(0.0, Kernel2D::triangularKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::triangularKernel(1, 1));
self::assertEquals(1.0, Kernel2D::triangularKernel(0, 2));
self::assertEquals(0.0, Kernel2D::triangularKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::triangularKernel(1, 2));
self::assertEquals(0.0, Kernel2D::triangularKernel(2, 1));
self::assertEquals(0.0, Kernel2D::triangularKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::triangularKernel(2, 2));
self::assertEquals(0.0, Kernel2D::triangularKernel(-2, 2));
}
public function testEpanechnikov() : void
{
self::assertEquals(3 / 4, Kernel2D::epanechnikovKernel(0, 1));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(1, 1));
self::assertEquals(3 / 4, Kernel2D::epanechnikovKernel(0, 2));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(1, 2));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(2, 1));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(2, 2));
self::assertEquals(0.0, Kernel2D::epanechnikovKernel(-2, 2));
}
public function testQuartic() : void
{
self::assertEquals(15 / 6, Kernel2D::quarticKernel(0, 1));
self::assertEquals(0.0, Kernel2D::quarticKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::quarticKernel(1, 1));
self::assertEquals(15 / 6, Kernel2D::quarticKernel(0, 2));
self::assertEquals(0.0, Kernel2D::quarticKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::quarticKernel(1, 2));
self::assertEquals(0.0, Kernel2D::quarticKernel(2, 1));
self::assertEquals(0.0, Kernel2D::quarticKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::quarticKernel(2, 2));
self::assertEquals(0.0, Kernel2D::quarticKernel(-2, 2));
}
public function testTriweight() : void
{
self::assertEquals(35 / 32, Kernel2D::triweightKernel(0, 1));
self::assertEquals(0.0, Kernel2D::triweightKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::triweightKernel(1, 1));
self::assertEquals(35 / 32, Kernel2D::triweightKernel(0, 2));
self::assertEquals(0.0, Kernel2D::triweightKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::triweightKernel(1, 2));
self::assertEquals(0.0, Kernel2D::triweightKernel(2, 1));
self::assertEquals(0.0, Kernel2D::triweightKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::triweightKernel(2, 2));
self::assertEquals(0.0, Kernel2D::triweightKernel(-2, 2));
}
public function testTricube() : void
{
self::assertEquals(70 / 81, Kernel2D::tricubeKernel(0, 1));
self::assertEquals(0.0, Kernel2D::tricubeKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::tricubeKernel(1, 1));
self::assertEquals(70 / 81, Kernel2D::tricubeKernel(0, 2));
self::assertEquals(0.0, Kernel2D::tricubeKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::tricubeKernel(1, 2));
self::assertEquals(0.0, Kernel2D::tricubeKernel(2, 1));
self::assertEquals(0.0, Kernel2D::tricubeKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::tricubeKernel(2, 2));
self::assertEquals(0.0, Kernel2D::tricubeKernel(-2, 2));
}
public function testGaussian() : void
{
self::assertEquals(1 / \sqrt(2 * \M_PI), Kernel2D::gaussianKernel(0, 1));
self::assertEquals(0.0, Kernel2D::gaussianKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::gaussianKernel(1, 1));
self::assertEquals(1 / \sqrt(2 * \M_PI), Kernel2D::gaussianKernel(0, 2));
self::assertEquals(0.0, Kernel2D::gaussianKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::gaussianKernel(1, 2));
self::assertEquals(0.0, Kernel2D::gaussianKernel(2, 1));
self::assertEquals(0.0, Kernel2D::gaussianKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::gaussianKernel(2, 2));
self::assertEquals(0.0, Kernel2D::gaussianKernel(-2, 2));
}
public function testCosine() : void
{
self::assertEquals(\M_PI / 4, Kernel2D::cosineKernel(0, 1));
self::assertEquals(0.0, Kernel2D::cosineKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::cosineKernel(1, 1));
self::assertEquals(\M_PI / 4, Kernel2D::cosineKernel(0, 2));
self::assertEquals(0.0, Kernel2D::cosineKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::cosineKernel(1, 2));
self::assertEquals(0.0, Kernel2D::cosineKernel(2, 1));
self::assertEquals(0.0, Kernel2D::cosineKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::cosineKernel(2, 2));
self::assertEquals(0.0, Kernel2D::cosineKernel(-2, 2));
}
public function testLogistic() : void
{
self::assertEquals(0.5, Kernel2D::logisticKernel(0, 1));
self::assertEquals(0.0, Kernel2D::logisticKernel(-1, 1));
self::assertEquals(0.0, Kernel2D::logisticKernel(1, 1));
self::assertEquals(0.5, Kernel2D::logisticKernel(0, 2));
self::assertEquals(0.0, Kernel2D::logisticKernel(-1, 2));
self::assertEquals(0.0, Kernel2D::logisticKernel(1, 2));
self::assertEquals(0.0, Kernel2D::logisticKernel(2, 1));
self::assertEquals(0.0, Kernel2D::logisticKernel(-2, 1));
self::assertEquals(0.0, Kernel2D::logisticKernel(2, 2));
self::assertEquals(0.0, Kernel2D::logisticKernel(-2, 2));
}
}

View File

@ -99,7 +99,7 @@ final class RequestAbstractTest extends \PHPUnit\Framework\TestCase
public function testDataAllInputOutput() : void
{
$this->request->set('asdf', false);
$this->request->setData('asdf', false);
self::assertFalse(['asdf' => false], $this->request->getData());
}
@ -108,7 +108,7 @@ final class RequestAbstractTest extends \PHPUnit\Framework\TestCase
*/
public function testDataJsonInputOutput() : void
{
$this->request->set('asdf', '[1,2,3]');
$this->request->setData('asdf', '[1,2,3]');
self::assertEquals([1,2,3], $this->request->getDataJson('asdf'));
self::assertEquals([1,2,3], $this->request->getData('asdf', 'json'));
}
@ -118,7 +118,7 @@ final class RequestAbstractTest extends \PHPUnit\Framework\TestCase
*/
public function testDataStringInputOutput() : void
{
$this->request->set('asdf', 1);
$this->request->setData('asdf', 1);
self::assertEquals('1', $this->request->getDataString('asdf'));
self::assertEquals('1', $this->request->getData('asdf', 'string'));
}
@ -128,7 +128,7 @@ final class RequestAbstractTest extends \PHPUnit\Framework\TestCase
*/
public function testDataBoolInputOutput() : void
{
$this->request->set('asdf', 1);
$this->request->setData('asdf', 1);
self::assertEquals(true, $this->request->getDataBool('asdf'));
self::assertEquals(true, $this->request->getData('asdf', 'bool'));
}
@ -138,7 +138,7 @@ final class RequestAbstractTest extends \PHPUnit\Framework\TestCase
*/
public function testDataFloatInputOutput() : void
{
$this->request->set('asdf', 1);
$this->request->setData('asdf', 1);
self::assertEquals(1.0, $this->request->getDataFloat('asdf'));
self::assertEquals(1.0, $this->request->getData('asdf', 'float'));
}
@ -148,14 +148,14 @@ final class RequestAbstractTest extends \PHPUnit\Framework\TestCase
*/
public function testDataDateTimeInputOutput() : void
{
$this->request->set('asdf', '2023-01-01');
$this->request->setData('asdf', '2023-01-01');
self::assertEquals((new \DateTime('2023-01-01'))->format('Y-m-d'), $this->request->getDataDateTime('asdf'));
self::assertEquals((new \DateTime('2023-01-01'))->format('Y-m-d'), $this->request->getData('asdf', 'float'));
}
public function testDataInvalidTypeInputOutput() : void
{
$this->request->set('asdf', 1);
$this->request->setData('asdf', 1);
self::assertEquals(1, $this->request->getData('asdf', 'invalid'));
}