You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
3.6 KiB
131 lines
3.6 KiB
<?php
|
|
|
|
namespace Coffee;
|
|
|
|
// This is not necessary, since it is bootstrapped but serves for debugging purposes
|
|
require __DIR__ . '/../../vendor/autoload.php';
|
|
|
|
class TableTest extends \PHPUnit_Framework_TestCase {
|
|
|
|
public function testZeroSpotsCount() {
|
|
$table = new Table([
|
|
[0, 0],
|
|
[0, 0],
|
|
]);
|
|
|
|
$this->assertEquals(0, $table->getSpotsCount());
|
|
}
|
|
|
|
public function testTwoSingleSpotsCount() {
|
|
$table = new Table([
|
|
[0, 1, 0],
|
|
[0, 0, 1],
|
|
[1, 0, 0],
|
|
[0, 1, 0],
|
|
]);
|
|
|
|
$this->assertEquals(2, $table->getSpotsCount());
|
|
}
|
|
|
|
public function testMultipleLargeSpotsCount() {
|
|
$table = new Table([
|
|
[0, 1, 1, 0, 0],
|
|
[0, 0, 1, 0, 1],
|
|
[0, 1, 0, 0, 1],
|
|
[1, 1, 0, 0, 0],
|
|
[1, 0, 0, 1, 1],
|
|
[0, 0, 0, 0, 1],
|
|
[0, 1, 0, 0, 0],
|
|
]);
|
|
|
|
$this->assertEquals(4, $table->getSpotsCount());
|
|
}
|
|
|
|
public function testOneSmallSpot() {
|
|
$table = new Table([
|
|
[0, 1, 1],
|
|
[0, 0, 0],
|
|
[0, 0, 0],
|
|
[0, 0, 0],
|
|
]);
|
|
|
|
$spot = new Spot($this->newVisitedTile(1, 2));
|
|
$spot->addTile($this->newVisitedTile(1, 3));
|
|
$spot->setNumber(1);
|
|
|
|
$this->assertEquals([$spot], $table->getSpots());
|
|
}
|
|
|
|
public function testOneLargeSpot() {
|
|
$table = new Table([
|
|
[0, 0, 1, 0],
|
|
[0, 0, 1, 0],
|
|
[0, 0, 1, 0],
|
|
[0, 1, 0, 1],
|
|
[1, 0, 0, 0],
|
|
]);
|
|
|
|
$spot = new Spot($this->newVisitedTile(1, 3));
|
|
$spot->addTile($this->newVisitedTile(2, 3));
|
|
$spot->addTile($this->newVisitedTile(3, 3));
|
|
$spot->addTile($this->newVisitedTile(4, 2));
|
|
$spot->addTile($this->newVisitedTile(5, 1));
|
|
$spot->addTile($this->newVisitedTile(4, 4));
|
|
$spot->setNumber(1);
|
|
|
|
$this->assertEquals([$spot], $table->getSpots());
|
|
}
|
|
|
|
public function testMultipleLargeSpots() {
|
|
$table = new Table([
|
|
[0, 1, 1, 0, 0],
|
|
[0, 0, 1, 0, 1],
|
|
[0, 1, 0, 0, 1],
|
|
[1, 0, 0, 1, 0],
|
|
]);
|
|
|
|
$spotA = new Spot($this->newVisitedTile(1, 2));
|
|
$spotA->addTile($this->newVisitedTile(2, 3));
|
|
$spotA->addTile($this->newVisitedTile(1, 3));
|
|
$spotA->addTile($this->newVisitedTile(3, 2));
|
|
$spotA->addTile($this->newVisitedTile(4, 1));
|
|
$spotA->setNumber(1);
|
|
|
|
$spotB = new Spot($this->newVisitedTile(2, 5));
|
|
$spotB->addTile($this->newVisitedTile(3, 5));
|
|
$spotB->addTile($this->newVisitedTile(4, 4));
|
|
$spotB->setNumber(2);
|
|
|
|
$this->assertEquals([$spotA, $spotB], $table->getSpots());
|
|
}
|
|
|
|
public function testLargestSpot() {
|
|
$table = new Table([
|
|
[0, 1, 1, 0, 0],
|
|
[0, 0, 1, 0, 1],
|
|
[0, 1, 0, 0, 1],
|
|
[1, 0, 0, 1, 0],
|
|
]);
|
|
|
|
$spot = new Spot($this->newVisitedTile(1, 2));
|
|
$spot->addTile($this->newVisitedTile(2, 3));
|
|
$spot->addTile($this->newVisitedTile(1, 3));
|
|
$spot->addTile($this->newVisitedTile(3, 2));
|
|
$spot->addTile($this->newVisitedTile(4, 1));
|
|
$spot->setNumber(1);
|
|
|
|
$this->assertEquals([$spot], $table->getLargestSpots());
|
|
}
|
|
|
|
/**
|
|
* Wrapper for a visited tile to reduce repetition. This logic does not fit into the Spot class.
|
|
*
|
|
* @param $row
|
|
* @param $column
|
|
* @return Tile
|
|
*/
|
|
protected function newVisitedTile($row, $column) {
|
|
return new Tile($row, $column, Tile::REPRESENTS_SPOT, true);
|
|
}
|
|
|
|
}
|
|
|