예제 #1
0
def test_f_3__an_army_being_convoyed_can_receive_support():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'London',
                          'Brest'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'English Channel', 'London', 'Brest'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Mid-Atlantic Ocean', 'London', 'Brest'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Paris', 'Brest'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.TROOP, 'Brest'): None,
            Unit(UnitTypes.FLEET, 'English Channel'): None,
            Unit(UnitTypes.FLEET, 'Mid-Atlantic Ocean'): None,
        },
        'France': {
            Unit(UnitTypes.TROOP, 'Paris'): None,
        },
    }
def test_d_16__convoying_a_unit_dislodging_a_unit_of_same_power_is_allowed():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'London'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'North Sea', 'Belgium', 'London'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Belgium',
                          'London'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'English Channel', 'Belgium', 'London'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.TROOP, 'London'): {
                'Yorkshire',
                'Wales',
            },
            Unit(UnitTypes.FLEET, 'North Sea'): None,
        },
        'France': {
            Unit(UnitTypes.FLEET, 'English Channel'): None,
            Unit(UnitTypes.TROOP, 'London'): None,
        },
    }
def test_three_country_rotation_with_external_disruption_overcome_by_support():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Galicia', 'Bohemia'),
        ]),
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Bohemia', 'Vienna'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna', 'Galicia'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Budapest', 'Vienna', 'Galicia'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Ukraine', 'Galicia'),
        ]),
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Bohemia'): None,
        },
        'Austria': {
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Turkey': {
            Unit(UnitTypes.TROOP, 'Galicia'): None,
            Unit(UnitTypes.TROOP, 'Budapest'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Ukraine'): None,
        },
    }
def test_d_15__defender_cannot_cut_support_for_attack_on_itself():
    helper = TurnHelper([
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Black Sea',
                          'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Constantinople Coast', 'Black Sea', 'Ankara Coast'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ankara Coast',
                          'Constantinople Coast'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Russia': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): None,
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): None,
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): {
                'Armenia Coast',
            },
        },
    }
def test_d_13__supporing_foreign_unit_to_dislodge_returning_own_unit_prohibited(
):
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Trieste Coast',
                          'Adriatic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Vienna',
                          'Venice', 'Trieste'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Venice',
                          'Trieste'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Apulia Coast',
                          'Adriatic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Trieste Coast'): None,
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.FLEET, 'Apulia Coast'): None,
        },
    }
def test_d_14__supporing_foreign_unit_not_enough_to_prevent_dislodgement():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.HOLD, UnitTypes.FLEET, 'Trieste Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Vienna',
                          'Venice', 'Trieste'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Venice',
                          'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Venice', 'Trieste'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Trieste Coast'): {
                'Albania Coast',
            },
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Trieste'): None,
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
        },
    }
def test_d_1__supported_hold_can_prevent_dislodgement():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Trieste',
                          'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Trieste', 'Venice'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Venice'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
            Unit(UnitTypes.TROOP, 'Trieste'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
        },
    }
def test_d_11__no_self_dislodgement_of_returning_unit():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Berlin',
                          'Prussia'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Kiel Coast',
                          'Berlin Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Munich',
                          'Kiel Coast', 'Berlin Coast'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Warsaw',
                          'Prussia'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Berlin'): None,
            Unit(UnitTypes.FLEET, 'Kiel Coast'): None,
            Unit(UnitTypes.TROOP, 'Munich'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Warsaw'): None,
        },
    }
def test_d_8__failed_convoy_cannot_receive_hold_support():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Albania',
                          'Greece'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Serbia',
                          'Albania', 'Greece'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Greece',
                          'Naples'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Bulgaria',
                          'Greece', 'Greece'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Greece'): None,
            Unit(UnitTypes.TROOP, 'Serbia'): None,
        },
        'Turkey': {
            Unit(UnitTypes.TROOP, 'Greece'): set(),
            Unit(UnitTypes.TROOP, 'Bulgaria'): None,
        },
    }
def test_d_9__support_to_move_on_holding_unit_not_allowed():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Albania',
                          'Trieste', 'Serbia'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Venice',
                          'Trieste'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Trieste'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Trieste'): {
                'Serbia',
                'Budapest',
                'Vienna',
            },
            Unit(UnitTypes.TROOP, 'Albania'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Trieste'): None,
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
        },
    }
def test_d_7__support_to_hold_on_moving_unit_not_allowed():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Baltic Sea',
                          'Sweden Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Prussia Coast', 'Baltic Sea', 'Baltic Sea'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Livonia Coast',
                          'Baltic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Gulf of Bothnia', 'Livonia Coast', 'Baltic Sea'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Finland',
                          'Sweden'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): {
                'Kiel Coast',
                'Denmark Coast',
                'Berlin Coast',
            },
            Unit(UnitTypes.FLEET, 'Prussia Coast'): None,
        },
        'Russia': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
            Unit(UnitTypes.FLEET, 'Gulf of Bothnia'): None,
            Unit(UnitTypes.TROOP, 'Finland'): None,
        },
    }
def test_d_6__support_to_hold_on_convoying_unit_allowed():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Berlin',
                          'Sweden'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'Baltic Sea', 'Berlin', 'Sweden'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Prussia Coast', 'Baltic Sea', 'Baltic Sea'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Livonia Coast',
                          'Baltic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Gulf of Bothnia', 'Livonia Coast', 'Baltic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
            Unit(UnitTypes.FLEET, 'Prussia Coast'): None,
            Unit(UnitTypes.TROOP, 'Sweden'): None,
        },
        'Russia': {
            Unit(UnitTypes.FLEET, 'Livonia Coast'): None,
            Unit(UnitTypes.FLEET, 'Gulf of Bothnia'): None,
        },
    }
def test_d_4__support_to_hold_unit_supporting_hold_allowed():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Berlin',
                          'Kiel Coast', 'Kiel Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Kiel Coast',
                          'Berlin', 'Berlin'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Prussia',
                          'Berlin'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Baltic Sea',
                          'Prussia', 'Berlin'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.FLEET, 'Kiel Coast'): None,
            Unit(UnitTypes.TROOP, 'Berlin'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Prussia'): None,
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
        },
    }
예제 #14
0
def test_f_19__multi_route_convoy_disruption_paradox():
    helper = TurnHelper([
        PlayerHelper('France', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Tunis',
                          'Naples'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'Tyrrhenian Sea', 'Tunis', 'Naples'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'Ionian Sea', 'Tunis', 'Naples'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Rome Coast',
                          'Tyrrhenian Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Naples Coast',
                          'Rome Coast', 'Tyrrhenian Sea'),
        ])
    ])
    result = helper.resolve()
    assert result == {
        'France': {
            Unit(UnitTypes.TROOP, 'Tunis'): None,
            Unit(UnitTypes.FLEET, 'Tyrrhenian Sea'): None,
            Unit(UnitTypes.FLEET, 'Ionian Sea'): None,
        },
        'Italy': {
            Unit(UnitTypes.FLEET, 'Naples Coast'): None,
            Unit(UnitTypes.FLEET, 'Rome Coast'): None,
        },
    }
def test_d_17__dislodgement_cuts_supports():
    helper = TurnHelper([
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Black Sea',
                          'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Constantinople Coast', 'Black Sea', 'Ankara Coast'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ankara Coast',
                          'Constantinople Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Smyrna',
                          'Ankara Coast', 'Constantinople Coast'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Armenia',
                          'Ankara'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Russia': {
            Unit(UnitTypes.FLEET, 'Black Sea'): None,
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): {
                'Bulgaria North Coast',
                'Bulgaria South Coast',
                'Aegean Sea',
            },
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): None,
            Unit(UnitTypes.TROOP, 'Smyrna'): None,
            Unit(UnitTypes.TROOP, 'Armenia'): None,
        },
    }
예제 #16
0
def test_f_14__simple_convoy_paradox():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Wales Coast',
                          'English Channel'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'London Coast',
                          'Wales Coast', 'English Channel'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Brest',
                          'London'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'English Channel', 'Brest', 'London'),
        ])
    ])
    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'London Coast'): None,
            Unit(UnitTypes.FLEET, 'English Channel'): None,
        },
        'France': {
            Unit(UnitTypes.TROOP, 'Brest'): None,
            Unit(UnitTypes.FLEET, 'English Channel'): {
                'Irish Sea',
                'Mid-Atlantic Ocean',
                'North Sea',
                'Belgium Coast',
                'Picardy Coast',
            },
        },
    }
예제 #17
0
def test_e_10__almost_circular_movement_with_no_self_dislodgement_with_beleaguered_garrison():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'North Sea', 'Denmark Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Yorkshire Coast', 'Norway Coast', 'North Sea'),
        ]),
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Helgoland Bight', 'North Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Holland Coast', 'Helgoland Bight', 'North Sea'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Denmark Coast', 'Helgoland Bight'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Norway Coast', 'North Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Skagerrak', 'Norway Coast', 'North Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'North Sea'): None,
            Unit(UnitTypes.FLEET, 'Yorkshire Coast'): None,
        },
        'Germany': {
            Unit(UnitTypes.FLEET, 'Holland Coast'): None,
            Unit(UnitTypes.FLEET, 'Helgoland Bight'): None,
            Unit(UnitTypes.FLEET, 'Denmark Coast'): None,
        },
        'Russia': {
            Unit(UnitTypes.FLEET, 'Norway Coast'): None,
            Unit(UnitTypes.FLEET, 'Skagerrak'): None,
        }
    }
예제 #18
0
def test_e_12__support_on_attack_on_own_unit_can_be_used_for_other_means():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Budapest', 'Rumania'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Serbia', 'Vienna', 'Budapest'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna', 'Budapest'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Galicia', 'Budapest'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Rumania', 'Galicia', 'Budapest'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Budapest'): None,
            Unit(UnitTypes.TROOP, 'Serbia'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Galicia'): None,
            Unit(UnitTypes.TROOP, 'Rumania'): None,
        }
    }
예제 #19
0
def test_e_6__not_dislodged_because_of_own_support_still_has_effect():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Holland Coast', 'North Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Helgoland Bight', 'Holland Coast', 'North Sea'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'North Sea', 'Holland Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Belgium Coast', 'North Sea', 'Holland Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'English Channel', 'Holland Coast', 'North Sea'),
        ]),
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Ruhr', 'Holland'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Kiel', 'Ruhr', 'Holland'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.FLEET, 'Holland Coast'): None,
            Unit(UnitTypes.FLEET, 'Helgoland Bight'): None,
        },
        'France': {
            Unit(UnitTypes.FLEET, 'North Sea'): None,
            Unit(UnitTypes.FLEET, 'Belgium Coast'): None,
            Unit(UnitTypes.FLEET, 'English Channel'): None,
        },
        'Austria': {
            Unit(UnitTypes.TROOP, 'Ruhr'): None,
            Unit(UnitTypes.TROOP, 'Kiel'): None,
        }
    }
예제 #20
0
def test_e_1__dislodged_unit_has_no_effect_on_attackers_area():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Berlin', 'Prussia'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Kiel Coast', 'Berlin Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Silesia', 'Berlin', 'Prussia'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Prussia', 'Berlin'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Prussia'): None,
            Unit(UnitTypes.FLEET, 'Berlin Coast'): None,
            Unit(UnitTypes.TROOP, 'Silesia'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Prussia'): {
                'Warsaw',
                'Livonia',
            },
        },
    }
def test_d_33__unwanted_support_allowed():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Serbia',
                          'Budapest'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna',
                          'Budapest'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Galicia',
                          'Serbia', 'Budapest'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Bulgaria',
                          'Serbia'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Budapest'): None,
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Galicia'): None,
        },
        'Turkey': {
            Unit(UnitTypes.TROOP, 'Serbia'): None,
        },
    }
def test_d_3__move_cuts_support_on_move():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Trieste',
                          'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Trieste', 'Venice'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Venice'),
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ionian Sea',
                          'Adriatic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
            Unit(UnitTypes.TROOP, 'Trieste'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.FLEET, 'Ionian Sea'): None,
        },
    }
def test_d_27__failing_convoy_can_be_supported():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Sweden Coast',
                          'Baltic Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Denmark Coast', 'Sweden Coast', 'Baltic Sea'),
        ]),
        PlayerHelper('Germany', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Berlin'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'Baltic Sea', 'Berlin', 'Livonia'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Prussia Coast', 'Baltic Sea', 'Baltic Sea'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'Sweden Coast'): None,
            Unit(UnitTypes.FLEET, 'Denmark Coast'): None,
        },
        'Germany': {
            Unit(UnitTypes.TROOP, 'Berlin'): None,
        },
        'Russia': {
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
            Unit(UnitTypes.FLEET, 'Prussia Coast'): None,
        },
    }
def test_d_31__tricky_impossible_support():
    """
    Adapted from D.31, because I disagree that preventing this move specification is critical,
    but more a nice-to-have. For the time being, we'll permit and acknowledge this support is
    not very helpful.
    """
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Rumania',
                          'Armenia'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Black Sea',
                          'Rumania', 'Armenia'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.TROOP, 'Rumania'): None,
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Black Sea'): None,
        },
    }
def test_d_26__failing_move_support_can_be_supported():
    helper = TurnHelper([
        PlayerHelper('Germany', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Berlin',
                          'Prussia', 'Silesia'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Kiel Coast',
                          'Berlin', 'Berlin'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Prussia',
                          'Berlin'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Baltic Sea',
                          'Prussia', 'Berlin'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Germany': {
            Unit(UnitTypes.TROOP, 'Berlin'): None,
            Unit(UnitTypes.FLEET, 'Kiel Coast'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Prussia'): None,
            Unit(UnitTypes.FLEET, 'Baltic Sea'): None,
        },
    }
def test_d_20__unit_cannot_cut_support_of_own_country():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'North Sea',
                          'English Channel'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'London Coast',
                          'North Sea', 'English Channel'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Yorkshire',
                          'London'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.HOLD, UnitTypes.FLEET,
                          'English Channel'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'English Channel'): None,
            Unit(UnitTypes.FLEET, 'London Coast'): None,
            Unit(UnitTypes.TROOP, 'Yorkshire'): None,
        },
        'France': {
            Unit(UnitTypes.FLEET, 'English Channel'): {
                'Wales Coast',
                'Irish Sea',
                'Mid-Atlantic Ocean',
                'Brest Coast',
                'Picardy Coast',
                'Belgium Coast',
            },
        },
    }
def test_d_2__move_cuts_support_on_hold():
    helper = TurnHelper([
        PlayerHelper('Austria', [
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Trieste',
                          'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Adriatic Sea',
                          'Trieste', 'Venice'),
            CommandHelper(CommandType.MOVE, UnitTypes.TROOP, 'Vienna',
                          'Tyrolia'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.HOLD, UnitTypes.TROOP, 'Venice'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Tyrolia',
                          'Venice', 'Venice'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Austria': {
            Unit(UnitTypes.FLEET, 'Adriatic Sea'): None,
            Unit(UnitTypes.TROOP, 'Venice'): None,
            Unit(UnitTypes.TROOP, 'Vienna'): None,
        },
        'Italy': {
            Unit(UnitTypes.TROOP, 'Venice'): {
                'Piedmont',
                'Tuscany',
                'Rome',
                'Apulia',
            },
            Unit(UnitTypes.TROOP, 'Tyrolia'): None,
        },
    }
def test_d_19__even_when_surviving_is_an_alternative_way():
    helper = TurnHelper([
        PlayerHelper('Russia', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Black Sea',
                          'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Constantinople Coast', 'Black Sea', 'Ankara Coast'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.TROOP, 'Smyrna',
                          'Ankara Coast', 'Constantinople Coast'),
        ]),
        PlayerHelper('Turkey', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Ankara Coast',
                          'Constantinople Coast'),
        ])
    ])

    result = helper.resolve()
    assert result == {
        'Russia': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): None,
            Unit(UnitTypes.FLEET, 'Constantinople Coast'): None,
            Unit(UnitTypes.TROOP, 'Smyrna'): None,
        },
        'Turkey': {
            Unit(UnitTypes.FLEET, 'Ankara Coast'): {
                'Armenia Coast',
            },
        },
    }
예제 #29
0
def test_f_22__second_order_paradox_with_two_resolutions():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Edinburgh Coast',
                          'North Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'London Coast',
                          'Edinburgh Coast', 'North Sea'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Brest',
                          'London'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'English Channel', 'Brest', 'London'),
        ]),
        PlayerHelper('Germany', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Picardy Coast',
                          'English Channel'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Belgium Coast', 'Picardy Coast', 'English Channel'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Norway',
                          'Belgium'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'North Sea', 'Norway', 'Belgium'),
        ])
    ])
    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'North Sea'): None,
            Unit(UnitTypes.FLEET, 'London Coast'): None,
        },
        'France': {
            Unit(UnitTypes.TROOP, 'Brest'): None,
            Unit(UnitTypes.FLEET, 'English Channel'): {
                'Mid-Atlantic Ocean',
                'Irish Sea',
                'Wales Coast',
            },
        },
        'Germany': {
            Unit(UnitTypes.FLEET, 'English Channel'): None,
            Unit(UnitTypes.FLEET, 'Belgium Coast'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Norway'): None,
            Unit(UnitTypes.FLEET, 'North Sea'): {
                'Yorkshire Coast',
                'Norwegian Sea',
                'Skagerrak',
                'Denmark Coast',
                'Helgoland Bight',
                'Holland Coast',
            },
        },
    }
예제 #30
0
def test_f_23__second_order_paradox_with_two_exclusive_convoys():
    helper = TurnHelper([
        PlayerHelper('England', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET, 'Edinburgh Coast',
                          'North Sea'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Yorkshire Coast', 'Edinburgh Coast', 'North Sea'),
        ]),
        PlayerHelper('France', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Brest',
                          'London'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'English Channel', 'Brest', 'London'),
        ]),
        PlayerHelper('Germany', [
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET,
                          'Belgium Coast', 'English Channel',
                          'English Channel'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'London Coast',
                          'North Sea', 'North Sea'),
        ]),
        PlayerHelper('Italy', [
            CommandHelper(CommandType.MOVE, UnitTypes.FLEET,
                          'Mid-Atlantic Ocean', 'English Channel'),
            CommandHelper(CommandType.SUPPORT, UnitTypes.FLEET, 'Irish Sea',
                          'Mid-Atlantic Ocean', 'English Channel'),
        ]),
        PlayerHelper('Russia', [
            CommandHelper(CommandType.CONVOY_MOVE, UnitTypes.TROOP, 'Norway',
                          'Belgium'),
            CommandHelper(CommandType.CONVOY_TRANSPORT, UnitTypes.FLEET,
                          'North Sea', 'Norway', 'Belgium'),
        ])
    ])
    result = helper.resolve()
    assert result == {
        'England': {
            Unit(UnitTypes.FLEET, 'Edinburgh Coast'): None,
            Unit(UnitTypes.FLEET, 'Yorkshire Coast'): None,
        },
        'France': {
            Unit(UnitTypes.TROOP, 'Brest'): None,
            Unit(UnitTypes.FLEET, 'English Channel'): None,
        },
        'Germany': {
            Unit(UnitTypes.FLEET, 'London Coast'): None,
            Unit(UnitTypes.FLEET, 'Belgium Coast'): None,
        },
        'Italy': {
            Unit(UnitTypes.FLEET, 'Mid-Atlantic Ocean'): None,
            Unit(UnitTypes.FLEET, 'Irish Sea'): None,
        },
        'Russia': {
            Unit(UnitTypes.TROOP, 'Norway'): None,
            Unit(UnitTypes.FLEET, 'North Sea'): None,
        },
    }