diff --git a/Math/Matrix/Matrix.php b/Math/Matrix/Matrix.php index 402cbb4ae..14d48fbc9 100755 --- a/Math/Matrix/Matrix.php +++ b/Math/Matrix/Matrix.php @@ -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; } /** diff --git a/Math/Topology/MetricsND.php b/Math/Topology/MetricsND.php index aa9b0969f..d6097d1d1 100755 --- a/Math/Topology/MetricsND.php +++ b/Math/Topology/MetricsND.php @@ -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)); } diff --git a/tests/Math/Optimization/SimplexTest.php b/tests/Math/Optimization/SimplexTest.php index acc628d99..408ff911f 100644 --- a/tests/Math/Optimization/SimplexTest.php +++ b/tests/Math/Optimization/SimplexTest.php @@ -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 ); } } diff --git a/tests/Math/Topology/Kernel2DTest.php b/tests/Math/Topology/Kernel2DTest.php index 47ad002bf..bf137e59b 100644 --- a/tests/Math/Topology/Kernel2DTest.php +++ b/tests/Math/Topology/Kernel2DTest.php @@ -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)); } } diff --git a/tests/Message/RequestAbstractTest.php b/tests/Message/RequestAbstractTest.php index f1ac9ec36..c4c1bdf05 100755 --- a/tests/Message/RequestAbstractTest.php +++ b/tests/Message/RequestAbstractTest.php @@ -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')); }