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()
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()
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
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
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)
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
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)
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()
def generate_testresult(): return Result.parse_raw(load_json(Path("./tests/res/out/testresult.json")))