43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
|
import networkx as nx
|
||
|
|
||
|
|
||
|
def small_ego_G():
|
||
|
"""The sample network from https://arxiv.org/pdf/1310.6753v1.pdf"""
|
||
|
edges = [('a', 'b'), ('a', 'c'), ('b', 'c'), ('b', 'd'),
|
||
|
('b', 'e'), ('b', 'f'), ('c', 'd'), ('c', 'f'), ('c', 'h'), ('d', 'f'), ('e', 'f'),
|
||
|
('f', 'h'), ('h', 'j'), ('h', 'k'), ('i', 'j'), ('i', 'k'), ('j', 'k'), ('u', 'a'),
|
||
|
('u', 'b'), ('u', 'c'), ('u', 'd'), ('u', 'e'), ('u', 'f'), ('u', 'g'), ('u', 'h'),
|
||
|
('u', 'i'), ('u', 'j'), ('u', 'k')]
|
||
|
G = nx.Graph()
|
||
|
G.add_edges_from(edges)
|
||
|
|
||
|
return G
|
||
|
|
||
|
|
||
|
class TestDispersion(object):
|
||
|
|
||
|
def test_article(self):
|
||
|
"""our algorithm matches article's"""
|
||
|
G = small_ego_G()
|
||
|
disp_uh = nx.dispersion(G, 'u', 'h', normalized=False)
|
||
|
disp_ub = nx.dispersion(G, 'u', 'b', normalized=False)
|
||
|
assert disp_uh == 4
|
||
|
assert disp_ub == 1
|
||
|
|
||
|
def test_results_length(self):
|
||
|
"""there is a result for every node"""
|
||
|
G = small_ego_G()
|
||
|
disp = nx.dispersion(G)
|
||
|
disp_Gu = nx.dispersion(G, 'u')
|
||
|
disp_uv = nx.dispersion(G, 'u', 'h')
|
||
|
assert len(disp) == len(G)
|
||
|
assert len(disp_Gu) == len(G) - 1
|
||
|
assert type(disp_uv) is float
|
||
|
|
||
|
def test_impossible_things(self):
|
||
|
G = nx.karate_club_graph()
|
||
|
disp = nx.dispersion(G)
|
||
|
for u in disp:
|
||
|
for v in disp[u]:
|
||
|
assert disp[u][v] >= 0
|