#!/usr/bin/env python # encoding: utf-8 """ test_life.py Created by Timothy Grant on 2008-05-20. Copyright (c) 2008 __MyCompanyName__. All rights reserved. """ import sys import os import random import life def test__Model(): m = life.Model(5, 5, 0.5) assert m.width == 5 assert m.height == 5 assert m.generation == 0 assert m.deaths == 0 assert m.births == 0 assert m.gen_deaths == 0 assert m.gen_births == 0 assert m.density == 0.5 assert m.cells == [ ['D', 'D', 'D', 'D', 'D'], ['D', 'D', 'D', 'D', 'D'], ['D', 'D', 'D', 'D', 'D'], ['D', 'D', 'D', 'D', 'D'], ['D', 'D', 'D', 'D', 'D'], ] def test__Model_reset_cell_population(): random.seed(42) m = life.Model(5, 5) m.reset_cell_population() assert m.cells == [ ['D', 'D', 'D', 'D', 'D'], ['D', 'L', 'D', 'D', 'D'], ['D', 'D', 'D', 'D', 'D'], ['L', 'D', 'D', 'D', 'D'], ['D', 'D', 'D', 'D', 'D'] ] m = life.Model(5, 5, 0.5) m.reset_cell_population() assert m.cells == [ ['L', 'D', 'D', 'D', 'D'], ['L', 'D', 'L', 'D', 'D'], ['L', 'D', 'D', 'D', 'L'], ['L', 'D', 'L', 'L', 'D'], ['L', 'L', 'L', 'L', 'D'] ] def test__Model_resize_grid(): m = life.Model(5, 5) m.cells = [ ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'] ] m.resize_grid(7, 7) assert m.cells == [ ['L', 'L', 'L', 'L', 'L', 'D', 'D'], ['L', 'L', 'L', 'L', 'L', 'D', 'D'], ['L', 'L', 'L', 'L', 'L', 'D', 'D'], ['L', 'L', 'L', 'L', 'L', 'D', 'D'], ['L', 'L', 'L', 'L', 'L', 'D', 'D'], ['D', 'D', 'D', 'D', 'D', 'D', 'D'], ['D', 'D', 'D', 'D', 'D', 'D', 'D'] ] m.resize_grid(5, 5) assert m.cells == [ ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'], ['L', 'L', 'L', 'L', 'L'] ] def test__Model_reset_cell(): m = life.Model(3, 3) m.cells = [ ['D', 'D', 'D'], ['D', 'D', 'D'], ['D', 'D', 'D'] ] m.reset_cell(1, 1) assert m.cells == [ ['D', 'D', 'D'], ['D', 'L', 'D'], ['D', 'D', 'D'] ] m.reset_cell(1, 1) assert m.cells == [ ['D', 'D', 'D'], ['D', 'D', 'D'], ['D', 'D', 'D'] ] def test__Model_iterate_model__cell_dies_when_lonely(): m = life.Model(3, 3) # No Neighbours m.cells = [ ['L', 'D', 'L'], ['D', 'D', 'D'], ['L', 'D', 'L'] ] m.iterate_model() assert m.cells == [ ['D', 'D', 'D'], ['D', 'D', 'D'], ['D', 'D', 'D'] ] # One Neigbour m.cells = [ ['L', 'L', 'D'], ['D', 'D', 'D'], ['D', 'D', 'D'] ] m.iterate_model() assert m.cells == [ ['D', 'D', 'D'], ['D', 'D', 'D'], ['D', 'D', 'D'] ] def test__Model_iterate_model__cell_dies_when_overcrowded(): m = life.Model(3, 3) m.cells = [ ['L', 'L', 'L'], ['L', 'L', 'L'], ['L', 'L', 'L'] ] m.iterate_model() assert m.cells == [ ['L', 'D', 'L'], ['D', 'D', 'D'], ['L', 'D', 'L'] ] def test__Model_iterate_model__cell_born_when_it_has_X_neighbours(): m = life.Model(4, 4) m.cells = [ ['D', 'L', 'L', 'D'], ['D', 'D', 'L', 'D'], ['L', 'D', 'D', 'L'], ['L', 'L', 'L', 'L'] ] m.iterate_model() assert m.cells == [ ['D', 'L', 'L', 'D'], ['D', 'D', 'L', 'L'], ['L', 'D', 'D', 'L'], ['L', 'L', 'L', 'L'] ] def test__Model_iterate_model__general_cases(): m = life.Model(4, 4) m.cells = [ ['D', 'D', 'D', 'D'], ['D', 'L', 'L', 'D'], ['D', 'L', 'L', 'D'], ['D', 'D', 'D', 'D'] ] m.iterate_model() assert m.cells == [ ['D', 'D', 'D', 'D'], ['D', 'L', 'L', 'D'], ['D', 'L', 'L', 'D'], ['D', 'D', 'D', 'D'] ] m.cells = [ ['D', 'D', 'D', 'D'], ['D', 'L', 'L', 'L'], ['D', 'D', 'D', 'D'], ['D', 'D', 'D', 'D'] ] m.iterate_model() assert m.cells == [ ['D', 'D', 'L', 'D'], ['D', 'D', 'L', 'D'], ['D', 'D', 'L', 'D'], ['D', 'D', 'D', 'D'] ] def test__Model_iterate_model__counters_update_correctly(): m = life.Model(4, 4) m.cells = [ ['D', 'L', 'L', 'D'], ['D', 'D', 'L', 'D'], ['L', 'D', 'D', 'L'], ['L', 'L', 'L', 'L'] ] m.population = 9 m.iterate_model() assert m.population == 10 assert m.births == 1 assert m.gen_births == 1 m.iterate_model() print m.cells assert m.population == 9 assert m.births == 2 assert m.gen_births == 1 assert m.deaths == 2 assert m.gen_deaths == 2