def testThreeInserts(self): """ Three items across two shelves """ ITEM = item.Item(4, 2) ITEM2 = item.Item(5, 2) ITEM3 = item.Item(2, 2) self.sheet.insert(ITEM, heuristic='worst_area_fit') self.sheet.insert(ITEM2, heuristic='worst_area_fit') self.sheet.insert(ITEM3, heuristic='worst_area_fit') with self.subTest(): correct = shelf.Shelf(8, 2, 0) correct.items = [ITEM, ITEM3] correct.available_width = 2 self.assertEqual(self.sheet.shelves[0].__dict__, correct.__dict__) with self.subTest(): correct = shelf.Shelf(8, 2, 2) correct.items = [ITEM2] correct.available_width = 3 self.assertEqual(self.sheet.shelves[1].__dict__, correct.__dict__) with self.subTest(): correct = [ITEM, ITEM2, ITEM3] self.assertEqual(self.sheet.items, correct)
def testThreeItemInsertion(self): """ Three item Split Horizontal Rotation == False RectMerge == False """ ITEM = item.Item(4, 3) ITEM2 = item.Item(2, 2) ITEM3 = item.Item(5, 1) self.BIN.insert(ITEM, 'worst_area_fit') self.BIN.insert(ITEM2, 'worst_area_fit') self.BIN.insert(ITEM3, 'worst_area_fit') with self.subTest(): correct = [ self.freeRectangle(8, 2, 2, 3), self.freeRectangle(1, 1, 9, 0), self.freeRectangle(6, 2, 4, 1) ] self.assertEqual(self.BIN.freerects, correct) with self.subTest(): self.assertEqual(ITEM.CornerPoint, (0, 0)) self.assertEqual(ITEM2.CornerPoint, (0, 3)) self.assertEqual(ITEM3.CornerPoint, (4, 0)) with self.subTest(): self.assertEqual(self.BIN.items, [ITEM, ITEM2, ITEM3])
def testThreeItemInsertion(self): """ Three items Split Horizontal Rotation == False RectMerge == False """ ITEM = item.Item(4, 2) ITEM2 = item.Item(2, 2) ITEM3 = item.Item(2, 2) self.BIN.insert(ITEM, 'first_fit') self.BIN.insert(ITEM2, 'first_fit') self.BIN.insert(ITEM3, 'first_fit') with self.subTest(): correct = [ self.freeRectangle(4, 2, 6, 0), self.freeRectangle(8, 2, 2, 2), self.freeRectangle(10, 1, 0, 4) ] self.assertEqual(self.BIN.freerects, correct) with self.subTest(): self.assertEqual(ITEM.CornerPoint, (0, 0)) self.assertEqual(ITEM2.CornerPoint, (4, 0)) self.assertEqual(ITEM3.CornerPoint, (0, 2)) with self.subTest(): self.assertEqual(self.BIN.items, [ITEM, ITEM2, ITEM3])
def testMatchingWidths(self): """ Two item Split Horizontal Rotation == False RectMerge == True """ ITEM = item.Item(4, 2) ITEM2 = item.Item(4, 3) self.BIN.insert(ITEM, 'best_height_fit') self.BIN.insert(ITEM2, 'best_height_fit') self.assertEqual(self.BIN.freerects, [self.freeRectangle(6, 5, 4, 0)])
def testReturn(self): ITEM = item.Item(4, 2) ITEM2 = item.Item(2, 2) self.BIN.insert(ITEM, 'best_width_fit') self.BIN.insert(ITEM2, 'best_width_fit') correct = { 'width': 10, 'height': 5, 'area': 50, 'efficiency': 0.24, 'items': [ITEM, ITEM2], } self.assertEqual(self.BIN.bin_stats(), correct)
def testTwoInsertsA(self): """ Two items that fit in one shelf """ ITEM = item.Item(3, 2) ITEM2 = item.Item(3, 2) self.sheet.insert(ITEM, heuristic='next_fit') self.sheet.insert(ITEM2, heuristic='next_fit') with self.subTest(): correct = shelf.Shelf(8, 2, 0) correct.items = [ITEM, ITEM2] correct.available_width = 2 self.assertEqual(self.sheet.shelves[0].__dict__, correct.__dict__) with self.subTest(): correct = [ITEM, ITEM2] self.assertEqual(self.sheet.items, correct)
def testItemTooBig(self): """ Single Item Fits no FreeRectangles Split Horizontal Rotation == False RectMerge == False """ ITEM = item.Item(5, 11) self.assertFalse(self.BIN.insert(ITEM, 'worst_area_fit'))
def testItemTooTall(self): """ Manual insertion of oversized (height) object into a shelf """ ITEM = item.Item(6, 5) result = self.shelf.insert(ITEM) with self.subTest(): self.assertEqual(self.shelf.items, []) with self.subTest(): self.assertFalse(result)
def testItemTooWide(self): """ Manual insertion of oversized (width) object into a shelf """ ITEM = item.Item(9, 2) result = self.shelf.insert(ITEM) with self.subTest(): self.assertEqual(self.shelf.items, []) with self.subTest(): self.assertFalse(result)
def testTwoInsertsC(self): """ Second item doesn't fit remaining vertical space in sheet """ ITEM = item.Item(3, 2) ITEM2 = item.Item(6, 3) self.sheet.insert(ITEM, heuristic='first_fit') res = self.sheet.insert(ITEM2, heuristic='first_fit') with self.subTest(): correct = shelf.Shelf(8, 2, 0) correct.items = [ITEM] correct.available_width = 5 self.assertEqual(self.sheet.shelves[0].__dict__, correct.__dict__) with self.subTest(): self.assertFalse(res) with self.subTest(): correct = [ITEM] self.assertEqual(self.sheet.items, correct)
def testInsertOnce(self): """ Manual insertion into a shelf object """ ITEM = item.Item(4, 2) self.shelf.insert(ITEM) with self.subTest(): correct = [ITEM] self.assertEqual(self.shelf.items, correct) with self.subTest(): correct = 4 self.assertEqual(self.shelf.available_width, correct)
def testTwoItemInsertion(self): """ Two item Split Horizontal Rotation == False RectMerge == False """ ITEM = item.Item(4, 3) ITEM2 = item.Item(2, 2) self.BIN.insert(ITEM, 'worst_width_fit') self.BIN.insert(ITEM2, 'worst_width_fit') with self.subTest(): correct = [ self.freeRectangle(6, 3, 4, 0), self.freeRectangle(8, 2, 2, 3) ] self.assertEqual(self.BIN.freerects, correct) with self.subTest(): self.assertEqual(ITEM.CornerPoint, (0, 0)) self.assertEqual(ITEM2.CornerPoint, (0, 3)) with self.subTest(): self.assertEqual(self.BIN.items, [ITEM, ITEM2])
def testSingleInsert(self): """ Single item insertion doesn't use a heuristic """ ITEM = item.Item(6, 2) self.sheet.insert(ITEM, heuristic='first_fit') with self.subTest(): correct = shelf.Shelf(8, 2, 0) correct.items = [ITEM] correct.available_width = 2 self.assertEqual(self.sheet.shelves[0].__dict__, correct.__dict__) with self.subTest(): correct = [ITEM] self.assertEqual(self.sheet.items, correct)
def testSingleItemInsertion(self): """ Single item Split Horizontal Rotation == False RectMerge == False """ ITEM = item.Item(4, 3) self.BIN.insert(ITEM, 'worst_area_fit') with self.subTest(): correct = [ self.freeRectangle(6, 3, 4, 0), self.freeRectangle(10, 2, 0, 3) ] self.assertEqual(self.BIN.freerects, correct) with self.subTest(): self.assertEqual(ITEM.CornerPoint, (0, 0)) with self.subTest(): self.assertEqual(self.BIN.items, [ITEM])