Example #1
0
def test_can_solve_when_similar_steps():
    """
    New Email before Send Email
    Attach Image after Create New Email
    Send Email after Attach Image
    """
    expected_results = [
        ("New_Email", "Attach_Image", "Send_Email"),
    ]

    r = RankingProblem()

    for step_descriptions in [
        "New Email", "Send Email",
        "Attach Image", "Create New Email"
    ]:
        r.add_item(step_descriptions)

    r.is_before("New_Email", "Send_Email").\
        is_after("Attach_Image", "New_Email"). \
        is_after("Send_Email", "Attach_Image")

    actual_results = r.solve()

    assert (actual_results == expected_results)
Example #2
0
def test_is_before_constraint_set():
    r = RankingProblem()
    r.set_items(["Dog", "Cat"])
    r.is_before("Dog", "Cat")

    assert (r._constraints[1][1] == ("Dog", "Cat"))
    assert (r._constraints[1][0]._func.__name__ == "is_before")
Example #3
0
def test_solve_is_before_partially_specified():

    expected_results = [
        (
            "Cat",
            "Dog",
            "Mouse",
        ),
        (
            "Cat",
            "Mouse",
            "Dog",
        ),
        (
            "Mouse",
            "Cat",
            "Dog",
        ),
    ]

    r = RankingProblem()
    r.set_items(["Dog", "Cat", "Mouse"])
    r.is_before("Cat", "Dog")
    actual_results = r.solve()

    assert (len(actual_results) == 3)
    assert (actual_results[0] == expected_results[0])
    assert (actual_results[1] == expected_results[1])
    assert (actual_results[2] == expected_results[2])
Example #4
0
def test_solve_is_before_unsolvable():
    unsolvable_results = []

    r = RankingProblem()
    r.set_items(["Dog", "Cat"])
    r.is_before("Cat", "Dog")
    r.is_before("Dog", "Cat")

    with pytest.raises(UnsolvableModelError):
        r.solve()
Example #5
0
def test_solve_is_before_fully_specified_correct():
    expected_results = [(
        "Mouse",
        "Cat",
        "Dog",
    )]

    r = RankingProblem()
    r.set_items(["Dog", "Cat", "Mouse"])
    r.is_before("Cat", "Dog")
    r.is_before("Mouse", "Cat")

    actual_result = r.solve()
    assert (actual_result == expected_results)
Example #6
0
def test_solve_is_before_fully_specified_incorrect():
    unexpected_results = get_all_combinations(["Mouse", "Cat", "Dog"],
                                              include_passed_values=False)

    r = RankingProblem()
    r.set_items(["Dog", "Cat", "Mouse"])
    r.is_before("Cat", "Dog")
    r.is_before("Mouse", "Cat")

    actual_results = r.solve()

    for actual_result in actual_results:
        for unexpected_result in unexpected_results:
            assert (unexpected_result != actual_result)
def test_ranking_problem_least_most_common_variable_returns_min_max():
    expected_results = ("Yellow", "Green")

    r = RankingProblem()
    r.set_items(["Red", "Blue", "Green", "Yellow"])
    r.is_before("Blue", "Green")
    r.is_before("Red", "Green")

    result = r.least_most_common_variable

    try:
        assert (result == expected_results)
    except AssertionError:
        pytest.fail(
            "Failed to get min and max counts items in variable_constraints_count from RankingProblem"
        )
def test_item_links():
    expected_results = {
        "Blue": ["Green"],
        "Orange": ["Green"],
        "Red": ["Green", "Yellow"],
        "Yellow": ["Green", "Red"],
        "Green": ["Blue", "Orange", "Red", "Yellow"]
    }

    r = RankingProblem()
    r.set_items(["Red", "Blue", "Green", "Yellow", "Orange"])
    r.is_before("Blue", "Green")
    r.is_before("Red", "Green")
    r.is_before("Yellow", "Green")
    r.is_before("Red", "Yellow")
    r.is_before("Orange", "Green")

    result = r.item_links

    assert (expected_results == result)
Example #9
0
def test_can_call_is_before():
    r = RankingProblem()
    r.set_items(["Dog", "Cat"])
    r.is_before("Cat", "Dog")
Example #10
0
def test_is_before_fails_on_unknown_item():
    r = RankingProblem()
    r.set_items(["Dog"])
    with pytest.raises(ValueError, match="Cat not in Items"):
        r.is_before("Cat", "Dog")