diff --git a/tests/Unit/Geometry/RectangleResizerTest.php b/tests/Unit/Geometry/RectangleResizerTest.php index a5bbb455f..0688c0751 100644 --- a/tests/Unit/Geometry/RectangleResizerTest.php +++ b/tests/Unit/Geometry/RectangleResizerTest.php @@ -51,335 +51,96 @@ public function testToSize(): void $this->assertInstanceOf(RectangleResizer::class, $resizer); } - public function testResize(): void + #[DataProvider('resizeDataProvider')] + public function testResize(Rectangle $input, array $resizeParameters, Rectangle $result): void { - $size = new Rectangle(300, 200); - $resizer = new RectangleResizer(); - $resizer->toWidth(150); - $result = $resizer->resize($size); - $this->assertEquals(150, $result->width()); - $this->assertEquals(200, $result->height()); - - $size = new Rectangle(300, 200); - $resizer = new RectangleResizer(); - $resizer->toWidth(20); - $resizer->toHeight(10); - $result = $resizer->resize($size); - $this->assertEquals(20, $result->width()); - $this->assertEquals(10, $result->height()); - - $size = new Rectangle(300, 200); - $resizer = new RectangleResizer(width: 150); - $result = $resizer->resize($size); - $this->assertEquals(150, $result->width()); - $this->assertEquals(200, $result->height()); - - $size = new Rectangle(300, 200); - $resizer = new RectangleResizer(height: 10, width: 20); - $result = $resizer->resize($size); - $this->assertEquals(20, $result->width()); - $this->assertEquals(10, $result->height()); + $resizer = new RectangleResizer(...$resizeParameters); + $resized = $resizer->resize($input); + $this->assertEquals($result->width(), $resized->width()); + $this->assertEquals($result->height(), $resized->height()); } - public function testResizeDown(): void + public static function resizeDataProvider(): Generator { - // 800x600 > 1000x2000 = 800x600 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $resizer->toHeight(2000); - $result = $resizer->resizeDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(600, $result->height()); - - // 800x600 > 400x1000 = 400x600 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(400); - $resizer->toHeight(1000); - $result = $resizer->resizeDown($size); - $this->assertEquals(400, $result->width()); - $this->assertEquals(600, $result->height()); - - // 800x600 > 1000x400 = 800x400 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $resizer->toHeight(400); - $result = $resizer->resizeDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(400, $result->height()); - - // 800x600 > 400x300 = 400x300 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(400); - $resizer->toHeight(300); - $result = $resizer->resizeDown($size); - $this->assertEquals(400, $result->width()); - $this->assertEquals(300, $result->height()); - - // 800x600 > 1000xnull = 800x600 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $result = $resizer->resizeDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(600, $result->height()); - - // 800x600 > nullx1000 = 800x600 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toHeight(1000); - $result = $resizer->resizeDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(600, $result->height()); + yield [new Rectangle(300, 200), ['width' => 150], new Rectangle(150, 200)]; + yield [new Rectangle(300, 200), ['height' => 150], new Rectangle(300, 150)]; + yield [new Rectangle(300, 200), ['width' => 20, 'height' => 10], new Rectangle(20, 10)]; + yield [new Rectangle(300, 200), [], new Rectangle(300, 200)]; } - public function testScale(): void + #[DataProvider('resizeDownDataProvider')] + public function testResizeDown(Rectangle $input, array $resizeParameters, Rectangle $result): void { - // 800x600 > 1000x2000 = 1000x750 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $resizer->toHeight(2000); - $result = $resizer->scale($size); - $this->assertEquals(1000, $result->width()); - $this->assertEquals(750, $result->height()); - - // 800x600 > 2000x1000 = 1333x1000 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(2000); - $resizer->toHeight(1000); - $result = $resizer->scale($size); - $this->assertEquals(1333, $result->width()); - $this->assertEquals(1000, $result->height()); - - // // 800x600 > nullx3000 = 4000x3000 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toHeight(3000); - $result = $resizer->scale($size); - $this->assertEquals(4000, $result->width()); - $this->assertEquals(3000, $result->height()); - - // // 800x600 > 8000xnull = 8000x6000 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(8000); - $result = $resizer->scale($size); - $this->assertEquals(8000, $result->width()); - $this->assertEquals(6000, $result->height()); - - // // 800x600 > 100x400 = 100x75 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(100); - $resizer->toHeight(400); - $result = $resizer->scale($size); - $this->assertEquals(100, $result->width()); - $this->assertEquals(75, $result->height()); - - // // 800x600 > 400x100 = 133x100 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(400); - $resizer->toHeight(100); - $result = $resizer->scale($size); - $this->assertEquals(133, $result->width()); - $this->assertEquals(100, $result->height()); - - // // 800x600 > nullx300 = 400x300 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toHeight(300); - $result = $resizer->scale($size); - $this->assertEquals(400, $result->width()); - $this->assertEquals(300, $result->height()); - - // // 800x600 > 80xnull = 80x60 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(80); - $result = $resizer->scale($size); - $this->assertEquals(80, $result->width()); - $this->assertEquals(60, $result->height()); - - // // 640x480 > 225xnull = 225x169 - $size = new Rectangle(640, 480); - $resizer = new RectangleResizer(); - $resizer->toWidth(225); - $result = $resizer->scale($size); - $this->assertEquals(225, $result->width()); - $this->assertEquals(169, $result->height()); - - // // 640x480 > 223xnull = 223x167 - $size = new Rectangle(640, 480); - $resizer = new RectangleResizer(); - $resizer->toWidth(223); - $result = $resizer->scale($size); - $this->assertEquals(223, $result->width()); - $this->assertEquals(167, $result->height()); - - // // 600x800 > 300x300 = 225x300 - $size = new Rectangle(600, 800); - $resizer = new RectangleResizer(); - $resizer->toWidth(300); - $resizer->toHeight(300); - $result = $resizer->scale($size); - $this->assertEquals(225, $result->width()); - $this->assertEquals(300, $result->height()); - - // // 800x600 > 400x10 = 13x10 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(400); - $resizer->toHeight(10); - $result = $resizer->scale($size); - $this->assertEquals(13, $result->width()); - $this->assertEquals(10, $result->height()); - - // // 800x600 > 1000x1200 = 1000x750 - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $resizer->toHeight(1200); - $result = $resizer->scale($size); - $this->assertEquals(1000, $result->width()); - $this->assertEquals(750, $result->height()); - - $size = new Rectangle(12000, 12); - $resizer = new RectangleResizer(); - $resizer->toWidth(4000); - $resizer->toHeight(3000); - $result = $resizer->scale($size); - $this->assertEquals(4000, $result->width()); - $this->assertEquals(4, $result->height()); - - $size = new Rectangle(12, 12000); - $resizer = new RectangleResizer(); - $resizer->toWidth(4000); - $resizer->toHeight(3000); - $result = $resizer->scale($size); - $this->assertEquals(3, $result->width()); - $this->assertEquals(3000, $result->height()); - - $size = new Rectangle(12000, 6000); - $resizer = new RectangleResizer(); - $resizer->toWidth(4000); - $resizer->toHeight(3000); - $result = $resizer->scale($size); - $this->assertEquals(4000, $result->width()); - $this->assertEquals(2000, $result->height()); - - $size = new Rectangle(3, 3000); - $resizer = new RectangleResizer(); - $resizer->toHeight(300); - $result = $resizer->scale($size); - $this->assertEquals(1, $result->width()); - $this->assertEquals(300, $result->height()); + $resizer = new RectangleResizer(...$resizeParameters); + $resized = $resizer->resizeDown($input); + $this->assertEquals($result->width(), $resized->width()); + $this->assertEquals($result->height(), $resized->height()); } - public function testScaleDown(): void + public static function resizeDownDataProvider(): Generator { - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $resizer->toHeight(2000); - $result = $resizer->scaleDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(600, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $resizer->toHeight(600); - $result = $resizer->scaleDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(600, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $resizer->toHeight(300); - $result = $resizer->scaleDown($size); - $this->assertEquals(400, $result->width()); - $this->assertEquals(300, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(400); - $resizer->toHeight(1000); - $result = $resizer->scaleDown($size); - $this->assertEquals(400, $result->width()); - $this->assertEquals(300, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(400); - $result = $resizer->scaleDown($size); - $this->assertEquals(400, $result->width()); - $this->assertEquals(300, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toHeight(300); - $result = $resizer->scaleDown($size); - $this->assertEquals(400, $result->width()); - $this->assertEquals(300, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(1000); - $result = $resizer->scaleDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(600, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toHeight(1000); - $result = $resizer->scaleDown($size); - $this->assertEquals(800, $result->width()); - $this->assertEquals(600, $result->height()); - - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(100); - $result = $resizer->scaleDown($size); - $this->assertEquals(100, $result->width()); - $this->assertEquals(75, $result->height()); + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 1000], new Rectangle(400, 600)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 400], new Rectangle(800, 400)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 1000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['height' => 1000], new Rectangle(800, 600)]; + } - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(300); - $resizer->toHeight(200); - $result = $resizer->scaleDown($size); - $this->assertEquals(267, $result->width()); - $this->assertEquals(200, $result->height()); + #[DataProvider('scaleDataProvider')] + public function testScale(Rectangle $input, array $resizeParameters, Rectangle $result): void + { + $resizer = new RectangleResizer(...$resizeParameters); + $resized = $resizer->scale($input); + $this->assertEquals($result->width(), $resized->width()); + $this->assertEquals($result->height(), $resized->height()); + } - $size = new Rectangle(600, 800); - $resizer = new RectangleResizer(); - $resizer->toWidth(300); - $resizer->toHeight(300); - $result = $resizer->scaleDown($size); - $this->assertEquals(225, $result->width()); - $this->assertEquals(300, $result->height()); + public static function scaleDataProvider(): Generator + { + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(1000, 750)]; + yield [new Rectangle(800, 600), ['width' => 2000, 'height' => 1000], new Rectangle(1333, 1000)]; + yield [new Rectangle(800, 600), ['height' => 3000], new Rectangle(4000, 3000)]; + yield [new Rectangle(800, 600), ['width' => 8000], new Rectangle(8000, 6000)]; + yield [new Rectangle(800, 600), ['width' => 100, 'height' => 400], new Rectangle(100, 75)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 100], new Rectangle(133, 100)]; + yield [new Rectangle(800, 600), ['height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 80], new Rectangle(80, 60)]; + yield [new Rectangle(640, 480), ['width' => 225], new Rectangle(225, 169)]; + yield [new Rectangle(640, 480), ['width' => 223], new Rectangle(223, 167)]; + yield [new Rectangle(600, 800), ['width' => 300, 'height' => 300], new Rectangle(225, 300)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 10], new Rectangle(13, 10)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 1200], new Rectangle(1000, 750)]; + yield [new Rectangle(12000, 12), ['width' => 4000, 'height' => 3000], new Rectangle(4000, 4)]; + yield [new Rectangle(12, 12000), ['width' => 4000, 'height' => 3000], new Rectangle(3, 3000)]; + yield [new Rectangle(12000, 6000), ['width' => 4000, 'height' => 3000], new Rectangle(4000, 2000)]; + yield [new Rectangle(3, 3000), ['height' => 300], new Rectangle(1, 300)]; + } - $size = new Rectangle(800, 600); - $resizer = new RectangleResizer(); - $resizer->toWidth(400); - $resizer->toHeight(10); - $result = $resizer->scaleDown($size); - $this->assertEquals(13, $result->width()); - $this->assertEquals(10, $result->height()); + #[DataProvider('scaleDownDataProvider')] + public function testScaleDown(Rectangle $input, array $resizeParameters, Rectangle $result): void + { + $resizer = new RectangleResizer(...$resizeParameters); + $resized = $resizer->scaleDown($input); + $this->assertEquals($result->width(), $resized->width()); + $this->assertEquals($result->height(), $resized->height()); + } - $size = new Rectangle(3, 3000); - $resizer = new RectangleResizer(); - $resizer->toHeight(300); - $result = $resizer->scale($size); - $this->assertEquals(1, $result->width()); - $this->assertEquals(300, $result->height()); + public static function scaleDownDataProvider(): Generator + { + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 2000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 600], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 1000, 'height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 1000], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 400], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['height' => 300], new Rectangle(400, 300)]; + yield [new Rectangle(800, 600), ['width' => 1000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['height' => 1000], new Rectangle(800, 600)]; + yield [new Rectangle(800, 600), ['width' => 100], new Rectangle(100, 75)]; + yield [new Rectangle(800, 600), ['width' => 300, 'height' => 200], new Rectangle(267, 200)]; + yield [new Rectangle(600, 800), ['width' => 300, 'height' => 300], new Rectangle(225, 300)]; + yield [new Rectangle(800, 600), ['width' => 400, 'height' => 10], new Rectangle(13, 10)]; + yield [new Rectangle(3, 3000), ['height' => 300], new Rectangle(1, 300)]; } #[DataProvider('coverDataProvider')]