Skip to content

Commit 53ed8eb

Browse files
V0.13.0 tests fix (#37)
* fix some syntax errors in comprehensive tests * fix rest of comprehensive tests * fix api contract tests --------- Co-authored-by: Kevin Kopczynski <kkopczynski@cyborg.co>
1 parent 64aceca commit 53ed8eb

File tree

2 files changed

+43
-27
lines changed

2 files changed

+43
-27
lines changed

tests/comprehensive_test.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def test_ivf_index_creation_and_operations(self):
172172
results = self.index.query(query_vectors=[query_vector], top_k=5)
173173

174174
self.assertGreater(len(results[0]), 0)
175-
self.assertTrue("id" in results[0][0])
175+
self.assertTrue("id" in results[0])
176176

177177
def test_ivfpq_index_creation_and_operations(self):
178178
"""Test IVFPQ index creation with PQ parameters"""
@@ -205,8 +205,10 @@ def test_ivfpq_index_creation_and_operations(self):
205205
query_vector = self.test_vectors[0]
206206
results = self.index.query(query_vectors=[query_vector], top_k=5)
207207

208+
209+
208210
self.assertGreater(len(results[0]), 0)
209-
self.assertTrue("id" in results[0][0])
211+
self.assertTrue("id" in results[0])
210212

211213
def test_ivfpq_parameter_validation(self):
212214
"""Test IVFPQ parameter validation"""
@@ -360,10 +362,10 @@ def tearDown(self):
360362
def test_empty_query_results(self):
361363
"""Test handling of empty query results"""
362364
query_vector = np.random.rand(128).astype(np.float32)
363-
results = self.index.query(query_vectors=[query_vector], top_k=10)
365+
results = self.index.query(query_vectors=query_vector, top_k=10)
364366

365367
# Should return empty results for empty index
366-
self.assertEqual(len(results[0]), 0)
368+
self.assertEqual(len(results), 0)
367369

368370
def test_mismatched_parameter_lengths(self):
369371
"""Test validation of mismatched parameter lengths"""
@@ -391,9 +393,8 @@ def test_mismatched_parameter_lengths(self):
391393
self.index.upsert(items_missing_vector)
392394

393395
# Test with empty items list
394-
result = self.index.upsert([])
395-
# Empty upsert should succeed but insert nothing
396-
self.assertIsNotNone(result)
396+
with self.assertRaises(Exception):
397+
result = self.index.upsert([])
397398

398399
def test_content_preservation_through_operations(self):
399400
"""Test that content is preserved through various operations"""
@@ -469,6 +470,26 @@ async def concurrent_upsert():
469470
class TestBackendCompatibility(unittest.TestCase):
470471
"""Test backend compatibility (Lite vs Full)"""
471472

473+
def setUp(self):
474+
self.client = create_client()
475+
self.index_name = generate_unique_name()
476+
self.index_key = self.client.generate_key()
477+
self.index_config = cyborgdb.IndexIVFFlat(dimension=128)
478+
self.index = self.client.create_index(
479+
self.index_name,
480+
self.index_key,
481+
self.index_config,
482+
metric="euclidean",
483+
)
484+
485+
def tearDown(self):
486+
"""Clean up created indexes"""
487+
try:
488+
if self.index:
489+
self.index.delete_index()
490+
except Exception:
491+
pass
492+
472493
def test_lite_backend_compatibility(self):
473494
"""Test operations with lite backend"""
474495
client = create_client()

tests/test_api_contract.py

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -703,19 +703,17 @@ def test_15_encrypted_index_query(self):
703703
query_vector = self.test_vectors[0]
704704

705705
# Test query with default include (should be ["distance", "metadata"])
706+
# Single query now returns results directly (not wrapped in a list)
706707
results = self.index.query(query_vectors=[query_vector])
707708

708709
self.assertIsInstance(results, list)
709-
self.assertEqual(len(results), 1, "Should have 1 result for 1 query")
710-
711-
query_results = results[0]
712-
self.assertIsInstance(query_results, list)
710+
# Single query returns flat list of results
713711
self.assertGreater(
714-
len(query_results), 0, "Query should return at least one result"
712+
len(results), 0, "Query should return at least one result"
715713
)
716714

717715
# Check exact structure with default include - id is always included, plus distance and metadata by default
718-
for result in query_results:
716+
for result in results:
719717
self.assertIsInstance(result, dict)
720718
validate_exact_keys(
721719
result,
@@ -755,7 +753,7 @@ def test_15_encrypted_index_query(self):
755753
query_vectors=[query_vector], top_k=5, include=["metadata"]
756754
)
757755

758-
for result in results[0]:
756+
for result in results:
759757
validate_exact_keys(
760758
result,
761759
{"id", "distance", "metadata"},
@@ -775,7 +773,7 @@ def test_15_encrypted_index_query(self):
775773
# Test with empty include (should only have id and distance)
776774
results = self.index.query(query_vectors=[query_vector], include=["distance"])
777775

778-
for result in results[0]:
776+
for result in results:
779777
validate_exact_keys(
780778
result, {"id", "distance"}, "query() result with include=[]"
781779
)
@@ -786,7 +784,7 @@ def test_15_encrypted_index_query(self):
786784
)
787785

788786
# Results should have id, distance, and metadata (default include)
789-
for result in results[0]:
787+
for result in results:
790788
validate_exact_keys(
791789
result,
792790
{"id", "distance", "metadata"},
@@ -817,20 +815,17 @@ def test_16_encrypted_index_query_patterns(self):
817815
self.assertIn("id", results[0])
818816
self.assertIn("distance", results[0])
819817

820-
# Test Pattern 2: Single vector in nested list -> nested list return
818+
# Test Pattern 2: Single vector in nested list -> flat list return (API update)
821819
single_vector_nested = [self.test_vectors[1].tolist()]
822820
results = self.index.query(query_vectors=single_vector_nested, top_k=3)
823821

824-
# Should return list of lists (batch format)
822+
# Single query now returns flat list of results directly
825823
self.assertIsInstance(results, list)
826-
self.assertEqual(len(results), 1, "Should have 1 result list for 1 query")
827-
self.assertIsInstance(
828-
results[0], list, "Batch query should return nested lists"
829-
)
830-
if len(results[0]) > 0:
831-
self.assertIsInstance(results[0][0], dict, "Each result should be a dict")
832-
self.assertIn("id", results[0][0])
833-
self.assertIn("distance", results[0][0])
824+
self.assertGreater(len(results), 0, "Should have results for single query")
825+
if len(results) > 0:
826+
self.assertIsInstance(results[0], dict, "Single query should return flat list of dicts")
827+
self.assertIn("id", results[0])
828+
self.assertIn("distance", results[0])
834829

835830
# Test Pattern 3: Multiple vectors -> multiple result lists
836831
multiple_vectors = [
@@ -903,7 +898,7 @@ def test_16_encrypted_index_query_patterns(self):
903898
)
904899

905900
# Test Pattern 6: Text-based query with query_contents
906-
# Single text query
901+
# Single text query (returns flat list directly)
907902
text_query = "test content for similarity search"
908903
results = self.index.query(query_contents=text_query, top_k=3)
909904

0 commit comments

Comments
 (0)