test_sudoku.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. """Unit tests for the :mod:`networkx.generators.sudoku_graph` module."""
  2. import pytest
  3. import networkx as nx
  4. def test_sudoku_negative():
  5. """Raise an error when generating a Sudoku graph of order -1."""
  6. pytest.raises(nx.NetworkXError, nx.sudoku_graph, n=-1)
  7. @pytest.mark.parametrize("n", [0, 1, 2, 3, 4])
  8. def test_sudoku_generator(n):
  9. """Generate Sudoku graphs of various sizes and verify their properties."""
  10. G = nx.sudoku_graph(n)
  11. expected_nodes = n**4
  12. expected_degree = (n - 1) * (3 * n + 1)
  13. expected_edges = expected_nodes * expected_degree // 2
  14. assert not G.is_directed()
  15. assert not G.is_multigraph()
  16. assert G.number_of_nodes() == expected_nodes
  17. assert G.number_of_edges() == expected_edges
  18. assert all(d == expected_degree for _, d in G.degree)
  19. if n == 2:
  20. assert sorted(G.neighbors(6)) == [2, 3, 4, 5, 7, 10, 14]
  21. elif n == 3:
  22. assert sorted(G.neighbors(42)) == [
  23. 6,
  24. 15,
  25. 24,
  26. 33,
  27. 34,
  28. 35,
  29. 36,
  30. 37,
  31. 38,
  32. 39,
  33. 40,
  34. 41,
  35. 43,
  36. 44,
  37. 51,
  38. 52,
  39. 53,
  40. 60,
  41. 69,
  42. 78,
  43. ]
  44. elif n == 4:
  45. assert sorted(G.neighbors(0)) == [
  46. 1,
  47. 2,
  48. 3,
  49. 4,
  50. 5,
  51. 6,
  52. 7,
  53. 8,
  54. 9,
  55. 10,
  56. 11,
  57. 12,
  58. 13,
  59. 14,
  60. 15,
  61. 16,
  62. 17,
  63. 18,
  64. 19,
  65. 32,
  66. 33,
  67. 34,
  68. 35,
  69. 48,
  70. 49,
  71. 50,
  72. 51,
  73. 64,
  74. 80,
  75. 96,
  76. 112,
  77. 128,
  78. 144,
  79. 160,
  80. 176,
  81. 192,
  82. 208,
  83. 224,
  84. 240,
  85. ]