summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py')
-rw-r--r--lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py191
1 files changed, 191 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py
new file mode 100644
index 0000000..85f967a
--- /dev/null
+++ b/lib/python2.7/site-packages/setoolsgui/networkx/algorithms/components/tests/test_biconnected.py
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+from nose.tools import *
+import networkx as nx
+from networkx.algorithms.components import biconnected
+
+def assert_components_equal(x,y):
+ sx = set((frozenset([frozenset(e) for e in c]) for c in x))
+ sy = set((frozenset([frozenset(e) for e in c]) for c in y))
+ assert_equal(sx,sy)
+
+def test_barbell():
+ G=nx.barbell_graph(8,4)
+ G.add_path([7,20,21,22])
+ G.add_cycle([22,23,24,25])
+ pts=set(biconnected.articulation_points(G))
+ assert_equal(pts,set([7,8,9,10,11,12,20,21,22]))
+
+ answer = [set([12, 13, 14, 15, 16, 17, 18, 19]),
+ set([0, 1, 2, 3, 4, 5, 6, 7]),
+ set([22, 23, 24, 25]),
+ set([11, 12]),
+ set([10, 11]),
+ set([9, 10]),
+ set([8, 9]),
+ set([7, 8]),
+ set([21, 22]),
+ set([20, 21]),
+ set([7, 20])]
+ bcc=list(biconnected.biconnected_components(G))
+ bcc.sort(key=len, reverse=True)
+ assert_equal(bcc,answer)
+
+ G.add_edge(2,17)
+ pts=set(biconnected.articulation_points(G))
+ assert_equal(pts,set([7,20,21,22]))
+
+def test_articulation_points_cycle():
+ G=nx.cycle_graph(3)
+ G.add_cycle([1,3,4])
+ pts=set(biconnected.articulation_points(G))
+ assert_equal(pts,set([1]))
+
+def test_is_biconnected():
+ G=nx.cycle_graph(3)
+ assert_true(biconnected.is_biconnected(G))
+ G.add_cycle([1,3,4])
+ assert_false(biconnected.is_biconnected(G))
+
+def test_empty_is_biconnected():
+ G=nx.empty_graph(5)
+ assert_false(biconnected.is_biconnected(G))
+ G.add_edge(0,1)
+ assert_false(biconnected.is_biconnected(G))
+
+def test_biconnected_components_cycle():
+ G=nx.cycle_graph(3)
+ G.add_cycle([1,3,4])
+ pts = set(map(frozenset,biconnected.biconnected_components(G)))
+ assert_equal(pts,set([frozenset([0,1,2]),frozenset([1,3,4])]))
+
+def test_biconnected_component_subgraphs_cycle():
+ G=nx.cycle_graph(3)
+ G.add_cycle([1,3,4,5])
+ G.add_edge(1,3,eattr='red') # test copying of edge data
+ G.node[1]['nattr']='blue'
+ G.graph['gattr']='green'
+ Gc = set(biconnected.biconnected_component_subgraphs(G))
+ assert_equal(len(Gc),2)
+ g1,g2=Gc
+ if 0 in g1:
+ assert_true(nx.is_isomorphic(g1,nx.Graph([(0,1),(0,2),(1,2)])))
+ assert_true(nx.is_isomorphic(g2,nx.Graph([(1,3),(1,5),(3,4),(4,5)])))
+ assert_equal(g2[1][3]['eattr'],'red')
+ assert_equal(g2.node[1]['nattr'],'blue')
+ assert_equal(g2.graph['gattr'],'green')
+ g2[1][3]['eattr']='blue'
+ assert_equal(g2[1][3]['eattr'],'blue')
+ assert_equal(G[1][3]['eattr'],'red')
+ else:
+ assert_true(nx.is_isomorphic(g1,nx.Graph([(1,3),(1,5),(3,4),(4,5)])))
+ assert_true(nx.is_isomorphic(g2,nx.Graph([(0,1),(0,2),(1,2)])))
+ assert_equal(g1[1][3]['eattr'],'red')
+ assert_equal(g1.node[1]['nattr'],'blue')
+ assert_equal(g1.graph['gattr'],'green')
+ g1[1][3]['eattr']='blue'
+ assert_equal(g1[1][3]['eattr'],'blue')
+ assert_equal(G[1][3]['eattr'],'red')
+
+
+def test_biconnected_components1():
+ # graph example from
+ # http://www.ibluemojo.com/school/articul_algorithm.html
+ edges=[(0,1),
+ (0,5),
+ (0,6),
+ (0,14),
+ (1,5),
+ (1,6),
+ (1,14),
+ (2,4),
+ (2,10),
+ (3,4),
+ (3,15),
+ (4,6),
+ (4,7),
+ (4,10),
+ (5,14),
+ (6,14),
+ (7,9),
+ (8,9),
+ (8,12),
+ (8,13),
+ (10,15),
+ (11,12),
+ (11,13),
+ (12,13)]
+ G=nx.Graph(edges)
+ pts = set(biconnected.articulation_points(G))
+ assert_equal(pts,set([4,6,7,8,9]))
+ comps = list(biconnected.biconnected_component_edges(G))
+ answer = [
+ [(3,4),(15,3),(10,15),(10,4),(2,10),(4,2)],
+ [(13,12),(13,8),(11,13),(12,11),(8,12)],
+ [(9,8)],
+ [(7,9)],
+ [(4,7)],
+ [(6,4)],
+ [(14,0),(5,1),(5,0),(14,5),(14,1),(6,14),(6,0),(1,6),(0,1)],
+ ]
+ assert_components_equal(comps,answer)
+
+def test_biconnected_components2():
+ G=nx.Graph()
+ G.add_cycle('ABC')
+ G.add_cycle('CDE')
+ G.add_cycle('FIJHG')
+ G.add_cycle('GIJ')
+ G.add_edge('E','G')
+ comps = list(biconnected.biconnected_component_edges(G))
+ answer = [
+ [tuple('GF'),tuple('FI'),tuple('IG'),tuple('IJ'),tuple('JG'),tuple('JH'),tuple('HG')],
+ [tuple('EG')],
+ [tuple('CD'),tuple('DE'),tuple('CE')],
+ [tuple('AB'),tuple('BC'),tuple('AC')]
+ ]
+ assert_components_equal(comps,answer)
+
+def test_biconnected_davis():
+ D = nx.davis_southern_women_graph()
+ bcc = list(biconnected.biconnected_components(D))[0]
+ assert_true(set(D) == bcc) # All nodes in a giant bicomponent
+ # So no articulation points
+ assert_equal(list(biconnected.articulation_points(D)),[])
+
+def test_biconnected_karate():
+ K = nx.karate_club_graph()
+ answer = [set([0, 1, 2, 3, 7, 8, 9, 12, 13, 14, 15, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]),
+ set([0, 4, 5, 6, 10, 16]),
+ set([0, 11])]
+ bcc = list(biconnected.biconnected_components(K))
+ bcc.sort(key=len, reverse=True)
+ assert_true(list(biconnected.biconnected_components(K)) == answer)
+ assert_equal(list(biconnected.articulation_points(K)),[0])
+
+def test_biconnected_eppstein():
+ # tests from http://www.ics.uci.edu/~eppstein/PADS/Biconnectivity.py
+ G1 = nx.Graph({
+ 0: [1,2,5],
+ 1: [0,5],
+ 2: [0,3,4],
+ 3: [2,4,5,6],
+ 4: [2,3,5,6],
+ 5: [0,1,3,4],
+ 6: [3,4]})
+ G2 = nx.Graph({
+ 0: [2,5],
+ 1: [3,8],
+ 2: [0,3,5],
+ 3: [1,2,6,8],
+ 4: [7],
+ 5: [0,2],
+ 6: [3,8],
+ 7: [4],
+ 8: [1,3,6]})
+ assert_true(biconnected.is_biconnected(G1))
+ assert_false(biconnected.is_biconnected(G2))
+ answer_G2 = [set([1, 3, 6, 8]), set([0, 2, 5]), set([2, 3]), set([4, 7])]
+ bcc = list(biconnected.biconnected_components(G2))
+ bcc.sort(key=len, reverse=True)
+ assert_equal(bcc, answer_G2)