From 94a684c9e9d83602bd8b5ee2fa0842ada5c5b736 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Thu, 10 Aug 2023 20:52:58 -0700 Subject: [PATCH] Added test for duplicates --- test/t/015_hnsw_duplicates.pl | 45 +++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/t/015_hnsw_duplicates.pl diff --git a/test/t/015_hnsw_duplicates.pl b/test/t/015_hnsw_duplicates.pl new file mode 100644 index 0000000..5a2b9d1 --- /dev/null +++ b/test/t/015_hnsw_duplicates.pl @@ -0,0 +1,45 @@ +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More; + +# Initialize node +my $node = get_new_node('node'); +$node->init; +$node->start; + +# Create table +$node->safe_psql("postgres", "CREATE EXTENSION vector;"); +$node->safe_psql("postgres", "CREATE TABLE tst (v vector(3));"); + +sub insert_vectors +{ + for my $i (1 .. 20) { + $node->safe_psql("postgres", "INSERT INTO tst VALUES ('[1,1,1]')"); + } +} + +sub test_duplicates +{ + my $res = $node->safe_psql("postgres", qq( + SET enable_seqscan = off; + SET hnsw.ef_search = 1; + SELECT COUNT(*) FROM (SELECT * FROM tst ORDER BY v <-> '[1,1,1]') t; + )); + is($res, 10); +} + +# Test duplicates with build +insert_vectors(); +$node->safe_psql("postgres", "CREATE INDEX idx ON tst USING hnsw (v vector_l2_ops);"); +test_duplicates(); + +# Reset +$node->safe_psql("postgres", "TRUNCATE tst;"); + +# Test duplicates with inserts +insert_vectors(); +test_duplicates(); + +done_testing();