class CA_1D_Blank_Test(unittest.TestCase): def setUp(self): self.columns = 9 self.ca = CellularAutomata(columns=self.columns) def test_load(self): error_row = [[0, 1, 0, 1, 1, 0]] self.assertRaises(StandardError, self.ca.load, error_row) row = [[0, 1, 0, 1, 0, 0, 1, 1, 0]] self.ca.load(row) self.assertEqual(row[0], self.ca.grid[0]) def test_string_rep(self): self.assertEqual("0" * self.columns, self.ca.string_rep()) def test_iter_rows(self): self.assertEqual(1, len(list(self.ca.iter_rows()))) for row in self.ca.iter_rows(): self.assertEqual([0] * self.columns, row) def test_neighbours(self): cells = [c for c, nb in self.ca.iter_neighbours()] nbs = [nb for c, nb in self.ca.iter_neighbours()] self.assertEqual([0] * self.columns, cells) # By default there is no wrap around, so if there is incomplete neighbours then return None self.assertEqual([None] + [[0, 0, 0]] * (self.columns - 2) + [None], nbs)
class CA_1D_Rule_90_Test(unittest.TestCase): def setUp(self): def ruleset(nbs): if nbs == [1, 1, 1]: return 0 elif nbs == [1, 1, 0]: return 1 elif nbs == [1, 0, 1]: return 0 elif nbs == [1, 0, 0]: return 1 elif nbs == [0, 1, 1]: return 1 elif nbs == [0, 1, 0]: return 0 elif nbs == [0, 0, 1]: return 1 elif nbs == [0, 0, 0]: return 0 self.ca = CellularAutomata(columns=9, ruleset=CellularAutomata.RuleSet_1D(90)) self.ca.load([[0, 0, 0, 0, 1, 0, 0, 0, 0]]) def test_first_tick(self): self.assertEqual("000010000", self.ca.string_rep()) self.ca.tick_1D() self.assertEqual("000101000", self.ca.string_rep())
class CA_2D_Test(unittest.TestCase): def setUp(self): self.rows = 4 self.columns = 5 self.ca = CellularAutomata(rows=self.rows, columns=self.columns) def test_string_rep(self): self.assertEqual("\n".join(["".join(["0"] * self.columns)] * self.rows), self.ca.string_rep()) def test_random_seed(self): self.ca.seed_grid() self.assertNotEqual([[0] * self.columns] * self.rows, self.ca.grid) def test_neighbours(self): # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 new_rows = [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [9, 8, 7, 6, 5], [2, 4, 6, 8, 10]] self.ca.load(new_rows) neighbours = [n for c, n in self.ca.iter_neighbours2()] self.assertEqual([2, 5, 4], neighbours[0]) # 0:0 self.assertEqual([1, 3, 5, 4, 3], neighbours[1]) # 0:1 self.assertEqual([4, 2, 1], neighbours[4]) # 0:4 self.assertEqual([2, 3, 4, 4, 2, 8, 7, 6], neighbours[7]) # 1:2 self.assertEqual([4, 5, 2, 6, 5], neighbours[9]) # 1:4