Files
easy-graph--easy-graph/easygraph/functions/tests/test_isolate.py
T
2026-07-13 12:36:30 +08:00

94 lines
2.3 KiB
Python

"""Unit tests for the :mod:`easygraph.functions.isolates` module."""
import easygraph as eg
import pytest
def test_is_isolate():
G = eg.Graph()
G.add_edge(0, 1)
G.add_node(2)
assert not eg.is_isolate(G, 0)
assert not eg.is_isolate(G, 1)
assert eg.is_isolate(G, 2)
def test_isolates():
G = eg.Graph()
G.add_edge(0, 1)
G.add_nodes_from([2, 3])
assert sorted(eg.isolates(G)) == [2, 3]
def test_number_of_isolates():
G = eg.Graph()
G.add_edge(0, 1)
G.add_nodes_from([2, 3])
assert eg.number_of_isolates(G) == 2
def test_empty_graph_isolates():
G = eg.Graph()
assert list(eg.isolates(G)) == []
assert eg.number_of_isolates(G) == 0
def test_all_isolates_graph():
G = eg.Graph()
G.add_nodes_from(range(5))
assert sorted(eg.isolates(G)) == list(range(5))
assert all(eg.is_isolate(G, n) for n in G.nodes)
assert eg.number_of_isolates(G) == 5
def test_directed_graph_sources_and_sinks_not_isolates():
G = eg.DiGraph()
G.add_edges_from([(1, 2), (2, 3)])
G.add_node(4) # truly isolated
assert eg.is_isolate(G, 4)
assert not eg.is_isolate(G, 1) # has out-degree
assert not eg.is_isolate(G, 3) # has in-degree
assert sorted(eg.isolates(G)) == [4]
assert eg.number_of_isolates(G) == 1
def test_selfloop_not_isolate():
G = eg.Graph()
G.add_node(1)
G.add_edge(1, 1)
assert not eg.is_isolate(G, 1)
assert list(eg.isolates(G)) == []
assert eg.number_of_isolates(G) == 0
def test_weighted_edges_isolate_behavior():
G = eg.Graph()
G.add_edge(1, 2, weight=5)
G.add_node(3)
assert eg.is_isolate(G, 3)
assert not eg.is_isolate(G, 1)
assert eg.number_of_isolates(G) == 1
def test_remove_isolate_then_check():
G = eg.Graph()
G.add_nodes_from([1, 2, 3])
G.add_edge(1, 2)
assert 3 in eg.isolates(G)
G.remove_node(3)
assert 3 not in G
assert 3 not in list(eg.isolates(G))
def test_mixed_isolates_and_edges():
G = eg.Graph()
G.add_nodes_from([0, 1, 2, 3, 4])
G.add_edges_from([(0, 1), (1, 2)])
# 3 and 4 are isolates
assert set(eg.isolates(G)) == {3, 4}
assert eg.number_of_isolates(G) == 2
for node in [0, 1, 2]:
assert not eg.is_isolate(G, node)
for node in [3, 4]:
assert eg.is_isolate(G, node)