def testThreeItemInsert(self): """ Three Item insertion Rotation = False """ I = item.Item(1, 1) I2 = item.Item(4, 2) I3 = item.Item(1, 1) F0 = maximal_rectangles.FreeRectangle(8, 2, 0, 2) F1 = maximal_rectangles.FreeRectangle(3, 4, 5, 0) self.M.contact_point(I) self.M.contact_point(I2) self.M.contact_point(I3) with self.subTest(): self.assertCountEqual(self.M.freerects, [F0, F1]) with self.subTest(): self.assertEqual(I.x, 0) self.assertEqual(I.y, 0) with self.subTest(): self.assertEqual(I2.x, 1) self.assertEqual(I2.y, 0) with self.subTest(): self.assertEqual(I3.x, 0) self.assertEqual(I3.y, 1) with self.subTest(): self.assertEqual(self.M.free_area, 22)
def testFindOverlap(self): """ Returns the area of overlap of two intersected rectangles """ F0 = maximal_rectangles.FreeRectangle(4, 4, 0, 0) F1 = maximal_rectangles.FreeRectangle(4, 2, 3, 0) B = (3, 0, 7, 2) self.assertEqual(self.M.findOverlap(F0, B), (3, 0, 4, 2))
def testPruneOverlaps(self): F0 = maximal_rectangles.FreeRectangle(4, 4, 0, 0) F1 = maximal_rectangles.FreeRectangle(1, 1, 0, 0) self.M.freerects = [F0, F1] itemBounds = (0, 0, 2, 2) self.M.prune_overlaps(itemBounds) F2 = maximal_rectangles.FreeRectangle(2, 4, 2, 0) F3 = maximal_rectangles.FreeRectangle(4, 2, 0, 2) self.assertCountEqual(self.M.freerects, [F2, F3])
def testRemoveRedundent(self): """ F1 should be removed from freerects """ F0 = maximal_rectangles.FreeRectangle(3, 3, 0, 0) F1 = maximal_rectangles.FreeRectangle(1, 1, 1, 1) F2 = maximal_rectangles.FreeRectangle(2, 1, 5, 1) F3 = maximal_rectangles.FreeRectangle(1, 1, 5, 1) self.M.freerects = [F0, F1, F2, F3] self.M.remove_redundent() self.assertCountEqual(self.M.freerects, [F0, F2])
def testSplitRectangle(self): """ Split a rectangle into two maximal rectangles """ I = item.Item(2, 2) F = maximal_rectangles.FreeRectangle(4, 4, 0, 0) Ft = maximal_rectangles.FreeRectangle(4, 2, 0, 2) Fr = maximal_rectangles.FreeRectangle(2, 4, 2, 0) remainders = self.M.split_rectangle(F, I) self.assertCountEqual(remainders, [Ft, Fr])
def testEncapsulates(self): """ Returns a boolean if the second rectangle is fully encapsulated in the first """ F0 = maximal_rectangles.FreeRectangle(3, 3, 0, 0) F1 = maximal_rectangles.FreeRectangle(1, 1, 1, 1) F2 = maximal_rectangles.FreeRectangle(2, 1, 5, 1) with self.subTest(): self.assertTrue(self.M.encapsulates(F0, F1)) with self.subTest(): self.assertFalse(self.M.encapsulates(F0, F2))
def testCheckIntersectionFalse(self): """ Two items with no overlap """ F0 = maximal_rectangles.FreeRectangle(4, 4, 0, 0) B = (5, 0, 9, 2) self.assertFalse(self.M.checkInstersection(F0, B))
def testCheckIntersectionTrue(self): """ Two items with partial overlap """ F0 = maximal_rectangles.FreeRectangle(4, 4, 0, 0) B = (0, 0, 2, 2) self.assertTrue(self.M.checkInstersection(F0, B))
def testInsert(self): """ Item Insertion Rotation = False """ I = item.Item(2, 2) F0 = maximal_rectangles.FreeRectangle(8, 4, 0, 0) self.assertTrue(self.M.insert(I, 'best_shortside'))
def testBadInsert(self): """ Item too Big Rotation = False """ I = item.Item(9, 4) F0 = maximal_rectangles.FreeRectangle(8, 4, 0, 0) self.M.best_shortside(I) self.assertCountEqual(self.M.freerects, [F0])
def testItemDoesntFitsRect(self): """ Single Item Fits the FreeRectangle Rotation == False """ I = item.Item(2, 4) F = maximal_rectangles.FreeRectangle(2, 3, 0, 0) self.assertFalse(self.M.item_fits_rect(I, F))
def testTwoItemInsert(self): """ Two Item insertion Rotation = False """ I = item.Item(2, 2) I2 = item.Item(4, 2) F0 = maximal_rectangles.FreeRectangle(6, 2, 2, 0) F1 = maximal_rectangles.FreeRectangle(4, 4, 4, 0) self.M.best_area(I) self.M.best_area(I2) with self.subTest(): self.assertCountEqual(self.M.freerects, [F0, F1]) with self.subTest(): self.assertEqual(I.x, 0) self.assertEqual(I.y, 0) with self.subTest(): self.assertEqual(I2.x, 0) self.assertEqual(I2.y, 2) with self.subTest(): self.assertEqual(self.M.free_area, 20)
def testTwoItemInsert(self): """ Two Item insertion Rotation = False """ I = item.Item(1, 1) I2 = item.Item(2, 2) F0 = maximal_rectangles.FreeRectangle(5, 4, 3, 0) F1 = maximal_rectangles.FreeRectangle(1, 3, 0, 1) F2 = maximal_rectangles.FreeRectangle(8, 2, 0, 2) self.M.best_longside(I) self.M.best_longside(I2) with self.subTest(): self.assertCountEqual(self.M.freerects, [F0, F1, F2]) with self.subTest(): self.assertEqual(I.x, 0) self.assertEqual(I.y, 0) with self.subTest(): self.assertEqual(I2.x, 1) self.assertEqual(I2.y, 0) with self.subTest(): self.assertEqual(self.M.free_area, 27)
def testClipOverlap(self): """ Returns maximal rectangle remainders of a rectangle fully overlapping a bounding box """ F0 = maximal_rectangles.FreeRectangle(3, 3, 0, 0) F1 = maximal_rectangles.FreeRectangle(1, 1, 1, 1) B = (1, 1, 2, 2) overlap = self.M.findOverlap(F0, B) remainders = self.M.clipOverlap(F0, overlap) Fl = maximal_rectangles.FreeRectangle(1, 3, 0, 0) Fr = maximal_rectangles.FreeRectangle(1, 3, 2, 0) Fb = maximal_rectangles.FreeRectangle(3, 1, 0, 0) Ft = maximal_rectangles.FreeRectangle(3, 1, 0, 2) self.assertCountEqual(remainders, [Fl, Fr, Fb, Ft])