Test: projection regression test fixed.
This commit is contained in:
@@ -4,7 +4,7 @@ import redis.exceptions
|
||||
|
||||
class DimensionValidation(TestCase):
|
||||
def getname(self):
|
||||
return "Dimension Validation with Projection"
|
||||
return "[regression] Dimension Validation with Projection"
|
||||
|
||||
def estimated_runtime(self):
|
||||
return 0.5
|
||||
@@ -13,57 +13,55 @@ class DimensionValidation(TestCase):
|
||||
# Test scenario 1: Create a set with projection
|
||||
original_dim = 100
|
||||
reduced_dim = 50
|
||||
|
||||
|
||||
# Create the initial vector and set with projection
|
||||
vec1 = generate_random_vector(original_dim)
|
||||
vec1_bytes = struct.pack(f'{original_dim}f', *vec1)
|
||||
|
||||
|
||||
# Add first vector with projection
|
||||
result = self.redis.execute_command('VADD', self.test_key,
|
||||
result = self.redis.execute_command('VADD', self.test_key,
|
||||
'REDUCE', reduced_dim,
|
||||
'FP32', vec1_bytes, f'{self.test_key}:item:1')
|
||||
assert result == 1, "First VADD with REDUCE should return 1"
|
||||
|
||||
|
||||
# Check VINFO returns the correct projection information
|
||||
info = self.redis.execute_command('VINFO', self.test_key)
|
||||
assert isinstance(info, dict), "VINFO should return a dictionary"
|
||||
assert 'vector-dim' in info, "VINFO should contain vector-dim"
|
||||
assert info['vector-dim'] == reduced_dim, f"Expected reduced dimension {reduced_dim}, got {info['vector-dim']}"
|
||||
assert 'proj-input-dim' in info, "VINFO should contain proj-input-dim"
|
||||
assert info['proj-input-dim'] == original_dim, f"Expected original dimension {original_dim}, got {info['proj-input-dim']}"
|
||||
assert 'proj-enabled' in info, "VINFO should contain proj-enabled"
|
||||
assert info['proj-enabled'] is True, "Projection should be enabled"
|
||||
|
||||
info_map = {k.decode('utf-8'): v for k, v in zip(info[::2], info[1::2])}
|
||||
assert 'vector-dim' in info_map, "VINFO should contain vector-dim"
|
||||
assert info_map['vector-dim'] == reduced_dim, f"Expected reduced dimension {reduced_dim}, got {info['vector-dim']}"
|
||||
assert 'projection-input-dim' in info_map, "VINFO should contain projection-input-dim"
|
||||
assert info_map['projection-input-dim'] == original_dim, f"Expected original dimension {original_dim}, got {info['projection-input-dim']}"
|
||||
|
||||
# Test scenario 2: Try adding a mismatched vector - should fail
|
||||
wrong_dim = 80
|
||||
wrong_vec = generate_random_vector(wrong_dim)
|
||||
wrong_vec_bytes = struct.pack(f'{wrong_dim}f', *wrong_vec)
|
||||
|
||||
|
||||
# This should fail with dimension mismatch error
|
||||
try:
|
||||
self.redis.execute_command('VADD', self.test_key,
|
||||
'REDUCE', reduced_dim,
|
||||
self.redis.execute_command('VADD', self.test_key,
|
||||
'REDUCE', reduced_dim,
|
||||
'FP32', wrong_vec_bytes, f'{self.test_key}:item:2')
|
||||
assert False, "VADD with wrong dimension should fail"
|
||||
except redis.exceptions.ResponseError as e:
|
||||
assert "Input dimension mismatch for projection" in str(e), f"Expected dimension mismatch error, got: {e}"
|
||||
|
||||
|
||||
# Test scenario 3: Add a correctly-sized vector
|
||||
vec2 = generate_random_vector(original_dim)
|
||||
vec2_bytes = struct.pack(f'{original_dim}f', *vec2)
|
||||
|
||||
|
||||
# This should succeed
|
||||
result = self.redis.execute_command('VADD', self.test_key,
|
||||
result = self.redis.execute_command('VADD', self.test_key,
|
||||
'REDUCE', reduced_dim,
|
||||
'FP32', vec2_bytes, f'{self.test_key}:item:3')
|
||||
assert result == 1, "VADD with correct dimensions should succeed"
|
||||
|
||||
|
||||
# Check VSIM also validates input dimensions
|
||||
wrong_query = generate_random_vector(wrong_dim)
|
||||
try:
|
||||
self.redis.execute_command('VSIM', self.test_key,
|
||||
'VALUES', wrong_dim, *[str(x) for x in wrong_query],
|
||||
self.redis.execute_command('VSIM', self.test_key,
|
||||
'VALUES', wrong_dim, *[str(x) for x in wrong_query],
|
||||
'COUNT', 10)
|
||||
assert False, "VSIM with wrong dimension should fail"
|
||||
except redis.exceptions.ResponseError as e:
|
||||
assert "Input dimension mismatch for projection" in str(e), f"Expected dimension mismatch error in VSIM, got: {e}"
|
||||
assert "Input dimension mismatch for projection" in str(e), f"Expected dimension mismatch error in VSIM, got: {e}"
|
||||
|
||||
Reference in New Issue
Block a user