예제 #1
0
def test_valid():
    job = generate_testjob()
    result = Result(job=job,
                    solver_type=SolverType.FFD,
                    time_us=100,
                    lengths=[(100, 100, 100), (200, 200, 200)])
    result.assert_valid()
예제 #2
0
def test_invalid():
    job = generate_testjob()
    invalid_result = Result(job=job,
                            solver_type=SolverType.FFD,
                            time_us=-1,
                            lengths=[(100, 100, 100), (200, 200, 200)])
    with pytest.raises(ValueError):
        invalid_result.assert_valid()
예제 #3
0
def test_equal():
    job = generate_testjob()
    result1 = Result(job=job,
                     solver_type=SolverType.FFD,
                     time_us=100,
                     lengths=[(100, 100, 100), (200, 200, 200)])
    result2 = Result(job=job,
                     solver_type=SolverType.FFD,
                     time_us=200,
                     lengths=[(100, 100, 100), (200, 200, 200)])
    assert result1 == result2
예제 #4
0
def test_constructor():
    job = generate_testjob()
    result = Result(job=job,
                    solver_type=SolverType.FFD,
                    time_us=100,
                    lengths=[(100, 100, 100), (200, 200, 200)])
    assert result
예제 #5
0
def test_exactly():
    job = generate_testjob()
    result1 = Result(job=job,
                     solver_type=SolverType.FFD,
                     time_us=100,
                     lengths=[(100, 100, 100), (200, 200, 200)])
    result2 = Result(job=job,
                     solver_type=SolverType.FFD,
                     time_us=200,
                     lengths=[(100, 100, 100), (200, 200, 200)])
    result3 = Result(job=job,
                     solver_type=SolverType.FFD,
                     time_us=200,
                     lengths=[(100, 100, 100), (200, 200, 200)])
    assert not result1.exactly(result2)
    assert result2.exactly(result3)
예제 #6
0
def test_full_model():
    json_job = Path("./tests/res/in/testjob.json")
    assert json_job.exists()

    json_result = Path("./tests/res/out/testresult.json")

    with open(json_job, "r") as encoded_job:
        job = Job.parse_raw(encoded_job.read())

        solved = distribute(job)

        encoded_solved = solved.json()
        assert len(encoded_solved) > 20

    with open(json_result, "r") as encoded_result:
        result = Result.parse_raw(encoded_result.read())

        assert solved == result
예제 #7
0
def distribute(job: Job) -> Result:
    time: float = perf_counter()

    lengths: List[List[int]]
    solver_type: SolverType

    if len(job) <= n_max_precise:
        lengths = _solve_bruteforce(job)
        solver_type = SolverType.bruteforce
    elif len(job) <= n_max_good:
        lengths = _solve_FFD(job)
        solver_type = SolverType.FFD
    elif len(job) <= n_max:
        lengths = _solve_gapfill(job)
        solver_type = SolverType.gapfill
    else:
        raise OverflowError("Input too large")

    time_us = int((perf_counter() - time) * 1000 * 1000)

    return Result(job=job,
                  solver_type=solver_type,
                  time_us=time_us,
                  lengths=lengths)
예제 #8
0
def test_full():
    reply = client.post("/solve", generate_testjob().json())
    assert reply.status_code == 200
    json_result = reply.json()

    assert Result.parse_obj(json_result) == generate_testresult()
예제 #9
0
def generate_testresult():
    return Result.parse_raw(load_json(Path("./tests/res/out/testresult.json")))