Ejemplo n.º 1
0
def test_map_can_be_loaded_from_str():
    m = genmap.MagnitudeMap(canvas_size=(16, 8))
    u = """\
----------------
-              -
- ### # #   #  -
-  #  # ## ##  -
-  #  # # # #  -
-  #  # #   #  -
-              -
----------------"""
    m.load(u)
    assert str(m) == u
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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) == """\
Ejemplo n.º 4
0
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)]
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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
    ]
Ejemplo n.º 7
0
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) == """\
Ejemplo n.º 8
0
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)]
Ejemplo n.º 9
0
def test_gus_gets_unsnapped_shapes():
    m = genmap.MagnitudeMap(canvas_size=(16, 8))
    assert m.get_unsnapped_shapes(1, 1, 36) == [(6, 6)]
Ejemplo n.º 10
0
def test_map_can_draw_an_empty_canvas_with_different_size():
    m = genmap.MagnitudeMap(canvas_size=(40, 16), alley_width=4)
    assert str(m) == """\
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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) == """\
Ejemplo n.º 13
0
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) == """\
Ejemplo n.º 14
0
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)]
Ejemplo n.º 15
0
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)]
Ejemplo n.º 16
0
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)]
Ejemplo n.º 17
0
def test_gss_gets_snapped_shapes():
    m = genmap.MagnitudeMap(canvas_size=(16, 8))
    assert m.get_snapped_shapes(1, 1, 84) == [(14, 6)]
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
def test_grb_gets_right_bounds():
    m = genmap.MagnitudeMap(canvas_size=(16, 8))
    assert m.get_right_bounds(1, 1) == [15]
Ejemplo n.º 20
0
def test_map_can_draw_an_empty_canvas():
    m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=0)
    assert str(m) == """\
Ejemplo n.º 21
0
def test_dsa_draws_shape_at():
    m = genmap.MagnitudeMap(canvas_size=(16, 8))
    m.draw_shape_at((14, 6), 1, 1)
    assert str(m) == """\
Ejemplo n.º 22
0
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
Ejemplo n.º 23
0
def test_add_adds():
    m = genmap.MagnitudeMap(canvas_size=(16, 8), sum_of_magnitudes=10)
    m.add(10, 'a')
    assert str(m) == """\
Ejemplo n.º 24
0
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
Ejemplo n.º 25
0
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)]
Ejemplo n.º 26
0
def test_gbb_gets_bottom_bounds():
    m = genmap.MagnitudeMap(canvas_size=(16, 8))
    assert m.get_bottom_bounds(1, 1) == [7]
Ejemplo n.º 27
0
def test_pt_places_tile():
    m = genmap.MagnitudeMap(canvas_size=(16, 8))
    m.place_tile(m.B, 3, 4)
    assert str(m) == """\
Ejemplo n.º 28
0
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)]
    """
Ejemplo n.º 29
0
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."
Ejemplo n.º 30
0
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