99 lines
3.2 KiB
PHP
99 lines
3.2 KiB
PHP
|
<?php namespace MapGuesser\Tests\Util\Geo;
|
||
|
|
||
|
use MapGuesser\Util\Geo\Bounds;
|
||
|
use MapGuesser\Util\Geo\Position;
|
||
|
use PHPUnit\Framework\TestCase;
|
||
|
|
||
|
final class BoundsTest extends TestCase
|
||
|
{
|
||
|
public function testCanBeCreatedEmpty(): void
|
||
|
{
|
||
|
$bounds = new Bounds();
|
||
|
|
||
|
$this->assertEquals(90.0, $bounds->getSouthLat());
|
||
|
$this->assertEquals(180.0, $bounds->getWestLng());
|
||
|
$this->assertEquals(-90.0, $bounds->getNorthLat());
|
||
|
$this->assertEquals(-180.0, $bounds->getEastLng());
|
||
|
}
|
||
|
|
||
|
public function testCanBeCreatedWithPosition(): void
|
||
|
{
|
||
|
$position = new Position(45.25, 18.12);
|
||
|
|
||
|
$bounds = new Bounds($position);
|
||
|
|
||
|
$this->assertEquals($position->getLat(), $bounds->getSouthLat());
|
||
|
$this->assertEquals($position->getLng(), $bounds->getWestLng());
|
||
|
$this->assertEquals($position->getLat(), $bounds->getNorthLat());
|
||
|
$this->assertEquals($position->getLng(), $bounds->getEastLng());
|
||
|
}
|
||
|
|
||
|
public function testCanBeCreatedDirectly(): void
|
||
|
{
|
||
|
$bounds = Bounds::createDirectly(44.12, 7.33, 50.12, 15.11);
|
||
|
|
||
|
$this->assertEquals(44.12, $bounds->getSouthLat());
|
||
|
$this->assertEquals(7.33, $bounds->getWestLng());
|
||
|
$this->assertEquals(50.12, $bounds->getNorthLat());
|
||
|
$this->assertEquals(15.11, $bounds->getEastLng());
|
||
|
}
|
||
|
|
||
|
public function testExtendingWithOnePositionIsTheSameAsCreatingWithPosition(): void
|
||
|
{
|
||
|
$position = new Position(45.25, 18.12);
|
||
|
|
||
|
$bounds1 = new Bounds();
|
||
|
$bounds1->extend($position);
|
||
|
|
||
|
$bounds2 = new Bounds($position);
|
||
|
|
||
|
$this->assertEquals($bounds1, $bounds2);
|
||
|
}
|
||
|
|
||
|
public function testCanBeExtendedWithTwoPositions(): void
|
||
|
{
|
||
|
$bounds = new Bounds();
|
||
|
|
||
|
$position1 = new Position(45.25, 18.12);
|
||
|
$position2 = new Position(43.15, 19.28);
|
||
|
|
||
|
$bounds->extend($position1);
|
||
|
$bounds->extend($position2);
|
||
|
|
||
|
$this->assertEquals($position2->getLat(), $bounds->getSouthLat());
|
||
|
$this->assertEquals($position1->getLng(), $bounds->getWestLng());
|
||
|
$this->assertEquals($position1->getLat(), $bounds->getNorthLat());
|
||
|
$this->assertEquals($position2->getLng(), $bounds->getEastLng());
|
||
|
|
||
|
$bounds = new Bounds();
|
||
|
|
||
|
$position1 = new Position(43.15, 18.12);
|
||
|
$position2 = new Position(45.25, 19.28);
|
||
|
|
||
|
$bounds->extend($position1);
|
||
|
$bounds->extend($position2);
|
||
|
|
||
|
$this->assertEquals($position1->getLat(), $bounds->getSouthLat());
|
||
|
$this->assertEquals($position1->getLng(), $bounds->getWestLng());
|
||
|
$this->assertEquals($position2->getLat(), $bounds->getNorthLat());
|
||
|
$this->assertEquals($position2->getLng(), $bounds->getEastLng());
|
||
|
}
|
||
|
|
||
|
public function testCanCalculateApproximateArea(): void
|
||
|
{
|
||
|
$bounds = Bounds::createDirectly(44.12, 7.33, 50.12, 15.11);
|
||
|
|
||
|
$this->assertEqualsWithDelta(391766.09, $bounds->calculateApproximateArea(), 0.01);
|
||
|
}
|
||
|
|
||
|
public function testCanBeConvertedToArray(): void
|
||
|
{
|
||
|
$bounds = Bounds::createDirectly(44.12, 7.33, 50.12, 15.11);
|
||
|
|
||
|
$this->assertEquals(
|
||
|
['south' => 44.12, 'west' => 7.33, 'north' => 50.12, 'east' => 15.11],
|
||
|
$bounds->toArray()
|
||
|
);
|
||
|
}
|
||
|
}
|