Initial release: iai-mcp v0.1.0
Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: XNLLLLH <XNLLLLH@users.noreply.github.com>
This commit is contained in:
commit
f6b876fbe7
332 changed files with 97258 additions and 0 deletions
62
tests/test_richclub.py
Normal file
62
tests/test_richclub.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
"""Tests for iai_mcp.richclub (CONN-02 top-10% pre-fetch)."""
|
||||
from __future__ import annotations
|
||||
|
||||
from uuid import uuid4
|
||||
|
||||
from iai_mcp.graph import MemoryGraph
|
||||
from iai_mcp.richclub import rich_club_nodes
|
||||
|
||||
|
||||
def test_rich_club_selects_top_10_percent() -> None:
|
||||
"""CONN-02: 20-node chain, percent=0.10 -> exactly 2 nodes (top centralities)."""
|
||||
g = MemoryGraph()
|
||||
nodes = [uuid4() for _ in range(20)]
|
||||
for n in nodes:
|
||||
g.add_node(n, community_id=None, embedding=[0.0] * 384)
|
||||
for i in range(19):
|
||||
g.add_edge(nodes[i], nodes[i + 1])
|
||||
rc = rich_club_nodes(g, percent=0.10)
|
||||
assert len(rc) == 2
|
||||
|
||||
|
||||
def test_rich_club_never_empty_on_nonempty_graph() -> None:
|
||||
"""5 nodes with 0.10 percent rounds up to 1 (rich club of zero = useless)."""
|
||||
g = MemoryGraph()
|
||||
nodes = [uuid4() for _ in range(5)]
|
||||
for n in nodes:
|
||||
g.add_node(n, community_id=None, embedding=[0.0] * 384)
|
||||
g.add_edge(nodes[0], nodes[1])
|
||||
rc = rich_club_nodes(g, percent=0.10)
|
||||
assert len(rc) >= 1
|
||||
|
||||
|
||||
def test_rich_club_empty_graph_returns_empty() -> None:
|
||||
g = MemoryGraph()
|
||||
assert rich_club_nodes(g) == []
|
||||
|
||||
|
||||
def test_rich_club_picks_highest_centrality_first() -> None:
|
||||
"""Star graph's hub must be the first element of rich_club_nodes."""
|
||||
g = MemoryGraph()
|
||||
hub = uuid4()
|
||||
leaves = [uuid4() for _ in range(9)]
|
||||
g.add_node(hub, community_id=None, embedding=[0.0] * 384)
|
||||
for leaf in leaves:
|
||||
g.add_node(leaf, community_id=None, embedding=[0.0] * 384)
|
||||
g.add_edge(hub, leaf)
|
||||
rc = rich_club_nodes(g, percent=0.10)
|
||||
# 10 nodes -> 1 node selected -> must be the hub.
|
||||
assert len(rc) == 1
|
||||
assert rc[0] == hub
|
||||
|
||||
|
||||
def test_rich_club_custom_percent() -> None:
|
||||
"""50% on 10 nodes -> 5 nodes returned."""
|
||||
g = MemoryGraph()
|
||||
nodes = [uuid4() for _ in range(10)]
|
||||
for n in nodes:
|
||||
g.add_node(n, community_id=None, embedding=[0.0] * 384)
|
||||
for i in range(9):
|
||||
g.add_edge(nodes[i], nodes[i + 1])
|
||||
rc = rich_club_nodes(g, percent=0.5)
|
||||
assert len(rc) == 5
|
||||
Loading…
Add table
Add a link
Reference in a new issue