def test_single_ca(self): """ Test single CA model. Run vanilla GoL for 1000 steps and make sure board checksum is correct. """ for _ in range(self.num_runs): model = GameOfLife(GOLExperiment) for _ in range(self.num_steps): model.step() cells = model.gpu.arrays.cells.get()[:model.cells_num] checksum = binascii.crc32(cells) self.assertEqual(2981695958, checksum, "Wrong field checksum.")
def test_random_full(self): """Test omitted size and position behavior.""" bsca = GameOfLife(TestExperiment) vals = {'state': RandInt(0, 1)} pattern = BigBang(vals=vals) cells = np.zeros((10000, ), dtype=np.int32) pattern.generate(cells, bsca) self.assertGreater(np.sum(cells), 0, "Empty board.")
def test_wrong_pos(self): """Test position auto-correction to make area fit to field.""" bsca = GameOfLife(TestExperiment) vals = {'state': RandInt(0, 1)} pattern = BigBang(pos=(90, 90), size=(20, 20), vals=vals) cells = np.zeros((10000, ), dtype=np.int32) pattern.generate(cells, bsca) self.assertEqual(pattern.pos[0], 80, "Wrong X position.") self.assertEqual(pattern.pos[1], 80, "Wrong Y position.")
def test_multiple_ca(self): """Test two CellularAutomaton instances could be ran in parallel.""" mod1 = GameOfLife(GOLExperiment) mod2 = GameOfLife(GOLExperiment) for _ in range(self.num_steps): mod1.step() mod2.step() checksum = binascii.crc32(mod1.gpu.arrays.cells.get()[:mod1.cells_num]) self.assertEqual(2981695958, checksum, "Wrong field checksum (CA #1).") checksum = binascii.crc32(mod2.gpu.arrays.cells.get()[:mod2.cells_num]) self.assertEqual(2981695958, checksum, "Wrong field checksum (CA #2).")
def test_2d(self): """Test same field is generated with same seed.""" bsca = GameOfLife(TestExperiment) vals = {'state': RandInt(0, 1)} seed = PrimordialSoup(vals=vals) cells = np.zeros((10000, ), dtype=np.int32) seed.random = LocalRandom("test") seed.generate(cells, bsca) self.assertEqual(binascii.crc32(cells[:10000]), 1648433356, "Wrong field checksum.")
def test_load_random(self): """Save CA and test it's RNG state is identical after load.""" ca1 = GameOfLife(GOLExperiment) ca1.save("test.ca") ca2 = GameOfLife(GOLExperiment) ca2.load("test.ca") self.assertEqual(ca1.random.standard.randint(1, 1000), ca2.random.standard.randint(1, 1000), "Wrong standard RNG state.") self.assertEqual(ca1.random.numpy.randint(1, 1000), ca2.random.numpy.randint(1, 1000), "Wrong numpy RNG state.") os.remove("test.ca")
def test_2d(self): """Test all cells are inside region after generation.""" bsca = GameOfLife(TestExperiment) cells = bsca.gpu.arrays.cells.get()[:bsca.cells_num] pos = (32, 20) size = (10, 10) for i in np.where(cells == 1)[0]: coord_x, coord_y = self.index_to_coord(i) self.assertGreaterEqual(coord_x, pos[0], "Wrong right bound.") self.assertGreaterEqual(coord_y, pos[1], "Wrong upper bound.") self.assertLessEqual(coord_x, size[0] + pos[0], "Wrong left bound.") self.assertLessEqual(coord_y, size[1] + pos[1], "Wrong lower bound.")
def test_pause(self): """Test CA is not evolving when paused.""" model = GameOfLife(GOLExperiment) model.paused = False cells_num = model.cells_num cells = model.gpu.arrays.cells.get()[:cells_num] checksum_before = binascii.crc32(cells) model.step() cells = model.gpu.arrays.cells.get()[:cells_num] checksum_after = binascii.crc32(cells) self.assertNotEqual(checksum_before, checksum_after, "CA is paused.") model.paused = True checksum_before = checksum_after model.step() cells = model.gpu.arrays.cells.get()[:cells_num] checksum_after = binascii.crc32(cells) self.assertEqual(checksum_before, checksum_after, "CA is not paused.")
def test_render(self): """ Test basic rendering working. Run vanilla GoL for 1000 steps and check resulting image's checksum. """ experiment = GOLExperiment experiment.zoom = 1 model = GameOfLife(experiment) model.set_viewport(experiment.size) for _ in range(self.num_steps): model.step() img = model.render() self.assertEqual(1955702083, binascii.crc32(img / 255), "Wrong image checksum.")
def test_wrong_field_size(self): """Test wrong field size set in experiment.""" with self.assertRaises(XenticaException): GameOfLife(GOLExperimentBroken)
def test_save_load(self): """Save CA and test it's state is identical after load.""" ca1 = GameOfLife(GOLExperiment) for _ in range(self.num_steps // 2): ca1.step() ca1.save("test.ca") ca2 = GameOfLife(GOLExperiment) ca2.load("test.ca") for _ in range(self.num_steps // 2): ca2.step() checksum = binascii.crc32(ca2.gpu.arrays.cells.get()[:ca2.cells_num]) self.assertEqual(2981695958, checksum, "Wrong field checksum.") os.remove("test.ca")
def setUp(self): """Set up necessary things before each test.""" self.model = GameOfLife(GOLExperiment) self.gui = DummyGui()