Пример #1
0
def test_requirement_as_set_3(database):
    def _req(name: str):
        id_req = ResourceRequirement.simple(database.get_item(name))
        return id_req

    req = RequirementOr([
        Requirement.impossible(),
        _req("A"),
    ])
    assert req.as_set(database) == RequirementSet([
        RequirementList([_req("A")]),
    ])
Пример #2
0
def test_requirement_as_set_1(database):
    def _req(name: str):
        id_req = ResourceRequirement.simple(database.get_item(name))
        return id_req

    req = RequirementAnd([
        _req("A"),
        RequirementOr([_req("B"), _req("C")]),
        RequirementOr([_req("D"), _req("E")]),
    ])
    assert req.as_set(database) == RequirementSet([
        RequirementList([_req("A"), _req("B"), _req("D")]),
        RequirementList([_req("A"), _req("B"), _req("E")]),
        RequirementList([_req("A"), _req("C"), _req("D")]),
        RequirementList([_req("A"), _req("C"), _req("E")]),
    ])
Пример #3
0
 def patch_requirements(self, resources: ResourceCollection,
                        database: ResourceDatabase) -> RequirementSet:
     from randovania.game_description.requirements.requirement_and import RequirementAnd
     from randovania.game_description.requirements.requirement_or import RequirementOr
     return RequirementOr(
         RequirementAnd(
             individual.patch_requirements(resources, 1, database)
             for individual in alternative.values())
         for alternative in self.alternatives).as_set(database)
Пример #4
0
def test_simplify_requirement_set_static(blank_game_description):
    db = blank_game_description.resource_database
    res_a, id_req_a = make_req_a(db)
    res_b, id_req_b = make_req_b(db)
    fd = ResourceCollection.from_dict

    the_set = RequirementOr([
        RequirementAnd([id_req_a]),
        RequirementAnd([id_req_b]),
    ])

    simple_1 = the_set.patch_requirements(fd(db, {res_a: 0, res_b: 0}), 1, db)
    simple_2 = the_set.patch_requirements(fd(db, {res_a: 0, res_b: 1}), 1, db)
    simple_3 = the_set.patch_requirements(fd(db, {res_a: 1, res_b: 1}), 1, db)

    assert simple_1.as_set(db).alternatives == frozenset()
    assert simple_2.as_set(db).alternatives == frozenset([RequirementList([])])
    assert simple_3.as_set(db).alternatives == frozenset([RequirementList([])])
Пример #5
0
def test_requirement_or_str(database):
    def _req(name: str):
        id_req = ResourceRequirement.simple(database.get_item(name))
        return id_req

    req = RequirementOr([
        _req("C"),
        _req("A"),
        _req("B"),
    ])
    assert str(req) == "(A ≥ 1 or B ≥ 1 or C ≥ 1)"
Пример #6
0
def test_requirement_template_nested(database):
    def _req(name: str):
        id_req = ResourceRequirement.simple(database.get_item(name))
        return id_req

    # Setup
    use_a = RequirementTemplate("Use A")
    use_b = RequirementTemplate("Use B")

    database.requirement_template["Use A"] = _req("A")
    database.requirement_template["Use B"] = RequirementOr([use_a, _req("B")])

    # Run
    as_set = use_b.as_set(database)

    # Assert
    assert as_set == RequirementSet([
        RequirementList([_req("A")]),
        RequirementList([_req("B")]),
    ])
    assert hash(use_a) != hash(use_b)
def test_build_no_changes(skip_qtbot, echoes_resource_database):
    # Setup
    def mk_req(name: str):
        return ResourceRequirement.with_data(echoes_resource_database,
                                             ResourceType.ITEM, name, 1, False)

    requirement = RequirementOr([
        RequirementAnd([
            mk_req("Dark"),
            mk_req("Light"),
        ]),
        mk_req("Power"),
    ])

    # Run
    editor = connections_editor.ConnectionsEditor(None,
                                                  echoes_resource_database,
                                                  requirement)
    skip_qtbot.addWidget(editor)
    result = editor.final_requirement

    # Assert
    assert result == requirement
Пример #8
0
 def impossible(cls) -> Requirement:
     # empty RequirementOr.satisfied is False
     from randovania.game_description.requirements.requirement_or import RequirementOr
     return RequirementOr([])
Пример #9
0
def test_simplified_requirement(database):
    def _req(name: str):
        id_req = ResourceRequirement.simple(database.get_item(name))
        return id_req

    test_parameters = [
        (
            RequirementOr([
                RequirementAnd([
                    _req("A"),
                ]),
            ]),
            _req("A"),
        ), (
            RequirementAnd([
                RequirementOr([
                    _req("A"),
                ]),
            ]),
            _req("A"),
        ),
        (
            RequirementAnd([
                RequirementOr([_req("B"), Requirement.trivial()]),
                RequirementAnd([
                    Requirement.trivial(),
                    _req("A"),
                ]),
            ]),
            _req("A"),
        ),
        (
            RequirementOr([
                _req("A"),
                RequirementAnd([_req("B"), _req("C")]),
                RequirementAnd([_req("B"), _req("D")]),
            ]),
            RequirementOr([
                _req("A"),
                RequirementAnd([
                    _req("B"),
                    RequirementOr([
                        _req("C"),
                        _req("D"),
                    ]),
                ]),
            ]),
        ),
        (
            RequirementOr([
                RequirementAnd([_req("B"), _req("C")]),
                RequirementAnd([_req("B"), _req("D")]),
            ]),
            RequirementAnd([
                _req("B"),
                RequirementOr([
                    _req("C"),
                    _req("D"),
                ]),
            ]),
        ), (
            RequirementOr([
                _req("A"),
                _req("A"),
            ]),
            _req("A"),
        ), (
            RequirementAnd([
                _req("A"),
                _req("A"),
            ]),
            _req("A"),
        ),
        (
            RequirementOr([
                RequirementAnd([
                    _req("A"),
                    RequirementOr([_req("A"),
                                   RequirementOr([_req("A")])])
                ]),
                RequirementAnd([
                    _req("A"),
                    RequirementOr([
                        _req("A"),
                        RequirementOr([]),
                    ]),
                ]),
            ]),
            _req("A"),
        ),
        (
            RequirementOr([
                RequirementAnd([
                    _req("A"),
                    RequirementOr([_req("A"),
                                   RequirementOr([_req("A")])])
                ]),
                RequirementAnd([
                    _req("A"),
                    RequirementOr([
                        _req("A"),
                        RequirementOr([_req("A")]),
                    ])
                ])
            ]),
            _req("A"),
        )
    ]

    for original, expected in test_parameters:
        simplified = original.simplify()
        assert simplified == expected
        assert simplified.as_set(database) == expected.as_set(database)