Beispiel #1
0
def test_to_JSON():
    target = TargetSize(length=300, quantity=4)
    assert target.json() == '{"length": 300, "quantity": 4}'

    job = Job(max_length=1200,
              target_sizes=(target, TargetSize(length=200, quantity=3)),
              cut_width=0)
    assert job.json() == '{"max_length": 1200, "target_sizes": [{"length": 300, "quantity": 4}, ' \
                         '{"length": 200, "quantity": 3}], "cut_width": 0}'
Beispiel #2
0
def test_compress():
    job = Job(max_length=100,
              target_sizes=(TargetSize(length=100, quantity=2),
                            TargetSize(length=100, quantity=3)),
              cut_width=0)
    job.compress()
    compressed_job = Job(max_length=100,
                         target_sizes=([TargetSize(length=100, quantity=5)]),
                         cut_width=0)

    assert job == compressed_job
Beispiel #3
0
def test_job_generator():
    job = Job(max_length=1550,
              target_sizes=(TargetSize(length=500, quantity=4),
                            TargetSize(length=200, quantity=3),
                            TargetSize(length=100, quantity=2)),
              cut_width=5)

    resulting_list = []
    for length in job.get_sizes():
        resulting_list.append(length)

    assert resulting_list == [500, 500, 500, 500, 200, 200, 200, 100, 100]
Beispiel #4
0
def test_job_dunders():
    job1 = Job(max_length=100,
               target_sizes=(TargetSize(length=100, quantity=2),
                             TargetSize(length=200, quantity=1)),
               cut_width=0)
    job2 = Job(max_length=100,
               target_sizes=(TargetSize(length=100, quantity=2),
                             TargetSize(length=200, quantity=1)),
               cut_width=0)

    assert job1 == job2
    assert len(job1) == 3
Beispiel #5
0
    def test_benchmark():
        job = Job(max_length=1200,
                  target_sizes=(TargetSize(length=300, quantity=3),
                                TargetSize(length=200, quantity=3),
                                TargetSize(length=100, quantity=3)),
                  cut_width=0)

        start = time.perf_counter()
        solved_bruteforce = _solve_bruteforce(job)
        t_bruteforce = time.perf_counter() - start
        solved_gapfill = _solve_gapfill(job)
        t_gapfill = time.perf_counter() - t_bruteforce
        solved_FFD = _solve_FFD(job)
        t_FFD = time.perf_counter() - t_gapfill

        # bruteforce should be better at the cost of increased runtime
        print(
            f"[Runtime] Bruteforce: {t_bruteforce:.2f}s, Gapfill: {t_gapfill:.2f}s, FFD: {t_FFD:.2f}s"
        )
Beispiel #6
0
def random_job() -> Job:
    max_length = random.randint(1000, 2000)
    cut_width = random.randint(0, 10)

    n_sizes = random.randint(5, 10)

    sizes = []
    for i in range(n_sizes):
        sizes.append(
            TargetSize(length=random.randint(10, 1000),
                       quantity=random.randint(1, 20)))

    return Job(max_length=max_length, target_sizes=sizes, cut_width=cut_width)
Beispiel #7
0
def test_invalid():
    job1 = Job(max_length=0,
               target_sizes=(TargetSize(length=100, quantity=2),
                             TargetSize(length=200, quantity=1)),
               cut_width=0)
    assert not job1.valid()