def test_generate_next_generation():
  next_matrix = generate_next_generation(input_matrix)

  for row in range(len(next_matrix)):
    for column in range(len(next_matrix[0])):
      cell = input_matrix[row][column]
      assert next_matrix[row][column] == next_generation_cell(cell, input_matrix, row, column)
def test_next_generation_cell():
  result = 0
  row = 0
  column = 0
  matrix = input_matrix
  cell = input_matrix[row][column]

  counter = 0

  counter += matrix[row - 1][column - 1]
  counter += matrix[row - 1][column]
  counter += matrix[row - 1][(column + 1) % len(matrix[0])]

  counter += matrix[row][column - 1]
  counter += matrix[row][(column + 1) % len(matrix[0])]

  counter += matrix[(row + 1) % len(matrix)][column - 1]
  counter += matrix[(row + 1) % len(matrix)][column]
  counter += matrix[(row + 1) % len(matrix)][(column + 1) % len(matrix[0])]

  if (cell == 0 and counter == 3):
    result = 1
  elif (cell == 1 and (counter == 2 or counter == 3)):
    result = 1
  else:
    result = 0

  assert result == next_generation_cell(0, input_matrix, 0, 0)
def test_next_generation_cell_remains_one_wrong():
  assert 0 != next_generation_cell(input_matrix[2][2] , input_matrix, 2, 2)
def test_next_generation_cell_remains_zero_wrong():
  assert 1 != next_generation_cell(input_matrix[0][0] , input_matrix, 0, 0)
def test_next_generation_cell_becomes_zero_wrong():
  assert 1 != next_generation_cell(input_matrix[1][2] , input_matrix, 1, 2)
def test_next_generation_cell_becomes_one_wrong():
  assert 0 != next_generation_cell(input_matrix[2][1] , input_matrix, 2, 1)