import GOL.GameOfLife;
import org.junit.Ignore;
import org.junit.Test;
import static GOL.GameOfLife.ALIVE;
import static GOL.GameOfLife.DEAD;
import static GOL.GameOfLife.initializedGrid;
import static GOL.GameOfLife.play;
import static org.fest.assertions.api.Assertions.assertThat;
public class GameOfLifeTest {
@Test
public void
a_dead_grid_remains_dead() {
final boolean[][] input = initializedGrid(3);
assertGrid(input, input);
}
@Test
public void
a_live_cell_with_fewer_than_two_live_neighbours_dies() {
assertGrid(
new boolean[][]{
{DEAD, DEAD, DEAD},
{DEAD, ALIVE, DEAD},
{DEAD, DEAD, DEAD}},
initializedGrid((3)));
}
@Test
public void
a_live_cell_with_two_live_neighbors_lives() {
assertGrid(
new boolean[][]{
{ALIVE, DEAD, DEAD},
{DEAD, ALIVE, DEAD},
{DEAD, DEAD, ALIVE}},
new boolean[][]{
{DEAD, DEAD, DEAD},
{DEAD, ALIVE, DEAD},
{DEAD, DEAD, DEAD}}
);
}
@Test
public void
a_live_cell_with_three_live_neighbors_lives() {
assertGrid(
new boolean[][]{
{ALIVE, ALIVE, DEAD, DEAD},
{ALIVE, ALIVE, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD}},
new boolean[][]{
{ALIVE, ALIVE, DEAD, DEAD},
{ALIVE, ALIVE, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD}}
);
}
@Test
public void
a_live_cell_with_more_than_three_live_neighbors_dies() {
assertGrid(
new boolean[][]{
{ALIVE, ALIVE, DEAD, DEAD},
{ALIVE, ALIVE, DEAD, DEAD},
{ALIVE, DEAD, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD}},
new boolean[][]{
{ALIVE, ALIVE, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD},
{ALIVE, ALIVE, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD}}
);
}
@Test
public void
a_dead_cell_with_three_live_neighbors_lives() {
assertGrid(
new boolean[][] {
{DEAD, ALIVE, DEAD, DEAD},
{ALIVE, ALIVE, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD}},
new boolean[][]{
{ALIVE, ALIVE, DEAD, DEAD},
{ALIVE, ALIVE, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD},
{DEAD, DEAD, DEAD, DEAD}}
);
}
@Test
public void
acceptance_test() {
assertGrid(
new boolean[][]{
{DEAD, DEAD, DEAD, DEAD},
{DEAD, ALIVE, DEAD, DEAD},
{DEAD, ALIVE, ALIVE, DEAD},
{DEAD, DEAD, ALIVE, DEAD}},
new boolean[][]{
{DEAD, DEAD, DEAD, DEAD},
{DEAD, ALIVE, ALIVE, DEAD},
{DEAD, ALIVE, ALIVE, DEAD},
{DEAD, ALIVE, ALIVE, DEAD}
});
}
private void assertGrid(boolean[][] input, boolean[][] output) {
assertThat(play(input)).isEqualTo(output);
}
}