def test_map_can_be_loaded_from_str(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) u = """\ ---------------- - - - ### # # # - - # # ## ## - - # # # # # - - # # # # - - - ----------------""" m.load(u) assert str(m) == u
def test_bsf_doesnt_ignore_intervening_shape_when_looking_for_enough_room(): m = genmap.MagnitudeMap(canvas_size=(16, 8), building_min=1) m.load("""\ ---------------- - - ------ - --###- - ------ - - - - # - ----------------""") assert not m.enough_room(3, 4, 1, 1) assert m.bad_shape_for((3, 4), 1, 1)
def test_add_will_two_snap_to_a_soft_and_hard_bound(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=15, building_min=1) m.load("""\ ---------------- ------- - --####- - --####- - ------- - - - - - ----------------""") m.add(8, 'a') assert str(m) == """\
def test_gss_will_two_snap_to_a_soft_and_hard_bound(): m = genmap.MagnitudeMap(canvas_size=(16, 8), building_min=1) m.load("""\ ---------------- ------- - --####- - --####- - ------- - - - - - ---------------- """) assert m.find_starting_corner() == (7, 1) assert m.get_bottom_bounds(7, 1) == [5, 7] assert m.get_snapped_shapes(7, 1, 32) == [(8, 4)]
def test_bsf_rejects_when_not_enough_room(): m = genmap.MagnitudeMap(canvas_size=(16, 8), building_min=1) m.load("""\ ---------------- - - - - - - - - - --- - - -#- - ----------------""") assert m.enough_room(3, 4, 1, 1) assert not m.bad_shape_for((3, 4), 1, 1) assert not m.enough_room(3, 5, 1, 1) assert m.bad_shape_for((3, 5), 1, 1) assert m.enough_room(14, 3, 1, 1) assert not m.bad_shape_for((14, 3), 1, 1) assert not m.enough_room(15, 3, 1, 1) assert m.bad_shape_for((15, 3), 1, 1)
def test_ai_handles_two_simple_pathways(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=10, building_min=1) m.add(5, 'a', shape_choice=1) m.add(5, 'b') assert str(m) == """\ ---------------- ---------------- --#####--#####-- --#####--#####-- --#####--#####-- --#####--#####-- ---------------- ----------------""" assert m.assignments == {} solutions = m.assign_ids({ 'art': ['x'], 'science': ['y'] }, take_first=False) assert solutions == [ { 'art': [('a', 'x')], 'science': [('b', 'y')] } #, {'art': [('a', 'y')], 'science': [('b', 'x')]} , { 'art': [('b', 'x')], 'science': [('a', 'y')] } #, {'art': [('b', 'y')], 'science': [('a', 'x')]} ] assert tuple(sorted(m.assignments.items())) in [ tuple(sorted(flatten(s))) for s in solutions ]
def test_dhaas_draws_half_alleys_around_shape(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) m.draw_half_alleys_around_shape((5, 1), 2, 2) assert str(m) == """\
def test_gus_gets_multiple_unsnapped_shapes(): m = genmap.MagnitudeMap(canvas_size=(16, 12)) # NB: bigger canvas assert m.get_unsnapped_shapes(1, 1, 48) == [(6, 8), (7, 6), (8, 6)]
def test_gus_gets_unsnapped_shapes(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) assert m.get_unsnapped_shapes(1, 1, 36) == [(6, 6)]
def test_map_can_draw_an_empty_canvas_with_different_size(): m = genmap.MagnitudeMap(canvas_size=(40, 16), alley_width=4) assert str(m) == """\
def test_bsf_rejects_when_too_skinny(): m = genmap.MagnitudeMap(canvas_size=(16, 8), building_min=1, aspect_min=0.3) assert m.too_skinny(14, 3) assert m.bad_shape_for((14, 3), 1, 1)
def test_add_adds_the_other_shape_for_a_half_magnitude(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=10, building_min=1) m.add(5, 'a', shape_choice=1) assert str(m) == """\
def test_dsa_draws_shape_that_doesnt_use_whole_canvas(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) m.draw_shape_at((8, 6), 7, 1) assert str(m) == """\
def test_gss_respects_building_min_again(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=10, building_min=1) m.add(9, 'a', shape_choice=1) assert m.get_snapped_shapes(12, 1, 18) == [(3, 6)]
def test_gss_respects_building_min(): m = genmap.MagnitudeMap(canvas_size=(16, 8), building_min=1) assert m.get_snapped_shapes(1, 1, 42) == [(14, 3), (7, 6)] m = genmap.MagnitudeMap(canvas_size=(16, 8), building_min=2) assert m.get_snapped_shapes(1, 1, 42) == [(7, 6)]
def test_gss_gets_snapped_shape_for_half_area(): m = genmap.MagnitudeMap(canvas_size=(16, 8), building_min=1) assert m.get_snapped_shapes(1, 1, 42) == [(14, 3), (7, 6)]
def test_gss_gets_snapped_shapes(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) assert m.get_snapped_shapes(1, 1, 84) == [(14, 6)]
def test_map_requires_alleys_to_be_even_widths(): genmap.MagnitudeMap(canvas_size=(16, 8), alley_width=2) with raises(genmap.UnevenAlleys): genmap.MagnitudeMap(canvas_size=(16, 8), alley_width=3) genmap.MagnitudeMap(canvas_size=(16, 8), alley_width=4)
def test_grb_gets_right_bounds(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) assert m.get_right_bounds(1, 1) == [15]
def test_map_can_draw_an_empty_canvas(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=0) assert str(m) == """\
def test_dsa_draws_shape_at(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) m.draw_shape_at((14, 6), 1, 1) assert str(m) == """\
def test_ai_doesnt_cross_pathways(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=84, building_min=1) m.add(24, 'a') m.add(15, 'b', shape_choice=2) m.add(15, 'c') m.add(30, 'd', shape_choice=1) assert str(m) == """\ ---------------- ---------------- --##--###--###-- --##------------ --##------------ --##--########-- ---------------- ----------------""" assert m.assignments == {} pathway = {'art': ['w', 'x', 'y', 'z']} expected = [ { 'art': [('a', 'w'), ('b', 'x'), ('c', 'y'), ('d', 'z')] }, { 'art': [('a', 'w'), ('b', 'x'), ('d', 'y'), ('c', 'z')] } #, {'art': [('a', 'w'), ('c', 'x'), ('b', 'y'), ('d', Nope)]} #, {'art': [('a', 'w'), ('c', 'x'), ('d', 'y'), ('b', Nope)]} , { 'art': [('a', 'w'), ('d', 'x'), ('b', 'y'), ('c', 'z')] }, { 'art': [('a', 'w'), ('d', 'x'), ('c', 'y'), ('b', 'z')] }, { 'art': [('b', 'w'), ('a', 'x'), ('c', 'y'), ('d', 'z')] }, { 'art': [('b', 'w'), ('a', 'x'), ('d', 'y'), ('c', 'z')] }, { 'art': [('b', 'w'), ('c', 'x'), ('a', 'y'), ('d', 'z')] }, { 'art': [('b', 'w'), ('c', 'x'), ('d', 'y'), ('a', 'z')] } #, {'art': [('b', 'w'), ('d', 'x'), ('a', 'y'), ('c', Nope)]} #, {'art': [('b', 'w'), ('d', 'x'), ('c', 'y'), ('a', Nope)]} #, {'art': [('c', 'w'), ('a', 'x'), ('b', 'y'), ('d', Nope)]} #, {'art': [('c', 'w'), ('a', 'x'), ('d', 'y'), ('b', Nope)]} , { 'art': [('c', 'w'), ('b', 'x'), ('a', 'y'), ('d', 'z')] }, { 'art': [('c', 'w'), ('b', 'x'), ('d', 'y'), ('a', 'z')] }, { 'art': [('c', 'w'), ('d', 'x'), ('a', 'y'), ('b', 'z')] }, { 'art': [('c', 'w'), ('d', 'x'), ('b', 'y'), ('a', 'z')] }, { 'art': [('d', 'w'), ('a', 'x'), ('b', 'y'), ('c', 'z')] }, { 'art': [('d', 'w'), ('a', 'x'), ('c', 'y'), ('b', 'z')] } #, {'art': [('d', 'w'), ('b', 'x'), ('a', 'y'), ('c', Nope)]} #, {'art': [('d', 'w'), ('b', 'x'), ('c', 'y'), ('a', Nope)]} , { 'art': [('d', 'w'), ('c', 'x'), ('a', 'y'), ('b', 'z')] }, { 'art': [('d', 'w'), ('c', 'x'), ('b', 'y'), ('a', 'z')] } ] actual = m.assign_ids(pathway, take_first=False) # Reduce the set of actual down to those where w,x,y,z are in order, since the order of the # assignment doesn't actually matter to what we're trying to test here. actual = list( filter(lambda a: [b[1] for b in a['art']] == list('wxyz'), actual)) assert actual == expected
def test_add_adds(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=10) m.add(10, 'a') assert str(m) == """\
def test_dta_varies_with_canvas_size(): m = genmap.MagnitudeMap(canvas_size=(16, 16), sum_of_magnitudes=20) assert m.determine_target_area(10) == 98
def test_gss_gets_snapped_shape_for_half_area_on_larger_canvas(): m = genmap.MagnitudeMap(canvas_size=(16, 12), building_min=1) assert m.get_snapped_shapes(1, 1, 42) == [(14, 3), (4, 10)]
def test_gbb_gets_bottom_bounds(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) assert m.get_bottom_bounds(1, 1) == [7]
def test_pt_places_tile(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) m.place_tile(m.B, 3, 4) assert str(m) == """\
def test_gss_exhibits_pinch_prevention(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=10, building_min=1) assert m.get_snapped_shapes(1, 1, 75) == [(14, 3), (11, 6)] """
def test_pt_rejects_bad_tile(): m = genmap.MagnitudeMap(canvas_size=(16, 8)) with raises(genmap.BadTile) as err: m.place_tile('$', 3, 4) assert str(err.value) == "Can't place '$' at (3,4). Bad tile."
def test_dta_prorates_based_on_sum_of_magnitudes(): m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=20) assert m.determine_target_area(10) == 42