123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- <?php
- namespace MathPHP\Tests\Functions\Map;
- use MathPHP\Functions\Map\Multi;
- use MathPHP\Exception;
- class MultiTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @test add two arrays
- * @dataProvider dataProviderForAddTwoArrays
- * @param array $xs
- * @param array $ys
- * @param array $expected
- * @throws \Exception
- */
- public function testAddTwoArrays(array $xs, array $ys, array $expected)
- {
- // When
- $sums = Multi::add($xs, $ys);
- // Then
- $this->assertEquals($expected, $sums);
- }
- public function dataProviderForAddTwoArrays(): array
- {
- return [
- [
- [1, 2, 3, 4],
- [2, 3, 4, 5],
- [3, 5, 7, 9],
- ],
- [
- [1, 2, 3, 4],
- [6, 6, 6, 6],
- [7, 8, 9, 10],
- ],
- ];
- }
- /**
- * @test add multiple arrays
- * @dataProvider dataProviderForAddMulti
- * @param array $expected
- * @param array ...$arrays
- * @throws \Exception
- */
- public function testAddMulti(array $expected, array ...$arrays)
- {
- // When
- $sums = Multi::add(...$arrays);
- // Then
- $this->assertEquals($expected, $sums);
- }
- public function dataProviderForAddMulti(): array
- {
- return [
- [
- [3, 5, 7, 9],
- [1, 2, 3, 4],
- [2, 3, 4, 5],
- ],
- [
- [7, 8, 9, 10],
- [1, 2, 3, 4],
- [6, 6, 6, 6],
- ],
- [
- [6, 7, 9, 10],
- [1, 2, 3, 4],
- [2, 2, 2, 2],
- [3, 3, 4, 4],
- ]
- ];
- }
- /**
- * @test subtract two arrays
- * @dataProvider dataProviderForSubtractTwoArrays
- * @param array $xs
- * @param array $ys
- * @param array $expected
- * @throws \Exception
- */
- public function testSubtractTwoArrays(array $xs, array $ys, array $expected)
- {
- // When
- $differences = Multi::subtract($xs, $ys);
- // Then
- $this->assertEquals($expected, $differences);
- }
- public function dataProviderForSubtractTwoArrays(): array
- {
- return [
- [
- [1, 2, 3, 4],
- [2, 3, 4, 5],
- [-1, -1, -1, -1],
- ],
- [
- [1, 2, 3, 4],
- [6, 6, 6, 6],
- [-5, -4, -3, -2],
- ],
- ];
- }
- /**
- * @test subtract multiple arrays
- * @dataProvider dataProviderForSubtractMulti
- * @param array $expected
- * @param array[] $arrays
- * @throws \Exception
- */
- public function testSubtractMulti(array $expected, array ...$arrays)
- {
- // When
- $differences = Multi::subtract(...$arrays);
- // Then
- $this->assertEquals($expected, $differences);
- }
- public function dataProviderForSubtractMulti(): array
- {
- return [
- [
- [-1, -1, -1, -1],
- [1, 2, 3, 4],
- [2, 3, 4, 5],
- ],
- [
- [-5, -4, -3, -2],
- [1, 2, 3, 4],
- [6, 6, 6, 6],
- ],
- [
- [3, 3, 4, 4],
- [6, 7, 9, 10],
- [1, 2, 3, 4],
- [2, 2, 2, 2],
- ]
- ];
- }
- /**
- * @test multiply two arrays
- * @dataProvider dataProviderForMultiplyTwoArrays
- */
- public function testMultiplyTwoArrays(array $xs, array $ys, array $expected)
- {
- // When
- $products = Multi::multiply($xs, $ys);
- // Then
- $this->assertEquals($expected, $products);
- }
- public function dataProviderForMultiplyTwoArrays(): array
- {
- return [
- [
- [1, 2, 3, 4],
- [2, 3, 4, 5],
- [2, 6, 12, 20],
- ],
- [
- [1, 2, 3, 4],
- [6, 6, 6, 6],
- [6, 12, 18, 24],
- ],
- ];
- }
- /**
- * @test multiply multiple arrays
- * @dataProvider dataProviderForMultiplyMulti
- */
- public function testMultiplyMulti(array $expected, array ...$arrays)
- {
- // When
- $products = Multi::multiply(...$arrays);
- // Then
- $this->assertEquals($expected, $products);
- }
- public function dataProviderForMultiplyMulti(): array
- {
- return [
- [
- [2, 6, 12, 20],
- [1, 2, 3, 4],
- [2, 3, 4, 5],
- ],
- [
- [6, 12, 18, 24],
- [1, 2, 3, 4],
- [6, 6, 6, 6],
- ],
- [
- [12, 28, 54, 80],
- [6, 7, 9, 10],
- [1, 2, 3, 4],
- [2, 2, 2, 2],
- ]
- ];
- }
- /**
- * @test divide two arrays
- * @dataProvider dataProviderForDivideTwoArrays
- * @param array $xs
- * @param array $ys
- * @param array $expected
- * @throws \Exception
- */
- public function testDivideTwoArrays(array $xs, array $ys, array $expected)
- {
- // When
- $quotients = Multi::divide($xs, $ys);
- // Then
- $this->assertEquals($expected, $quotients);
- }
- public function dataProviderForDivideTwoArrays(): array
- {
- return [
- [
- [5, 10, 15, 20],
- [5, 5, 5, 5],
- [1, 2, 3, 4],
- ],
- [
- [5, 10, 15, 20],
- [2.5, 20, 3, 4],
- [2, 0.5, 5, 5],
- ],
- ];
- }
- /**
- * @test divide multiple arrays
- * @dataProvider dataProviderForDivideMulti
- * @param array $expected
- * @param array[] $arrays
- * @throws \Exception
- */
- public function testDivideMulti(array $expected, array ...$arrays)
- {
- // When
- $quotients = Multi::divide(...$arrays);
- // Then
- $this->assertEquals($expected, $quotients);
- }
- public function dataProviderForDivideMulti(): array
- {
- return [
- [
- [1, 2, 3, 4],
- [5, 10, 15, 20],
- [5, 5, 5, 5],
- ],
- [
- [2, 0.5, 5, 5],
- [5, 10, 15, 20],
- [2.5, 20, 3, 4],
- ],
- [
- [5, 20, 1, 8],
- [100, 80, 25, 64],
- [10, 2, 5, 2],
- [2, 2, 5, 4],
- ]
- ];
- }
- /**
- * @test max two arrays
- * @dataProvider dataProviderForMaxTwoArrays
- * @param array $xs
- * @param array $ys
- * @param array $expected
- * @throws \Exception
- */
- public function testMaxTwoArrays(array $xs, array $ys, array $expected)
- {
- // When
- $maxes = Multi::max($xs, $ys);
- // Then
- $this->assertEquals($expected, $maxes);
- }
- public function dataProviderForMaxTwoArrays(): array
- {
- return [
- [
- [1, 5, 3, 6],
- [5, 5, 5, 5],
- [5, 5, 5, 6],
- ],
- [
- [5, 10, 15, 20],
- [2.5, 20, 3, 4],
- [5, 20, 15, 20],
- ],
- ];
- }
- /**
- * @test max multiple arrays
- * @dataProvider dataProviderForMaxMulti
- * @param array $expected
- * @param array[] $arrays
- * @throws \Exception
- */
- public function testMaxMulti(array $expected, array ...$arrays)
- {
- // When
- $maxes = Multi::max(...$arrays);
- // Then
- $this->assertEquals($expected, $maxes);
- }
- public function dataProviderForMaxMulti(): array
- {
- return [
- [
- [5, 10, 15, 20],
- [5, 10, 15, 20],
- [5, 5, 5, 5],
- ],
- [
- [5, 20, 15, 20],
- [5, 10, 15, 20],
- [2.5, 20, 3, 4],
- ],
- [
- [100, 80, 55, 664],
- [100, 80, 25, 64],
- [10, 2, 55, 2],
- [2, 2, 5, 664],
- ]
- ];
- }
- /**
- * @test min
- * @dataProvider dataProviderForMin
- * @param array $xs
- * @param array $ys
- * @param array $expected
- * @throws \Exception
- */
- public function testMin(array $xs, array $ys, array $expected)
- {
- // When
- $mins = Multi::min($xs, $ys);
- // Then
- $this->assertEquals($expected, $mins);
- }
- public function dataProviderForMin(): array
- {
- return [
- [
- [1, 5, 3, 6],
- [5, 5, 5, 5],
- [1, 5, 3, 5],
- ],
- [
- [5, 10, 15, 20],
- [2.5, 20, 3, 4],
- [2.5, 10, 3, 4],
- ],
- ];
- }
- /**
- * @test min multiple arrays
- * @dataProvider dataProviderForMinMulti
- * @param array $expected
- * @param array[] $arrays
- * @throws \Exception
- */
- public function testMinMulti(array $expected, array ...$arrays)
- {
- // When
- $mins = Multi::min(...$arrays);
- // Then
- $this->assertEquals($expected, $mins);
- }
- public function dataProviderForMinMulti(): array
- {
- return [
- [
- [5, 5, 5, 5],
- [5, 10, 15, 20],
- [5, 5, 5, 5],
- ],
- [
- [2.5, 10, 3, 4],
- [5, 10, 15, 20],
- [2.5, 20, 3, 4],
- ],
- [
- [2, 2, 5, 2],
- [100, 80, 25, 64],
- [10, 2, 55, 2],
- [2, 2, 5, 664],
- ]
- ];
- }
- /**
- * @test array lengths are not equal exception
- * @throws \Exception
- */
- public function testCheckArrayLengthsException()
- {
- // Given
- $xs = [1, 2, 3];
- $ys = [1, 2];
- // Then
- $this->expectException(Exception\BadDataException::class);
- // When
- Multi::add($xs, $ys);
- }
- /**
- * @test Only one array exception
- * @throws \Exception
- */
- public function testCheckArrayLengthsExceptionOnlyOneArray()
- {
- // Given
- $xs = [1, 2];
- // Then
- $this->expectException(Exception\BadDataException::class);
- // When
- Multi::add($xs);
- }
- }
|