Skip to content

Commit f3d7598

Browse files
committed
fix for testing triplet packing
1 parent 8d12632 commit f3d7598

File tree

3 files changed

+42
-21
lines changed

3 files changed

+42
-21
lines changed

prtpy/packing/triplet_packing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def triplet_packing(binner: Binner, binsize: float, items: List[Any], use_local_
110110
for bin_i, triplet in enumerate(result.solution.get_triplets()):
111111
for item in triplet.get():
112112
binner.add_item_to_bin(bins, item, bin_i)
113-
logger.info(f"solution completed with {len(bins[1])} bins.")
113+
logger.info(f"solution completed with {binner.numbins} bins.")
114114
return bins
115115

116116
if __name__ == "__main__":

tests/test_packing_small_inputs.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,37 @@
66
"""
77
import prtpy, unittest, itertools
88
from utils import functions_in_class
9+
from test_triplet_packing import create_random_allocatable_item_list
910

1011
class TestPackingAlgorithms(unittest.TestCase):
12+
def _test_class_with_list_input_for_triplet_packing(self, items_num, binsize=1000):
13+
algorithm = prtpy.packing.triplet_packing
14+
items, _ = create_random_allocatable_item_list(binsize, items_num)
15+
16+
result = prtpy.pack(algorithm=algorithm, binsize=binsize, items=items, outputtype=prtpy.out.Partition)
17+
for tri in result:
18+
assert len(tri) == 3, f"Expected 3 items per bin, got {len(tri)}"
19+
assert sum(tri) == binsize, f"Bin sum mismatch: got {sum(tri)} instead of {binsize}"
20+
21+
result = prtpy.pack(algorithm=algorithm, binsize=binsize, items=items, outputtype=prtpy.out.Sums)
22+
for triplet_sum in result:
23+
assert triplet_sum == binsize
24+
25+
result = prtpy.pack(algorithm=algorithm, binsize=binsize, items=items, outputtype=prtpy.out.LargestSum)
26+
assert (result==binsize)
27+
28+
result = prtpy.pack(algorithm=algorithm, binsize=binsize, items=items, outputtype=prtpy.out.SmallestSum)
29+
assert (result==binsize)
30+
31+
result = prtpy.pack(algorithm=algorithm, binsize=binsize, items=items, outputtype=prtpy.out.BinCount)
32+
assert (result==(items_num/3))
33+
1134
def _test_class_with_list_input(self, theclass, items, binsize):
1235
for algorithm in functions_in_class(theclass):
36+
if algorithm == prtpy.packing.triplet_packing:
37+
self._test_class_with_list_input_for_triplet_packing(items_num=15, binsize=1000)
38+
continue
39+
1340
result = prtpy.pack(algorithm=algorithm, binsize=binsize, items=items, outputtype=prtpy.out.Partition)
1441
assert ((result[0]==[11] and result[1]==[22]) or (result[0]==[22] and result[1]==[11]))
1542

@@ -31,6 +58,8 @@ def test_with_list_input(self):
3158

3259
def _test_class_with_dict_input(self, theclass, items, binsize):
3360
for algorithm in functions_in_class(theclass):
61+
if algorithm == prtpy.packing.triplet_packing:
62+
continue # triplet packing doesn't support str items input
3463
result = prtpy.pack(algorithm=algorithm, binsize=binsize, items=items, outputtype=prtpy.out.Partition)
3564
assert ((result[0]==["a"] and result[1]==["b"]) or (result[0]==["b"] and result[1]==["a"]))
3665

tests/test_triplet_packing.py

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,14 @@ def test_creation_random_allocatable_item_list():
238238
assert check_item_list_is_valid(bin_size, triplets)
239239

240240

241+
def assert_triplet_packing_valid_result(result, binsize):
242+
_ , triplets_result = result
243+
244+
for tri in triplets_result:
245+
assert len(tri) == 3, f"Expected 3 items per bin, got {len(tri)}"
246+
assert sum(tri) == binsize, f"Bin sum mismatch: got {sum(tri)} instead of {binsize}"
247+
248+
241249
def test_randomized_items_packing_allocation():
242250
bin_sizes = [1000]
243251
item_nums = [60, 99]
@@ -249,19 +257,11 @@ def test_randomized_items_packing_allocation():
249257

250258
# backtrack
251259
bin_result = triplet_packing(BinnerKeepingContents(), binsize=b_size, items=item_list)
252-
_, triplets_result = bin_result
253-
254-
for tri in triplets_result:
255-
assert len(tri) == 3, f"Expected 3 items per bin, got {len(tri)}"
256-
assert sum(tri) == b_size, f"Bin sum mismatch: got {sum(tri)} instead of {b_size}"
260+
assert_triplet_packing_valid_result(bin_result, b_size)
257261

258262
# local search
259263
bin_result = triplet_packing(BinnerKeepingContents(), binsize=b_size, items=item_list, use_local_search=True)
260-
_, triplets_result = bin_result
261-
262-
for tri in triplets_result:
263-
assert len(tri) == 3, f"Expected 3 items per bin, got {len(tri)}"
264-
assert sum(tri) == b_size, f"Bin sum mismatch: got {sum(tri)} instead of {b_size}"
264+
assert_triplet_packing_valid_result(bin_result, b_size)
265265

266266

267267
def test_items_packing_allocation():
@@ -272,19 +272,11 @@ def test_items_packing_allocation():
272272

273273
# backtrack
274274
bin_result = triplet_packing(BinnerKeepingContents(), binsize=b_size, items=item_list)
275-
_, triplets_result = bin_result
276-
277-
for tri in triplets_result:
278-
assert len(tri) == 3, f"Expected 3 items per bin, got {len(tri)}"
279-
assert sum(tri) == b_size, f"Bin sum mismatch: got {sum(tri)} instead of {b_size}"
275+
assert_triplet_packing_valid_result(bin_result, b_size)
280276

281277
# local search
282278
bin_result = triplet_packing(BinnerKeepingContents(), binsize=b_size, items=item_list, use_local_search=True)
283-
_, triplets_result = bin_result
284-
285-
for tri in triplets_result:
286-
assert len(tri) == 3, f"Expected 3 items per bin, got {len(tri)}"
287-
assert sum(tri) == b_size, f"Bin sum mismatch: got {sum(tri)} instead of {b_size}"
279+
assert_triplet_packing_valid_result(bin_result, b_size)
288280

289281

290282
def test_invalid_input_throws_exception():

0 commit comments

Comments
 (0)