import numpy as np import pytest from common.vector_index import create_index, save_index, load_index, add_vector, search def test_add_vector_returns_sequential_ids(): index = create_index(dim=4) v1 = np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32) v2 = np.array([0.0, 1.0, 0.0, 0.0], dtype=np.float32) assert add_vector(index, v1) == 0 assert add_vector(index, v2) == 1 assert index.ntotal == 2 def test_search_returns_closest_vector_first(): index = create_index(dim=4) add_vector(index, np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32)) add_vector(index, np.array([0.0, 1.0, 0.0, 0.0], dtype=np.float32)) query = np.array([0.9, 0.1, 0.0, 0.0], dtype=np.float32) results = search(index, query, k=2) assert results[0][0] == 0 assert results[0][1] > results[1][1] def test_save_and_load_roundtrip(tmp_path): index = create_index(dim=4) add_vector(index, np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32)) path = str(tmp_path / "index.faiss") save_index(index, path) loaded = load_index(path) assert loaded.ntotal == 1 assert loaded.d == 4 def test_load_missing_index_raises(): with pytest.raises(FileNotFoundError): load_index("/nonexistent/path/index.faiss")