From e3db01cd487c5b666366885367c8bfff4a6a09da Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Tue, 30 Jun 2026 23:55:29 +0900 Subject: 検索インデックスのhash table化 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/mcp_protocol_test.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests/mcp_protocol_test.py') diff --git a/tests/mcp_protocol_test.py b/tests/mcp_protocol_test.py index 118043f..f739168 100644 --- a/tests/mcp_protocol_test.py +++ b/tests/mcp_protocol_test.py @@ -81,6 +81,15 @@ def tool_payload(response: Mapping[str, Any], expect_error: bool = False) -> dic return json.loads(result["content"][0]["text"]) +def assert_stable_recency_order(messages: list[dict[str, Any]]) -> None: + for left, right in zip(messages, messages[1:]): + left_time = int(left["timestamp"]) + right_time = int(right["timestamp"]) + assert left_time > right_time or ( + left_time == right_time and left["message_id"] <= right["message_id"] + ), (left, right) + + def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--server", type=Path, required=True) @@ -156,6 +165,22 @@ def main() -> None: next_id += 1 assert len(history) == 20 + ranked = tool_payload( + tool_call( + server, + next_id, + "search_messages", + {"query": "needle target", "limit": 100}, + ) + )["results"] + next_id += 1 + assert len(ranked) == 30 + assert all(item["session_id"] == "target" for item in ranked[:20]) + assert all(item["session_id"] == "other" for item in ranked[20:]) + assert_stable_recency_order(ranked[:20]) + assert_stable_recency_order(ranked[20:]) + ranked_ids_before = [item["message_id"] for item in ranked] + for index in range(args.iterations): arguments: dict[str, Any] = {"query": "needle"} if index % 2: @@ -192,6 +217,18 @@ def main() -> None: next_id += 1 tool_payload(tool_call(server, next_id, "rebuild_index", {})) next_id += 1 + ranked_after_rebuild = tool_payload( + tool_call( + server, + next_id, + "search_messages", + {"query": "needle target", "limit": 100}, + ) + )["results"] + next_id += 1 + assert [item["message_id"] for item in ranked_after_rebuild] == [ + message_id for message_id in ranked_ids_before if message_id != message_ids[0] + ] assert tool_payload(tool_call(server, next_id, "get_system_health", {}))["status"] == "OK" next_id += 1 -- cgit v1.2.3