94 lines
2.3 KiB
Python
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)
|