|
"""Unit tests for the :mod:`networkx.generators.sudoku_graph` module.""" |
|
|
|
import pytest |
|
|
|
import networkx as nx |
|
|
|
|
|
def test_sudoku_negative(): |
|
"""Raise an error when generating a Sudoku graph of order -1.""" |
|
pytest.raises(nx.NetworkXError, nx.sudoku_graph, n=-1) |
|
|
|
|
|
@pytest.mark.parametrize("n", [0, 1, 2, 3, 4]) |
|
def test_sudoku_generator(n): |
|
"""Generate Sudoku graphs of various sizes and verify their properties.""" |
|
G = nx.sudoku_graph(n) |
|
expected_nodes = n**4 |
|
expected_degree = (n - 1) * (3 * n + 1) |
|
expected_edges = expected_nodes * expected_degree // 2 |
|
assert not G.is_directed() |
|
assert not G.is_multigraph() |
|
assert G.number_of_nodes() == expected_nodes |
|
assert G.number_of_edges() == expected_edges |
|
assert all(d == expected_degree for _, d in G.degree) |
|
|
|
if n == 2: |
|
assert sorted(G.neighbors(6)) == [2, 3, 4, 5, 7, 10, 14] |
|
elif n == 3: |
|
assert sorted(G.neighbors(42)) == [ |
|
6, |
|
15, |
|
24, |
|
33, |
|
34, |
|
35, |
|
36, |
|
37, |
|
38, |
|
39, |
|
40, |
|
41, |
|
43, |
|
44, |
|
51, |
|
52, |
|
53, |
|
60, |
|
69, |
|
78, |
|
] |
|
elif n == 4: |
|
assert sorted(G.neighbors(0)) == [ |
|
1, |
|
2, |
|
3, |
|
4, |
|
5, |
|
6, |
|
7, |
|
8, |
|
9, |
|
10, |
|
11, |
|
12, |
|
13, |
|
14, |
|
15, |
|
16, |
|
17, |
|
18, |
|
19, |
|
32, |
|
33, |
|
34, |
|
35, |
|
48, |
|
49, |
|
50, |
|
51, |
|
64, |
|
80, |
|
96, |
|
112, |
|
128, |
|
144, |
|
160, |
|
176, |
|
192, |
|
208, |
|
224, |
|
240, |
|
] |
|
|