test_regular.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import pytest
  2. import networkx
  3. import networkx as nx
  4. import networkx.algorithms.regular as reg
  5. import networkx.generators as gen
  6. class TestKFactor:
  7. def test_k_factor_trivial(self):
  8. g = gen.cycle_graph(4)
  9. f = reg.k_factor(g, 2)
  10. assert g.edges == f.edges
  11. def test_k_factor1(self):
  12. g = gen.grid_2d_graph(4, 4)
  13. g_kf = reg.k_factor(g, 2)
  14. for edge in g_kf.edges():
  15. assert g.has_edge(edge[0], edge[1])
  16. for _, degree in g_kf.degree():
  17. assert degree == 2
  18. def test_k_factor2(self):
  19. g = gen.complete_graph(6)
  20. g_kf = reg.k_factor(g, 3)
  21. for edge in g_kf.edges():
  22. assert g.has_edge(edge[0], edge[1])
  23. for _, degree in g_kf.degree():
  24. assert degree == 3
  25. def test_k_factor3(self):
  26. g = gen.grid_2d_graph(4, 4)
  27. with pytest.raises(nx.NetworkXUnfeasible):
  28. reg.k_factor(g, 3)
  29. def test_k_factor4(self):
  30. g = gen.lattice.hexagonal_lattice_graph(4, 4)
  31. # Perfect matching doesn't exist for 4,4 hexagonal lattice graph
  32. with pytest.raises(nx.NetworkXUnfeasible):
  33. reg.k_factor(g, 2)
  34. def test_k_factor5(self):
  35. g = gen.complete_graph(6)
  36. # small k to exercise SmallKGadget
  37. g_kf = reg.k_factor(g, 2)
  38. for edge in g_kf.edges():
  39. assert g.has_edge(edge[0], edge[1])
  40. for _, degree in g_kf.degree():
  41. assert degree == 2
  42. class TestIsRegular:
  43. def test_is_regular1(self):
  44. g = gen.cycle_graph(4)
  45. assert reg.is_regular(g)
  46. def test_is_regular2(self):
  47. g = gen.complete_graph(5)
  48. assert reg.is_regular(g)
  49. def test_is_regular3(self):
  50. g = gen.lollipop_graph(5, 5)
  51. assert not reg.is_regular(g)
  52. def test_is_regular4(self):
  53. g = nx.DiGraph()
  54. g.add_edges_from([(0, 1), (1, 2), (2, 0)])
  55. assert reg.is_regular(g)
  56. class TestIsKRegular:
  57. def test_is_k_regular1(self):
  58. g = gen.cycle_graph(4)
  59. assert reg.is_k_regular(g, 2)
  60. assert not reg.is_k_regular(g, 3)
  61. def test_is_k_regular2(self):
  62. g = gen.complete_graph(5)
  63. assert reg.is_k_regular(g, 4)
  64. assert not reg.is_k_regular(g, 3)
  65. assert not reg.is_k_regular(g, 6)
  66. def test_is_k_regular3(self):
  67. g = gen.lollipop_graph(5, 5)
  68. assert not reg.is_k_regular(g, 5)
  69. assert not reg.is_k_regular(g, 6)