test_dispersion.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import networkx as nx
  2. def small_ego_G():
  3. """The sample network from https://arxiv.org/pdf/1310.6753v1.pdf"""
  4. edges = [
  5. ("a", "b"),
  6. ("a", "c"),
  7. ("b", "c"),
  8. ("b", "d"),
  9. ("b", "e"),
  10. ("b", "f"),
  11. ("c", "d"),
  12. ("c", "f"),
  13. ("c", "h"),
  14. ("d", "f"),
  15. ("e", "f"),
  16. ("f", "h"),
  17. ("h", "j"),
  18. ("h", "k"),
  19. ("i", "j"),
  20. ("i", "k"),
  21. ("j", "k"),
  22. ("u", "a"),
  23. ("u", "b"),
  24. ("u", "c"),
  25. ("u", "d"),
  26. ("u", "e"),
  27. ("u", "f"),
  28. ("u", "g"),
  29. ("u", "h"),
  30. ("u", "i"),
  31. ("u", "j"),
  32. ("u", "k"),
  33. ]
  34. G = nx.Graph()
  35. G.add_edges_from(edges)
  36. return G
  37. class TestDispersion:
  38. def test_article(self):
  39. """our algorithm matches article's"""
  40. G = small_ego_G()
  41. disp_uh = nx.dispersion(G, "u", "h", normalized=False)
  42. disp_ub = nx.dispersion(G, "u", "b", normalized=False)
  43. assert disp_uh == 4
  44. assert disp_ub == 1
  45. def test_results_length(self):
  46. """there is a result for every node"""
  47. G = small_ego_G()
  48. disp = nx.dispersion(G)
  49. disp_Gu = nx.dispersion(G, "u")
  50. disp_uv = nx.dispersion(G, "u", "h")
  51. assert len(disp) == len(G)
  52. assert len(disp_Gu) == len(G) - 1
  53. assert isinstance(disp_uv, float)
  54. def test_dispersion_v_only(self):
  55. G = small_ego_G()
  56. disp_G_h = nx.dispersion(G, v="h", normalized=False)
  57. disp_G_h_normalized = nx.dispersion(G, v="h", normalized=True)
  58. assert disp_G_h == {"c": 0, "f": 0, "j": 0, "k": 0, "u": 4}
  59. assert disp_G_h_normalized == {"c": 0.0, "f": 0.0, "j": 0.0, "k": 0.0, "u": 1.0}
  60. def test_impossible_things(self):
  61. G = nx.karate_club_graph()
  62. disp = nx.dispersion(G)
  63. for u in disp:
  64. for v in disp[u]:
  65. assert disp[u][v] >= 0