1
0
Fork 0
wow-raid-bingo/tests/Unit/Game/GameBoardStateTest.php

152 lines
4.4 KiB
PHP

<?php
namespace Tests\Unit\Game;
use App\Game\GameBoardState;
use PHPUnit\Framework\TestCase;
class GameBoardStateTest extends TestCase
{
public function state(): array
{
return [
// 4x4 board
// ---------------
// 0, 1, 2, 3
// 4, 5, 6, 7
// 8, 9, 10, 11
// 12, 13, 14, 15
[4, 4, [], [1, 5, 8], 0],
[4, 4, [4, 5, 6, 7], [2, 3], 1],
[4, 4, [8, 9, 10, 11, 2, 6, 14], [15], 2],
// 5x3 board
// ---------------
// 0, 1, 2, 3, 4
// 5, 6, 7, 8, 9
// 10, 11, 12, 13, 14
[5, 3, [], [2, 4, 5, 8, 13], 0],
[5, 3, [5, 6, 7, 8, 9], [0, 3, 4, 10], 1],
[5, 3, [0, 5, 10, 3, 8, 13, 4, 9, 14], [6, 12], 3],
// 10x10 board
// --------------------------------------
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
// 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
// 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
// 30, 31, 32, 33, 34, 35, 36, 37, 38, 39
// 40, 41, 42, 43, 44, 45, 46, 47, 48, 49
// 50, 51, 52, 53, 54, 55, 56, 57, 58, 59
// 60, 61, 62, 63, 64, 65, 66, 67, 68, 69
// 70, 71, 72, 73, 74, 75, 76, 77, 78, 79
// 80, 81, 82, 83, 84, 85, 86, 87, 88, 89
// 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
[10, 10, [], [59, 31, 52], 0],
[10, 10, [3, 13, 23, 33, 43, 53, 63, 73, 83, 93], [7, 11, 24, 25, 31, 32, 57, 66, 90, 91], 1],
[10, 10, [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 4, 14, 34, 44, 54, 64, 74, 84, 94], [0, 32, 61, 78, 98], 2]
];
}
/**
* @dataProvider state
*/
public function test_is_win(int $w, int $h, array $state_win, array $state_press, int $winning)
{
$board = new GameBoardState($w, $h);
foreach ($state_win + $state_press as $pos) {
$board->set($pos);
}
foreach ($state_win as $pos) {
$this->assertTrue($board->isWin($pos));
}
foreach ($state_press as $pos) {
$this->assertFalse($board->isWin($pos));
}
}
/**
* @dataProvider state
*/
public function test_is_pressed(int $w, int $h, array $state_win, array $state_press, int $winning)
{
$board = new GameBoardState($w, $h);
foreach ($state_win + $state_press as $pos) {
$board->set($pos);
}
foreach ($state_win + $state_press as $pos) {
$this->assertTrue($board->isPressed($pos));
}
}
/**
* @dataProvider state
*/
public function test_get_num_win(int $w, int $h, array $state_win, array $state_press, int $winning)
{
$board = new GameBoardState($w, $h);
foreach ($state_win + $state_press as $pos) {
$board->set($pos);
}
$this->assertSame($winning, $board->getNumWinRows());
}
public function test_deselect_winning_pattern()
{
$board = new GameBoardState(3, 3);
// 0 [1] 2
// [3] [4] [5]
// 6 [7] 8
$board->set(1);
$board->set(4);
$board->set(7);
$board->set(3);
$board->set(5);
$this->assertTrue($board->isPressed(1));
$this->assertTrue($board->isPressed(3));
$this->assertTrue($board->isPressed(4));
$this->assertTrue($board->isPressed(5));
$this->assertTrue($board->isPressed(7));
$this->assertTrue($board->isWin(1));
$this->assertTrue($board->isWin(3));
$this->assertTrue($board->isWin(4));
$this->assertTrue($board->isWin(5));
$this->assertTrue($board->isWin(7));
$this->assertSame(2, $board->getNumWinRows());
// 0 [1] 2
// [3] 4 [5]
// 6 [7] 8
$board->set(4, false);
$this->assertFalse($board->isWin(1));
$this->assertFalse($board->isWin(3));
$this->assertFalse($board->isWin(4));
$this->assertFalse($board->isWin(5));
$this->assertFalse($board->isWin(7));
$this->assertTrue($board->isPressed(1));
$this->assertTrue($board->isPressed(3));
$this->assertFalse($board->isPressed(4));
$this->assertTrue($board->isPressed(5));
$this->assertTrue($board->isPressed(7));
$this->assertSame(0, $board->getNumWinRows());
}
}