def test_overlapSpace(self): nodes = [Node(0, 50), Node(50, 50), Node(800, 50), Node(801, 50)] # should return 0 if the input is empty self.assertEqual(metrics.overlapSpace([]), 0) # should return space that nodes on the same layer overlaps on average self.assertEqual(metrics.overlapSpace(nodes), 49 / 4) self.assertEqual(metrics.overlapSpace([nodes, nodes]), 49 * 2 / 8)
def test_createStub(self): n1 = Node(10, 10) stub = n1.createStub(5) self.assertIsNotNone(stub) self.assertEqual(stub.width, 5) self.assertEqual(n1.idealPos, stub.idealPos) self.assertEqual(n1.data, stub.data)
def test_getRoot(self): n1 = Node(10, 10) self.assertEqual(n1.getRoot(), n1) n2 = n1.createStub(5) self.assertEqual(n1.getRoot(), n2) n3 = n2.createStub(5) self.assertEqual(n1.getRoot(), n3)
def test_overlapWithPoint(self): n1 = Node(10, 10) self.assertFalse(n1.overlapWithPoint(4)) self.assertTrue(n1.overlapWithPoint(5)) self.assertTrue(n1.overlapWithPoint(10)) self.assertTrue(n1.overlapWithPoint(15)) self.assertFalse(n1.overlapWithPoint(16))
def test_overflowSpace(self): nodes = [Node(1, 50), Node(-30, 50), Node(804, 50), Node(854, 50)] # should return 0 if both minPos and maxPos are not set self.assertEqual(metrics.overflowSpace(nodes), 0) # should return the amount of pixels that exceed boundary self.assertEqual(metrics.overflowSpace(nodes, 0), 74) self.assertEqual(metrics.overflowSpace(nodes, None, 800), 79) self.assertEqual(metrics.overflowSpace(nodes, 0, 800), 74 + 79)
def test_displacement(self): nodes = [Node(1, 50), Node(2, 50), Node(804, 50), Node(854, 50)] # should return 0 if the input is empty self.assertEqual(metrics.displacement([]), 0) # should return sum of the displacements self.assertEqual(metrics.displacement(nodes), 0) nodes[0].currentPos = 10 nodes[1].currentPos = 10 self.assertEqual(metrics.displacement([nodes]), 17.0 / 4.0)
def test_clone(self): n1 = Node(10, 11, "a") n1.currentPos = 20 n1.layerIndex = 3 n2 = n1.clone() self.assertEqual(n2.idealPos, 10) self.assertEqual(n2.width, 11) self.assertEqual(n2.data, "a") self.assertEqual(n2.currentPos, 20) self.assertEqual(n2.layerIndex, 3)
def test_clone(self): n1 = Node(10, 11, 'a') n1.currentPos = 20 n1.layerIndex = 3 n2 = n1.clone() self.assertEqual(n2.idealPos, 10) self.assertEqual(n2.width, 11) self.assertEqual(n2.data, 'a') self.assertEqual(n2.currentPos, 20) self.assertEqual(n2.layerIndex, 3)
def test_weightedAllocation(self): nodes = [Node(0, 50), Node(50, 50), Node(800, 50), Node(801, 50)] # should return 0 if the input is empty self.assertEqual(metrics.weightedAllocation([]), 0) # should return 0 if the output is in one row self.assertEqual(metrics.weightedAllocation(nodes), 0) # should return number of nodes weighted by layer index self.assertEqual(metrics.weightedAllocation([nodes, nodes]), 4) self.assertEqual(metrics.weightedAllocation([nodes, nodes, nodes]), 4 + 8)
def test_overlapCount(self): nodes = [Node(0, 50), Node(50, 50), Node(800, 50), Node(801, 50)] # should return 0 if the input is empty self.assertEqual(metrics.overlapCount([]), 0) # should return number of times nodes on the same layer overlaps self.assertEqual(metrics.overlapCount(nodes), 1) self.assertEqual(metrics.overlapCount([nodes, nodes]), 2) # should take buffer into consideration self.assertEqual(metrics.overlapCount(nodes, 2), 2) self.assertEqual(metrics.overlapCount([nodes, nodes], 3), 4)
def test_weightedAllocatedSpace(self): nodes = [Node(0, 50), Node(50, 50), Node(800, 50), Node(801, 50)] # should return 0 if the input is empty self.assertEqual(metrics.weightedAllocatedSpace([]), 0) # should return 0 if the output is in one row self.assertEqual(metrics.weightedAllocatedSpace(nodes), 0) # should return width of thed nodes weighted by layer index self.assertEqual(metrics.weightedAllocatedSpace([nodes, nodes]), 200) self.assertEqual(metrics.weightedAllocatedSpace([nodes, nodes, nodes]), 200 + 400)
def test_overDensitySpace(self): nodes = [Node(1, 50), Node(2, 50), Node(804, 50), Node(854, 50)] # should return 0 if the density or layerWidth is not defined self.assertEqual(metrics.overDensitySpace([]), 0) self.assertEqual(metrics.overDensitySpace(nodes), 0) self.assertEqual(metrics.overDensitySpace(nodes, 0.75), 0) self.assertEqual(metrics.overDensitySpace(nodes, None, 1000), 0) # should return the amount of pixels exceeding specified density self.assertEqual(metrics.overDensitySpace(nodes, 0.75, 1000), 0) self.assertEqual(metrics.overDensitySpace(nodes, 0.1, 1000), 100) self.assertEqual(metrics.overDensitySpace([nodes, nodes], 0.1, 1000), 200)
def test_displacement(self): n = Node(10, 10) self.assertEqual(n.displacement(), 0) n.currentPos = 20 self.assertEqual(n.displacement(), -10) n.currentPos = 0 self.assertEqual(n.displacement(), 10)
def get_nodes(self): nodes = [] for it in self.items: n = Node(self.timePos(it.data), it.width, data=it) nodes.append(n) for node in nodes: node.w = (node.data.width + self.options["labelPadding"]["left"] + self.options["labelPadding"]["right"]) node.h = (node.data.height + self.options["labelPadding"]["top"] + self.options["labelPadding"]["bottom"]) if self.options["direction"] in ["left", "right"]: node.h, node.w = node.w, node.h node.width = node.h else: node.width = node.w return nodes
def get_nodes(self): nodes = [] for it in self.items: n = Node(self.timePos(it.data), it.width, data=it) nodes.append(n) for node in nodes: node.w = (node.data.width + self.options['labelPadding']['left'] + self.options['labelPadding']['right']) node.h = (node.data.height + self.options['labelPadding']['top'] + self.options['labelPadding']['bottom']) if self.options['direction'] in ['left', 'right']: node.h, node.w = node.w, node.h node.width = node.h else: node.width = node.w return nodes
def test_overlapWithNode(self): n1 = Node(10, 10) n2 = Node(19, 10) n3 = Node(20, 10) n4 = Node(21, 10) n5 = Node(22, 10) self.assertTrue(n1.overlapWithNode(n2)) self.assertFalse(n1.overlapWithNode(n3)) self.assertFalse(n1.overlapWithNode(n4)) self.assertTrue(n1.overlapWithNode(n2, 2)) self.assertTrue(n1.overlapWithNode(n3, 2)) self.assertTrue(n1.overlapWithNode(n4, 2)) self.assertFalse(n1.overlapWithNode(n5, 2))
def test_moveToIdealPosition(self): n = Node(10, 10) n.currentPos = 20 self.assertNotEqual(n.currentPos, n.idealPos) n.moveToIdealPosition() self.assertEqual(n.currentPos, n.idealPos)
def test_removeStub(self): n1 = Node(10, 10) stub = n1.createStub(5) n1.removeStub() self.assertIsNone(n1.parent) self.assertIsNone(stub.child)
def test_currentLeft(self): n1 = Node(10, 10) n1.currentPos = 20 self.assertEqual(n1.currentLeft(), 15)
def test_idealLeft(self): n1 = Node(10, 10) self.assertEqual(n1.idealLeft(), 5)
def test_positionBefore(self): n1 = Node(10, 10) n2 = Node(19, 10) self.assertEqual(n1.positionBefore(n2), 9) self.assertEqual(n1.positionBefore(n2, 2), 7)
def test_positionAfter(self): n1 = Node(10, 10) n2 = Node(19, 10) self.assertEqual(n1.positionAfter(n2), 29) self.assertEqual(n1.positionAfter(n2, 2), 31)
def test_getPathFromRoot(self): n1 = Node(10, 10) self.assertEqual(n1.getPathFromRoot(), [n1]) n2 = n1.createStub(5) n3 = n2.createStub(5) self.assertEqual(n1.getPathFromRoot(), [n3, n2, n1])
def test_no_overlap(self): n1 = Node(10, 10) n2 = Node(30, 10) self.assertEqual(n1.distanceFrom(n2), 10)
def test_currentRight(self): n1 = Node(10, 10) n1.currentPos = 20 self.assertEqual(n1.currentRight(), 25)
def test_idealRight(self): n1 = Node(10, 10) self.assertEqual(n1.idealRight(), 15)
def test_getLayerIndex(self): n1 = Node(10, 10) self.assertEqual(n1.getLayerIndex(), 0) n1.layerIndex = 10 self.assertEqual(n1.getLayerIndex(), 10)
def test_estimateRequiredLayers_2(self): options = { "algorithm": "overlap", "layerWidth": 960, "density": 0.85, "nodeSpacing": 3, "stubWidth": 1, } nodes = [ Node(1, 100), Node(2, 100), Node(3, 100), Node(3, 100), Node(3, 100), Node(304, 100), Node(454, 100), Node(454, 100), Node(454, 100), Node(804, 100), Node(804, 100), Node(804, 100), Node(804, 100), Node(854, 100), Node(854, 100), ] exp_out = 2 dist = Distributor(options) self.assertEqual(exp_out, dist.estimateRequiredLayers(nodes))
def test_getPathToRootLength(self): n4 = Node(854, 50) n4.currentPos = 800 stub4 = n4.createStub() stub4.currentPos = 700 self.assertEqual(n4.getPathToRootLength(), 254)
def test_isStub(self): n1 = Node(10, 10) stub = n1.createStub(5) self.assertFalse(n1.isStub()) self.assertTrue(stub.isStub())
def test_touching(self): n1 = Node(10, 10) n2 = Node(20, 10) self.assertEqual(n1.distanceFrom(n2), 0)