def testOneItemInsert(self): """ Single Item Fits """ I = item.Item(2, 2) self.S.insert(I) S1 = skyline.SkylineSegment(0, 2, 2) S2 = skyline.SkylineSegment(2, 0, 6) self.assertCountEqual(self.S.skyline, [S1, S2])
def testClipSegmentExtendsRight(self): """ Segmented hangs over left """ I = item.Item(4, 1, CornerPoint=[0, 0]) S = skyline.SkylineSegment(2, 0, 4) res = self.S._clip_segment(S, I) self.assertEqual(res, [skyline.SkylineSegment(4, 0, 2)])
def testClipSegmentExtendsBoth(self): """ Segmented hangs over left """ I = item.Item(2, 1, CornerPoint=[2,0]) S = skyline.SkylineSegment(0, 0, 6) res = self.S.clip_segment(S, I) self.assertCountEqual(res, [skyline.SkylineSegment(0, 0, 2), skyline.SkylineSegment(4,0,2)])
def testCheckFitTrue(self): """ Assert item does fit above line segment """ I = item.Item(2, 2, CornerPoint=[0, 0]) S1 = skyline.SkylineSegment(0, 1, 2) S2 = skyline.SkylineSegment(2, 0, 6) self.S.skyline.pop() self.S.skyline.update([S1, S2]) self.assertEqual(self.S._check_fit(I.width, I.height, 0), (True, 1))
def testCheckFitFalse(self): """ Assert item does fit above line segment """ I = item.Item(2, 2, CornerPoint=[0,0]) S1 = skyline.SkylineSegment(0, 0, 1) S2 = skyline.SkylineSegment(1, 3, 7) self.S.skyline.pop() self.S.skyline.extend([S1, S2]) self.assertEqual(self.S.check_fit(I.width, I.height, 1), (False, None))
def testMergeSegments(self): """ Two segment merge """ S1 = skyline.SkylineSegment(0, 0, 2) S2 = skyline.SkylineSegment(2, 0, 6) S3 = skyline.SkylineSegment(0, 0, 8) self.S.skyline.pop() self.S.skyline.update([S1, S2]) self.S._merge_segments() self.assertEqual(self.S.skyline, [S3])
def testUpdateSegment(self): """ Clip initial (0,0,8) segment with a (2,2) item at (0,0) """ I = item.Item(2, 2, CornerPoint=[0, 0]) S1 = skyline.SkylineSegment(0, 2, 2) S2 = skyline.SkylineSegment(2, 0, 6) res = self.S._update_segment(self.S.skyline[0], 0, I) self.assertCountEqual(res, [S1, S2])
def testMergeThreeSegments(self): """ Three segment merge """ S1 = skyline.SkylineSegment(0, 0, 2) S2 = skyline.SkylineSegment(2, 0, 4) S3 = skyline.SkylineSegment(6, 0, 2) S4 = skyline.SkylineSegment(0, 0, 8) self.S.skyline.pop() self.S.skyline.update([S1, S2, S3]) self.S._merge_segments() self.assertEqual(self.S.skyline, [S4])
def testClipSegmentFullOverlap(self): """ Segmented fully adjacent to item """ I = item.Item(4, 1, CornerPoint=[0, 0]) S = skyline.SkylineSegment(0, 0, 4) res = self.S._clip_segment(S, I) self.assertEqual(res, [])
def testMultiItemInsert(self): """ 5 item insertion """ I0 = item.Item(2, 2) I1 = item.Item(2, 1) I2 = item.Item(3, 3) I3 = item.Item(3, 2) I4 = item.Item(4, 2) self.S.insert(I0) self.S.insert(I1) self.S.insert(I2) self.S.insert(I3) self.S.insert(I4) S0 = skyline.SkylineSegment(0, 2, 2) S1 = skyline.SkylineSegment(2, 4, 2) with self.subTest(): self.assertCountEqual(self.S.skyline, [S1, S0]) with self.subTest(): self.assertEqual(self.S.free_area, 11)
def testMultiItemInsert(self): """ 5 item insertion to match Figure 7 from Jukka's article. """ I0 = item.Item(2, 2) I1 = item.Item(2, 1) I2 = item.Item(3, 3) I3 = item.Item(3, 2) I4 = item.Item(4, 2) self.S.insert(I0) self.S.insert(I1) self.S.insert(I2) self.S.insert(I3) self.S.insert(I4) S0 = skyline.SkylineSegment(0, 4, 3) S1 = skyline.SkylineSegment(7, 0, 1) with self.subTest(): self.assertCountEqual(self.S.skyline, [S1, S0]) with self.subTest(): self.assertEqual(self.S.free_area, 11)