summaryrefslogtreecommitdiff
path: root/examples/redis-unstable/modules/vector-sets/tests/vemb.py
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-01-21 22:40:55 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-01-21 22:40:55 +0100
commit5d8dfe892a2ea89f706ee140c3bdcfd89fe03fda (patch)
tree1acdfa5220cd13b7be43a2a01368e80d306473ca /examples/redis-unstable/modules/vector-sets/tests/vemb.py
parentc7ab12bba64d9c20ccd79b132dac475f7bc3923e (diff)
downloadcrep-5d8dfe892a2ea89f706ee140c3bdcfd89fe03fda.tar.gz
Add Redis source code for testing
Diffstat (limited to 'examples/redis-unstable/modules/vector-sets/tests/vemb.py')
-rw-r--r--examples/redis-unstable/modules/vector-sets/tests/vemb.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/examples/redis-unstable/modules/vector-sets/tests/vemb.py b/examples/redis-unstable/modules/vector-sets/tests/vemb.py
new file mode 100644
index 0000000..0f4cf77
--- /dev/null
+++ b/examples/redis-unstable/modules/vector-sets/tests/vemb.py
@@ -0,0 +1,41 @@
+from test import TestCase
+import struct
+import math
+
+class VEMB(TestCase):
+ def getname(self):
+ return "VEMB Command"
+
+ def test(self):
+ dim = 4
+
+ # Add same vector in both formats
+ vec = [1, 0, 0, 0]
+ norm = math.sqrt(sum(x*x for x in vec))
+ vec = [x/norm for x in vec] # Normalize the vector
+
+ # Add using FP32
+ vec_bytes = struct.pack(f'{dim}f', *vec)
+ self.redis.execute_command('VADD', self.test_key, 'FP32', vec_bytes, f'{self.test_key}:item:1')
+
+ # Add using VALUES
+ self.redis.execute_command('VADD', self.test_key, 'VALUES', dim,
+ *[str(x) for x in vec], f'{self.test_key}:item:2')
+
+ # Get both back with VEMB
+ result1 = self.redis.execute_command('VEMB', self.test_key, f'{self.test_key}:item:1')
+ result2 = self.redis.execute_command('VEMB', self.test_key, f'{self.test_key}:item:2')
+
+ retrieved_vec1 = [float(x) for x in result1]
+ retrieved_vec2 = [float(x) for x in result2]
+
+ # Compare both vectors with original (allow for small quantization errors)
+ for i in range(dim):
+ assert abs(vec[i] - retrieved_vec1[i]) < 0.01, \
+ f"FP32 vector component {i} mismatch: expected {vec[i]}, got {retrieved_vec1[i]}"
+ assert abs(vec[i] - retrieved_vec2[i]) < 0.01, \
+ f"VALUES vector component {i} mismatch: expected {vec[i]}, got {retrieved_vec2[i]}"
+
+ # Test non-existent item
+ result = self.redis.execute_command('VEMB', self.test_key, 'nonexistent')
+ assert result is None, "Non-existent item should return nil"