def test_graph_references(self): graph = ObjectGraph() n1 = graph.createNode(Node, "n1") n2 = graph.createNode(Node, "n2") graph.createReference(None, n1, None) graph.createReference(None, n2, "hello") self.assertEqual(graph.edgeData(None, n1), None) self.assertEqual(graph.edgeData(None, n2), "hello") graph.updateEdgeData(None, n1, "world") self.assertEqual(graph.edgeData(None, n1), "world") out, inc = graph.get_edges(None) out = list(out) inc = list(inc) self.assertEqual(out, [n1, n2]) self.assertEqual(len(out), 2) self.assertTrue(n1 in out) self.assertTrue(n2 in out) self.assertEqual(inc, []) graph.removeReference(None, n2) out, inc = graph.get_edges(None) out = list(out) inc = list(inc) self.assertTrue(n2 not in out)
def test_edge_data(self): graph = ObjectGraph() n1 = graph.createNode(ArgNode, "n1", 1) n2 = graph.createNode(ArgNode, "n2", 2) n3 = graph.createNode(ArgNode, "n3", 3) graph.createReference(n1, n2) graph.createReference(n1, n3, "foo") self.assertIs(graph.edgeData(n1, n2), None) self.assertIs(graph.edgeData(n1, n3), "foo") graph.updateEdgeData(n1, n2, "bar") self.assertIs(graph.edgeData(n1, n2), "bar")
def test_reference_oddity(self): # Not sure if I actually like this, cannot change for now... graph = ObjectGraph() n1 = graph.createNode(Node, "n1") n2 = graph.createNode(Node, "n2") graph.createReference("n1", "n2") graph.createReference("n1", "n3") graph.createReference("n3", "n1") nodes = list(graph.nodes()) self.assertEqual(len(nodes), 2) self.assertTrue(n1 in nodes) self.assertTrue(n2 in nodes) out, inc = graph.get_edges(n1) out = list(out) inc = list(inc) self.assertEqual(out, [n2]) self.assertEqual(inc, [])
def testEdges(self): graph = ObjectGraph() n1 = graph.createNode(ArgNode, "n1", 1) n2 = graph.createNode(ArgNode, "n2", 1) n3 = graph.createNode(ArgNode, "n3", 1) n4 = graph.createNode(ArgNode, "n4", 1) graph.createReference(n1, n2, "n1-n2") graph.createReference("n1", "n3", "n1-n3") graph.createReference("n2", n3) g = graph.graph e = g.edge_by_node("n1", "n2") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), "n1-n2") e = g.edge_by_node("n1", "n3") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), "n1-n3") e = g.edge_by_node("n2", "n3") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), None) e = g.edge_by_node("n1", "n4") self.assertTrue(e is None) graph.removeReference(n1, n2) e = g.edge_by_node("n1", "n2") self.assertTrue(e is None) graph.removeReference("n1", "n3") e = g.edge_by_node("n1", "n3") self.assertTrue(e is None) graph.createReference(n1, n2, "foo") e = g.edge_by_node("n1", "n2") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), "foo") graph.removeReference("A", "B") # neither node exists, shouldn't fail
def test_get_edges(self): graph = ObjectGraph() n1 = graph.createNode(ArgNode, "n1", 1) n2 = graph.createNode(ArgNode, "n2", 2) n3 = graph.createNode(ArgNode, "n3", 3) n4 = graph.createNode(ArgNode, "n4", 4) n5 = graph.createNode(ArgNode, "n5", 5) n6 = graph.createNode(ArgNode, "n6", 5) graph.createReference(n1, n2) graph.createReference(n1, n3) graph.createReference(n3, n1) graph.createReference(n5, n1) graph.createReference(n2, n4) graph.createReference(n2, n5) graph.createReference(n6, n2) outs, ins = graph.get_edges(n1) self.assertFalse(isinstance(outs, list)) self.assertFalse(isinstance(ins, list)) ins = list(ins) outs = list(outs) self.assertTrue(n1 not in outs) self.assertTrue(n2 in outs) self.assertTrue(n3 in outs) self.assertTrue(n4 not in outs) self.assertTrue(n5 not in outs) self.assertTrue(n6 not in outs) self.assertTrue(n1 not in ins) self.assertTrue(n2 not in ins) self.assertTrue(n3 in ins) self.assertTrue(n4 not in ins) self.assertTrue(n5 in ins) self.assertTrue(n6 not in ins)
def testEdges(self): graph = ObjectGraph() n1 = graph.createNode(ArgNode, "n1", 1) n2 = graph.createNode(ArgNode, "n2", 1) n3 = graph.createNode(ArgNode, "n3", 1) n4 = graph.createNode(ArgNode, "n4", 1) graph.createReference(n1, n2, "n1-n2") graph.createReference("n1", "n3", "n1-n3") graph.createReference("n2", n3) g = graph.graph e = g.edge_by_node("n1", "n2") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), "n1-n2") e = g.edge_by_node("n1", "n3") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), "n1-n3") e = g.edge_by_node("n2", "n3") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), None) e = g.edge_by_node("n1", "n4") self.assertTrue(e is None) graph.removeReference(n1, n2) e = g.edge_by_node("n1", "n2") self.assertTrue(e is None) graph.removeReference("n1", "n3") e = g.edge_by_node("n1", "n3") self.assertTrue(e is None) graph.createReference(n1, n2, "foo") e = g.edge_by_node("n1", "n2") self.assertTrue(e is not None) self.assertEqual(g.edge_data(e), "foo")
def test_filterStack(self): graph = ObjectGraph() n1 = graph.createNode(ArgNode, "n1", 0) n11 = graph.createNode(ArgNode, "n1.1", 1) n12 = graph.createNode(ArgNode, "n1.2", 0) n111 = graph.createNode(ArgNode, "n1.1.1", 0) n112 = graph.createNode(ArgNode, "n1.1.2", 2) n2 = graph.createNode(ArgNode, "n2", 0) n3 = graph.createNode(ArgNode, "n2", 0) graph.createReference(None, n1) graph.createReference(None, n2) graph.createReference(n1, n11) graph.createReference(n1, n12) graph.createReference(n11, n111) graph.createReference(n11, n112) self.assertTrue(n1 in graph) self.assertTrue(n2 in graph) self.assertTrue(n11 in graph) self.assertTrue(n12 in graph) self.assertTrue(n111 in graph) self.assertTrue(n112 in graph) self.assertTrue(n2 in graph) self.assertTrue(n3 in graph) visited, removes, orphans = graph.filterStack( [lambda n: n.args[0] != 1, lambda n: n.args[0] != 2] ) self.assertEqual(visited, 6) self.assertEqual(removes, 2) self.assertEqual(orphans, 1) e = graph.graph.edge_by_node(n1.graphident, n111.graphident) self.assertEqual(graph.graph.edge_data(e), "orphan") self.assertTrue(n1 in graph) self.assertTrue(n2 in graph) self.assertTrue(n11 not in graph) self.assertTrue(n12 in graph) self.assertTrue(n111 in graph) self.assertTrue(n112 not in graph) self.assertTrue(n2 in graph) self.assertTrue(n3 in graph)
def test_filterStack(self): graph = ObjectGraph() n1 = graph.createNode(ArgNode, "n1", 0) n11 = graph.createNode(ArgNode, "n1.1", 1) n12 = graph.createNode(ArgNode, "n1.2", 0) n111 = graph.createNode(ArgNode, "n1.1.1", 0) n112 = graph.createNode(ArgNode, "n1.1.2",2) n2 = graph.createNode(ArgNode, "n2", 0) n3 = graph.createNode(ArgNode, "n2", 0) graph.createReference(None, n1) graph.createReference(None, n2) graph.createReference(n1, n11) graph.createReference(n1, n12) graph.createReference(n11, n111) graph.createReference(n11, n112) self.assertTrue(n1 in graph) self.assertTrue(n2 in graph) self.assertTrue(n11 in graph) self.assertTrue(n12 in graph) self.assertTrue(n111 in graph) self.assertTrue(n112 in graph) self.assertTrue(n2 in graph) self.assertTrue(n3 in graph) visited, removes, orphans = graph.filterStack( [lambda n: n.args[0] != 1, lambda n: n.args[0] != 2]) self.assertEqual(visited, 6) self.assertEqual(removes, 2) self.assertEqual(orphans, 1) e = graph.graph.edge_by_node(n1.graphident, n111.graphident) self.assertEqual(graph.graph.edge_data(e), "orphan") self.assertTrue(n1 in graph) self.assertTrue(n2 in graph) self.assertTrue(n11 not in graph) self.assertTrue(n12 in graph) self.assertTrue(n111 in graph) self.assertTrue(n112 not in graph) self.assertTrue(n2 in graph) self.assertTrue(n3 in graph)
def test_flatten(self): graph = ObjectGraph() n1 = graph.createNode(ArgNode, "n1", 1) n2 = graph.createNode(ArgNode, "n2", 2) n3 = graph.createNode(ArgNode, "n3", 3) n4 = graph.createNode(ArgNode, "n4", 4) n5 = graph.createNode(ArgNode, "n5", 5) n6 = graph.createNode(ArgNode, "n6", 6) n7 = graph.createNode(ArgNode, "n7", 7) n8 = graph.createNode(ArgNode, "n8", 8) graph.createReference(graph, n1) graph.createReference(graph, n7) graph.createReference(n1, n2) graph.createReference(n1, n4) graph.createReference(n2, n3) graph.createReference(n2, n5) graph.createReference(n5, n6) graph.createReference(n4, n6) graph.createReference(n4, n2) self.assertFalse(isinstance(graph.flatten(), list)) fl = list(graph.flatten()) self.assertTrue(n1 in fl) self.assertTrue(n2 in fl) self.assertTrue(n3 in fl) self.assertTrue(n4 in fl) self.assertTrue(n5 in fl) self.assertTrue(n6 in fl) self.assertTrue(n7 in fl) self.assertFalse(n8 in fl) fl = list(graph.flatten(start=n2)) self.assertFalse(n1 in fl) self.assertTrue(n2 in fl) self.assertTrue(n3 in fl) self.assertFalse(n4 in fl) self.assertTrue(n5 in fl) self.assertTrue(n6 in fl) self.assertFalse(n7 in fl) self.assertFalse(n8 in fl) graph.createReference(n1, n5) fl = list(graph.flatten(lambda n: n.args[0] % 2 != 0)) self.assertTrue(n1 in fl) self.assertFalse(n2 in fl) self.assertFalse(n3 in fl) self.assertFalse(n4 in fl) self.assertTrue(n5 in fl) self.assertFalse(n6 in fl) self.assertTrue(n7 in fl) self.assertFalse(n8 in fl)