def test_two_bordering_bees_in_swarms(): simple_map = zeros8((2, 2)) simple_map[1, 0] = -5 simple_map[1, 1] = 4 b = BeeClust(simple_map) assert len(b.swarms) == 1 assert swt(b.swarms) == [[(1, 0), (1, 1)]]
def test_heat_distribution_along_diagonal(): simple_map = zeros8((8, 8)) simple_map[0, 0] = HEATER b = BeeClust(simple_map) TEMPS = [40, 38.2, 30.1, 27.4, 26.05, 25.24, 24.7, 24.31428571] for i in range(-8, 8): assert numpy.isclose(b.heatmap.diagonal(i), TEMPS[abs(i):]).all()
def test_two_bees_in_swarms_corner(): simple_map = zeros8((3, 3)) simple_map[1, 0] = -5 simple_map[0, 1] = 4 b = BeeClust(simple_map) assert len(b.swarms) == 2 assert swt(b.swarms) == [[(0, 1)], [(1, 0)]]
def test_score_one_bee_heater(): simple_map = zeros8((3, 4)) simple_map[1, 1] = -2 simple_map[1, 2] = HEATER b = BeeClust(simple_map) assert T_HEATER > b.score > T_ENV assert math.isclose(b.score, 38.2)
def test_weird_map_shape_raises_ValueError(): for shape in (8, ), (2, 2, 2): kwargs = OrderedDict(**KWARGS) kwargs['map'] = zeros8(shape) with pytest.raises(ValueError) as excinfo: BeeClust(**kwargs) assert ('shape' in str(excinfo.value) or 'dim' in str(excinfo.value))
def test_score_two_bees_heater_cooler(): simple_map = zeros8((3, 4)) simple_map[0, 0] = COOLER simple_map[2, 3] = HEATER simple_map[0, 1] = 2 simple_map[2, 2] = 3 b = BeeClust(simple_map) assert math.isclose(b.score, 22.675)
def test_two_bees_in_bees(): simple_map = zeros8((2, 2)) simple_map[1, 0] = -5 simple_map[1, 1] = 4 b = BeeClust(simple_map) assert len(b.bees) == 2 assert (1, 0) in sbt(b.bees) assert (1, 1) in sbt(b.bees)
def test_wall_stops_cool(): simple_map = zeros8((3, 3)) simple_map[:, 1] = WALL simple_map[:, 2] = COOLER b = BeeClust(simple_map) assert math.isclose(b.heatmap[0, 0], T_ENV) assert math.isclose(b.heatmap[1, 0], T_ENV) assert math.isclose(b.heatmap[2, 0], T_ENV)
def test_score_changes(): simple_map = zeros8((3, 1)) simple_map[1, 0] = 1 simple_map[2, 0] = HEATER b = BeeClust(simple_map, p_changedir=0) score = b.score b.tick() assert b.score < score
def test_swarms_change_after_tick(): simple_map = zeros8((2, 2)) simple_map[1, 0] = 1 b = BeeClust(simple_map, p_changedir=0) assert swt(b.swarms) == [[(1, 0)]] b.tick() assert len(b.swarms) == 1 assert len(swt(b.swarms)[0]) == 1 assert swt(b.swarms)[0][0] != (1, 0)
def test_bees_change_after_tick(): simple_map = zeros8((2, 2)) simple_map[1, 0] = 1 b = BeeClust(simple_map, p_changedir=0) assert len(b.bees) == 1 assert sbt(b.bees)[0] == (1, 0) b.tick() assert len(b.bees) == 1 assert sbt(b.bees)[0] != (1, 0)
def test_recalculate_heat(): simple_map = zeros8((3, 4)) b = BeeClust(simple_map) b.heatmap[:, :] = 100 assert numpy.isclose(b.heatmap, 100).all() b.recalculate_heat() assert numpy.isclose(b.heatmap, T_ENV).all() b.map[:, :] = HEATER b.recalculate_heat() assert numpy.isclose(b.heatmap, T_HEATER).all()
def test_heatmap_central_heater(): simple_map = zeros8((3, 3)) simple_map[1, 1] = HEATER b = BeeClust(simple_map) assert b.heatmap[1, 1] == T_HEATER for x in range(3): for y in range(3): if (x, y) != (1, 1): assert T_ENV < b.heatmap[x, y] < T_HEATER assert math.isclose(b.heatmap[x, y], 38.2)
def test_heatmap_central_cooler(): simple_map = zeros8((3, 3)) simple_map[1, 1] = COOLER b = BeeClust(simple_map) assert b.heatmap[1, 1] == T_COOLER for x in range(3): for y in range(3): if (x, y) != (1, 1): assert T_ENV > b.heatmap[x, y] > T_COOLER assert math.isclose(b.heatmap[x, y], 6.7)
def test_custom_temperatures(): simple_map = zeros8((4, 4)) simple_map[0, -1] = HEATER simple_map[-1, 0] = COOLER cooler, env, heater = -20, 0, 20 b = BeeClust(simple_map, T_cooler=cooler, T_env=env, T_heater=heater) assert math.isclose(b.heatmap[0, -1], heater) assert math.isclose(b.heatmap[-1, 0], cooler) assert numpy.isclose(b.heatmap.diagonal(), env).all() assert math.isclose(b.heatmap[1, -2], 9) assert math.isclose(b.heatmap[-2, 1], -9)
def test_tick_empty(): original = zeros8((3, 4)) original[1, 2] = 5 # wall original[1, 3] = 6 # heater b = BeeClust(original.copy()) assert b.map is not original # this could go to infinity, but 42 would do # no monkey business at 43, please for _ in range(42): assert b.tick() == 0 assert (b.map == original).all()
def loner(what): """Puts {what} into the central field, surrounded by nothing but sorrow""" simple_map = zeros8((3, 3)) simple_map[1, 1] = what return simple_map
def test_takes_and_exposes_numpy_map(): simple_map = zeros8((4, 6)) simple_map[1, 3] = 5 simple_map[1, 4] = -1 b = BeeClust(simple_map) assert (b.map == simple_map).all()
def test_recalculate_heat_is_callable(): b = BeeClust(zeros8((2, 2))) b.recalculate_heat()
def test_one_bee_in_bees(): simple_map = zeros8((2, 2)) simple_map[1, 0] = -3 b = BeeClust(simple_map) assert len(b.bees) == 1 assert sbt(b.bees)[0] == (1, 0)
def test_empty_map_empty_bees(): b = BeeClust(zeros8((2, 2))) assert len(b.bees) == 0
def test_forget_is_callable(): b = BeeClust(zeros8((2, 2))) b.forget()
def test_one_bee_in_swarms(): simple_map = zeros8((2, 2)) simple_map[1, 0] = -3 b = BeeClust(simple_map) assert swt(b.swarms) == [[(1, 0)]]
import pytest from collections import OrderedDict from helpers import zeros8 from beeclust import BeeClust MAP = zeros8((3, 2)) KWARGS = OrderedDict( map=MAP, p_changedir=0.2, p_wall=0.8, p_meet=0.8, k_temp=0.9, k_stay=50, T_ideal=35, T_heater=40, T_cooler=5, T_env=22, min_wait=2, ) def test_init_all(): BeeClust(**KWARGS) def test_init_all_postional(): BeeClust(*KWARGS.values()) def test_optional_kwargs(): for key in KWARGS.keys():
def test_heatmap_empty(): simple_map = zeros8((3, 4)) b = BeeClust(simple_map) assert numpy.isclose(b.heatmap, T_ENV).all()
def test_score_is_a_float(): simple_map = zeros8((4, 6)) simple_map[1, 3] = 1 b = BeeClust(simple_map) assert isinstance(b.score, float)
def test_tick_returns_int(): b = BeeClust(zeros8((4, 6))) assert isinstance(b.tick(), int)
def test_score_one_bee(): simple_map = zeros8((3, 4)) simple_map[1, 1] = 3 b = BeeClust(simple_map) assert math.isclose(b.score, T_ENV)
def test_swarms_is_a_collection(): b = BeeClust(zeros8((2, 2))) assert isinstance(b.swarms, abc.Collection)
def test_empty_map_empty_swarms(): b = BeeClust(zeros8((2, 2))) assert len(b.swarms) == 0