コード例 #1
0
def test_all_cells_dead():
    """ All the cells are dead, no change """
    seed = Board(0, (3, 3),
                 [['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']])

    expected_generation_one = Board(
        1, (3, 3), [['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']])

    generation_one = seed.tick()

    assert generation_one == expected_generation_one
コード例 #2
0
def test_three_live_neighbours_live_four_live_neighbours_die():
    """ Only cells with two or three live neighbours survive a generation"""
    seed = Board(0, (3, 3),
                 [['.', '*', '.'], ['*', '*', '*'], ['.', '*', '.']])

    expected_generation_one = Board(
        1, (3, 3), [['*', '*', '*'], ['*', '.', '*'], ['*', '*', '*']])

    generation_one = seed.tick()

    assert generation_one == expected_generation_one
コード例 #3
0
def test_cells_positioned_at_the_edge():
    """ We consider neighbours outside the grid to be dead """

    seed = Board(0, (3, 3),
                 [['*', '*', '*'], ['*', '.', '*'], ['*', '*', '*']])

    expected_generation_one = Board(
        1, (3, 3), [['*', '.', '*'], ['.', '.', '.'], ['*', '.', '*']])

    generation_one = seed.tick()

    assert generation_one == expected_generation_one
コード例 #4
0
def test_an_adjacent_cell_with_sufficient_neighbours_lives():
    """ Just one cell is live, and it has no neighbours, so must die"""

    seed = Board(0, (3, 3),
                 [['.', '.', '*'], ['.', '*', '.'], ['*', '.', '.']])

    expected_generation_one = Board(
        1, (3, 3), [['.', '.', '.'], ['.', '*', '.'], ['.', '.', '.']])

    generation_one = seed.tick()

    assert generation_one == expected_generation_one
コード例 #5
0
def test_single_cell_with_no_neighbours_dies():
    """ Just one cell is live, and it has no neighbours, so must die"""

    seed = Board(0, (3, 3),
                 [['.', '.', '.'], ['.', '*', '.'], ['.', '.', '.']])

    expected_generation_one = Board(
        1, (3, 3), [['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']])

    generation_one = seed.tick()

    assert generation_one == expected_generation_one
コード例 #6
0
def tick(board: Board):
    new_board = Board(board.generation + 1, Size(board.rows, board.cols))
    for r in range(board.rows):
        for c in range(board.cols):
            if board[r][c] == "*":
                live_count = board.get_live_neigbour_count(r, c)
                if live_count == 2 or live_count == 3:
                    new_board[r][c] = "*"
                else:
                    new_board[r][c] = "."
            else:
                live_count = board.get_live_neigbour_count(r, c)
                if live_count == 3:
                    new_board[r][c] = "*"
                else:
                    new_board[r][c] = "."
    return new_board
コード例 #7
0
def test_render_a_board():
    """We want to render a board, which is a good way to check it"""
    row = Mock(Row)
    row.__str__ = Mock()
    row.__str__.return_value = "...."

    board = Board(0, Size(3, 4), [row, row, row])
    expected_board = ("Generation 0\n" "3 4\n" "....\n" "....\n" "....\n")

    assert expected_board == str(board)
コード例 #8
0
def test_count_two_live_neighbours():
    """We should be able to count our live neighbours"""
    row_one = Mock(Row)
    row_one.__getitem__ = Mock()

    row_one_cellstates = [".", "*", "."]

    def get_row_one_cell(key):
        return row_one_cellstates[key]

    row_one.__getitem__.side_effect = get_row_one_cell

    row_two = Mock(Row)
    row_two.__getitem__ = Mock()

    row_two_cellstates = [".", "*", "."]

    def get_row_two_cell(key):
        return row_two_cellstates[key]

    row_two.__getitem__.side_effect = get_row_two_cell

    row_three = Mock(Row)
    row_three.__getitem__ = Mock()

    row_three_cellstates = [".", "*", "."]

    def get_row_three_cell(key):
        return row_three_cellstates[key]

    row_three.__getitem__.side_effect = get_row_three_cell

    board = Board(0, Size(3, 3), [row_one, row_two, row_three])

    assert board.get_live_neigbour_count(0, 1) == 1
    assert board.get_live_neigbour_count(1, 1) == 2
    assert board.get_live_neigbour_count(2, 1) == 1
コード例 #9
0
def test_we_can_create_a_board():
    """We want to create a simple 3 * 3 board that defaults to dead cells"""
    row = Mock(Row)
    cell = Mock(Cell)
    cell.__str__ = Mock()
    cell.__str__.return_value = "."

    def get_item(key):
        return cell

    row.__getitem__ = Mock()
    row.__getitem__.side_effect = get_item

    board = Board(0, Size(3, 3), [row, row, row])

    for r in range(board.rows):
        for j in range(board.cols):
            assert str(board[r][j]) == "."

    assert cell.__str__.call_count == 9
コード例 #10
0
def test_a_board_has_a_gen_identifier():
    """A board has a generatio"""
    board = Board(0, Size(3, 3))
    assert board.generation == 0