Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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])
Exemplo n.º 3
0
 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])
Exemplo n.º 4
0
 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)])
Exemplo n.º 5
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)
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 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'))
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 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)
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
 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])
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
 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])