From 80d34830f6ebc83bb94b6d5637f8a2661f0dd6a3 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Thu, 25 Apr 2024 15:35:36 -0700 Subject: [PATCH] Condensed regression tests [skip ci] --- test/expected/{bit_functions.out => bit.out} | 0 test/expected/btree_halfvec.out | 20 - test/expected/btree_sparsevec.out | 20 - test/expected/btree_vector.out | 20 - .../{halfvec_functions.out => halfvec.out} | 164 ++++++ test/expected/halfvec_input.out | 164 ------ test/expected/hnsw_halfvec_cosine.out | 26 - test/expected/hnsw_halfvec_ip.out | 21 - test/expected/hnsw_halfvec_l1.out | 21 - test/expected/hnsw_halfvec_l2.out | 33 -- test/expected/hnsw_options.out | 26 - test/expected/hnsw_sparsevec_cosine.out | 26 - test/expected/hnsw_sparsevec_ip.out | 21 - test/expected/hnsw_sparsevec_l1.out | 21 - test/expected/hnsw_sparsevec_l2.out | 43 -- test/expected/hnsw_unlogged.out | 13 - test/expected/hnsw_vector_cosine.out | 26 - test/expected/hnsw_vector_ip.out | 21 - test/expected/hnsw_vector_l1.out | 21 - test/expected/hnsw_vector_l2.out | 33 -- test/expected/ivfflat_bit_hamming.out | 36 -- test/expected/ivfflat_halfvec_cosine.out | 26 - test/expected/ivfflat_halfvec_ip.out | 21 - test/expected/ivfflat_halfvec_l2.out | 36 -- test/expected/ivfflat_options.out | 14 - test/expected/ivfflat_unlogged.out | 13 - test/expected/ivfflat_vector_cosine.out | 26 - test/expected/ivfflat_vector_ip.out | 21 - test/expected/ivfflat_vector_l2.out | 36 -- .../{sparsevec_input.out => sparsevec.out} | 396 ++++++++++++++ test/expected/sparsevec_functions.out | 396 -------------- test/expected/vector.out | 3 + test/expected/vector_functions.out | 496 ------------------ test/expected/vector_input.out | 176 ------- test/sql/{bit_functions.sql => bit.sql} | 0 .../{halfvec_functions.sql => halfvec.sql} | 39 ++ test/sql/halfvec_input.sql | 38 -- ...{sparsevec_functions.sql => sparsevec.sql} | 59 +++ test/sql/sparsevec_input.sql | 58 -- test/sql/{vector_functions.sql => vector.sql} | 42 ++ test/sql/vector_input.sql | 40 -- 41 files changed, 703 insertions(+), 2009 deletions(-) rename test/expected/{bit_functions.out => bit.out} (100%) delete mode 100644 test/expected/btree_halfvec.out delete mode 100644 test/expected/btree_sparsevec.out delete mode 100644 test/expected/btree_vector.out rename test/expected/{halfvec_functions.out => halfvec.out} (67%) delete mode 100644 test/expected/halfvec_input.out delete mode 100644 test/expected/hnsw_halfvec_cosine.out delete mode 100644 test/expected/hnsw_halfvec_ip.out delete mode 100644 test/expected/hnsw_halfvec_l1.out delete mode 100644 test/expected/hnsw_halfvec_l2.out delete mode 100644 test/expected/hnsw_options.out delete mode 100644 test/expected/hnsw_sparsevec_cosine.out delete mode 100644 test/expected/hnsw_sparsevec_ip.out delete mode 100644 test/expected/hnsw_sparsevec_l1.out delete mode 100644 test/expected/hnsw_sparsevec_l2.out delete mode 100644 test/expected/hnsw_unlogged.out delete mode 100644 test/expected/hnsw_vector_cosine.out delete mode 100644 test/expected/hnsw_vector_ip.out delete mode 100644 test/expected/hnsw_vector_l1.out delete mode 100644 test/expected/hnsw_vector_l2.out delete mode 100644 test/expected/ivfflat_bit_hamming.out delete mode 100644 test/expected/ivfflat_halfvec_cosine.out delete mode 100644 test/expected/ivfflat_halfvec_ip.out delete mode 100644 test/expected/ivfflat_halfvec_l2.out delete mode 100644 test/expected/ivfflat_options.out delete mode 100644 test/expected/ivfflat_unlogged.out delete mode 100644 test/expected/ivfflat_vector_cosine.out delete mode 100644 test/expected/ivfflat_vector_ip.out delete mode 100644 test/expected/ivfflat_vector_l2.out rename test/expected/{sparsevec_input.out => sparsevec.out} (51%) delete mode 100644 test/expected/sparsevec_functions.out create mode 100644 test/expected/vector.out delete mode 100644 test/expected/vector_functions.out delete mode 100644 test/expected/vector_input.out rename test/sql/{bit_functions.sql => bit.sql} (100%) rename test/sql/{halfvec_functions.sql => halfvec.sql} (81%) delete mode 100644 test/sql/halfvec_input.sql rename test/sql/{sparsevec_functions.sql => sparsevec.sql} (66%) delete mode 100644 test/sql/sparsevec_input.sql rename test/sql/{vector_functions.sql => vector.sql} (80%) delete mode 100644 test/sql/vector_input.sql diff --git a/test/expected/bit_functions.out b/test/expected/bit.out similarity index 100% rename from test/expected/bit_functions.out rename to test/expected/bit.out diff --git a/test/expected/btree_halfvec.out b/test/expected/btree_halfvec.out deleted file mode 100644 index e4575de..0000000 --- a/test/expected/btree_halfvec.out +++ /dev/null @@ -1,20 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t (val); -SELECT * FROM t WHERE val = '[1,2,3]'; - val ---------- - [1,2,3] -(1 row) - -SELECT * FROM t ORDER BY val; - val ---------- - [0,0,0] - [1,1,1] - [1,2,3] - -(4 rows) - -DROP TABLE t; diff --git a/test/expected/btree_sparsevec.out b/test/expected/btree_sparsevec.out deleted file mode 100644 index 5d95952..0000000 --- a/test/expected/btree_sparsevec.out +++ /dev/null @@ -1,20 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val sparsevec(3)); -INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL); -CREATE INDEX ON t (val); -SELECT * FROM t WHERE val = '{1:1,2:2,3:3}/3'; - val ------------------ - {1:1,2:2,3:3}/3 -(1 row) - -SELECT * FROM t ORDER BY val; - val ------------------ - {}/3 - {1:1,2:1,3:1}/3 - {1:1,2:2,3:3}/3 - -(4 rows) - -DROP TABLE t; diff --git a/test/expected/btree_vector.out b/test/expected/btree_vector.out deleted file mode 100644 index a43d0d2..0000000 --- a/test/expected/btree_vector.out +++ /dev/null @@ -1,20 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t (val); -SELECT * FROM t WHERE val = '[1,2,3]'; - val ---------- - [1,2,3] -(1 row) - -SELECT * FROM t ORDER BY val; - val ---------- - [0,0,0] - [1,1,1] - [1,2,3] - -(4 rows) - -DROP TABLE t; diff --git a/test/expected/halfvec_functions.out b/test/expected/halfvec.out similarity index 67% rename from test/expected/halfvec_functions.out rename to test/expected/halfvec.out index e7e3d76..a3ce893 100644 --- a/test/expected/halfvec_functions.out +++ b/test/expected/halfvec.out @@ -1,3 +1,167 @@ +SELECT '[1,2,3]'::halfvec; + halfvec +--------- + [1,2,3] +(1 row) + +SELECT '[-1,-2,-3]'::halfvec; + halfvec +------------ + [-1,-2,-3] +(1 row) + +SELECT '[1.,2.,3.]'::halfvec; + halfvec +--------- + [1,2,3] +(1 row) + +SELECT ' [ 1, 2 , 3 ] '::halfvec; + halfvec +--------- + [1,2,3] +(1 row) + +SELECT '[1.23456]'::halfvec; + halfvec +------------ + [1.234375] +(1 row) + +SELECT '[hello,1]'::halfvec; +ERROR: invalid input syntax for type halfvec: "[hello,1]" +LINE 1: SELECT '[hello,1]'::halfvec; + ^ +SELECT '[NaN,1]'::halfvec; +ERROR: NaN not allowed in halfvec +LINE 1: SELECT '[NaN,1]'::halfvec; + ^ +SELECT '[Infinity,1]'::halfvec; +ERROR: infinite value not allowed in halfvec +LINE 1: SELECT '[Infinity,1]'::halfvec; + ^ +SELECT '[-Infinity,1]'::halfvec; +ERROR: infinite value not allowed in halfvec +LINE 1: SELECT '[-Infinity,1]'::halfvec; + ^ +SELECT '[65519,-65519]'::halfvec; + halfvec +---------------- + [65504,-65504] +(1 row) + +SELECT '[65520,-65520]'::halfvec; +ERROR: "65520" is out of range for type halfvec +LINE 1: SELECT '[65520,-65520]'::halfvec; + ^ +SELECT '[1e-8,-1e-8]'::halfvec; + halfvec +--------- + [0,-0] +(1 row) + +SELECT '[4e38,1]'::halfvec; +ERROR: "4e38" is out of range for type halfvec +LINE 1: SELECT '[4e38,1]'::halfvec; + ^ +SELECT '[1e-46,1]'::halfvec; + halfvec +--------- + [0,1] +(1 row) + +SELECT '[1,2,3'::halfvec; +ERROR: invalid input syntax for type halfvec: "[1,2,3" +LINE 1: SELECT '[1,2,3'::halfvec; + ^ +SELECT '[1,2,3]9'::halfvec; +ERROR: invalid input syntax for type halfvec: "[1,2,3]9" +LINE 1: SELECT '[1,2,3]9'::halfvec; + ^ +DETAIL: Junk after closing right brace. +SELECT '1,2,3'::halfvec; +ERROR: invalid input syntax for type halfvec: "1,2,3" +LINE 1: SELECT '1,2,3'::halfvec; + ^ +DETAIL: Vector contents must start with "[". +SELECT ''::halfvec; +ERROR: invalid input syntax for type halfvec: "" +LINE 1: SELECT ''::halfvec; + ^ +DETAIL: Vector contents must start with "[". +SELECT '['::halfvec; +ERROR: invalid input syntax for type halfvec: "[" +LINE 1: SELECT '['::halfvec; + ^ +SELECT '[ '::halfvec; +ERROR: invalid input syntax for type halfvec: "[ " +LINE 1: SELECT '[ '::halfvec; + ^ +SELECT '[,'::halfvec; +ERROR: invalid input syntax for type halfvec: "[," +LINE 1: SELECT '[,'::halfvec; + ^ +SELECT '[]'::halfvec; +ERROR: halfvec must have at least 1 dimension +LINE 1: SELECT '[]'::halfvec; + ^ +SELECT '[ ]'::halfvec; +ERROR: halfvec must have at least 1 dimension +LINE 1: SELECT '[ ]'::halfvec; + ^ +SELECT '[,]'::halfvec; +ERROR: invalid input syntax for type halfvec: "[,]" +LINE 1: SELECT '[,]'::halfvec; + ^ +SELECT '[1,]'::halfvec; +ERROR: invalid input syntax for type halfvec: "[1,]" +LINE 1: SELECT '[1,]'::halfvec; + ^ +SELECT '[1a]'::halfvec; +ERROR: invalid input syntax for type halfvec: "[1a]" +LINE 1: SELECT '[1a]'::halfvec; + ^ +SELECT '[1,,3]'::halfvec; +ERROR: invalid input syntax for type halfvec: "[1,,3]" +LINE 1: SELECT '[1,,3]'::halfvec; + ^ +SELECT '[1, ,3]'::halfvec; +ERROR: invalid input syntax for type halfvec: "[1, ,3]" +LINE 1: SELECT '[1, ,3]'::halfvec; + ^ +SELECT '[1,2,3]'::halfvec(3); + halfvec +--------- + [1,2,3] +(1 row) + +SELECT '[1,2,3]'::halfvec(2); +ERROR: expected 2 dimensions, not 3 +SELECT '[1,2,3]'::halfvec(3, 2); +ERROR: invalid type modifier +LINE 1: SELECT '[1,2,3]'::halfvec(3, 2); + ^ +SELECT '[1,2,3]'::halfvec('a'); +ERROR: invalid input syntax for type integer: "a" +LINE 1: SELECT '[1,2,3]'::halfvec('a'); + ^ +SELECT '[1,2,3]'::halfvec(0); +ERROR: dimensions for type halfvec must be at least 1 +LINE 1: SELECT '[1,2,3]'::halfvec(0); + ^ +SELECT '[1,2,3]'::halfvec(16001); +ERROR: dimensions for type halfvec cannot exceed 16000 +LINE 1: SELECT '[1,2,3]'::halfvec(16001); + ^ +SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::halfvec[]); + unnest +--------- + [1,2,3] + [4,5,6] +(2 rows) + +SELECT '{"[1,2,3]"}'::halfvec(2)[]; +ERROR: expected 2 dimensions, not 3 SELECT '[1,2,3]'::halfvec + '[4,5,6]'; ?column? ---------- diff --git a/test/expected/halfvec_input.out b/test/expected/halfvec_input.out deleted file mode 100644 index 67c50ae..0000000 --- a/test/expected/halfvec_input.out +++ /dev/null @@ -1,164 +0,0 @@ -SELECT '[1,2,3]'::halfvec; - halfvec ---------- - [1,2,3] -(1 row) - -SELECT '[-1,-2,-3]'::halfvec; - halfvec ------------- - [-1,-2,-3] -(1 row) - -SELECT '[1.,2.,3.]'::halfvec; - halfvec ---------- - [1,2,3] -(1 row) - -SELECT ' [ 1, 2 , 3 ] '::halfvec; - halfvec ---------- - [1,2,3] -(1 row) - -SELECT '[1.23456]'::halfvec; - halfvec ------------- - [1.234375] -(1 row) - -SELECT '[hello,1]'::halfvec; -ERROR: invalid input syntax for type halfvec: "[hello,1]" -LINE 1: SELECT '[hello,1]'::halfvec; - ^ -SELECT '[NaN,1]'::halfvec; -ERROR: NaN not allowed in halfvec -LINE 1: SELECT '[NaN,1]'::halfvec; - ^ -SELECT '[Infinity,1]'::halfvec; -ERROR: infinite value not allowed in halfvec -LINE 1: SELECT '[Infinity,1]'::halfvec; - ^ -SELECT '[-Infinity,1]'::halfvec; -ERROR: infinite value not allowed in halfvec -LINE 1: SELECT '[-Infinity,1]'::halfvec; - ^ -SELECT '[65519,-65519]'::halfvec; - halfvec ----------------- - [65504,-65504] -(1 row) - -SELECT '[65520,-65520]'::halfvec; -ERROR: "65520" is out of range for type halfvec -LINE 1: SELECT '[65520,-65520]'::halfvec; - ^ -SELECT '[1e-8,-1e-8]'::halfvec; - halfvec ---------- - [0,-0] -(1 row) - -SELECT '[4e38,1]'::halfvec; -ERROR: "4e38" is out of range for type halfvec -LINE 1: SELECT '[4e38,1]'::halfvec; - ^ -SELECT '[1e-46,1]'::halfvec; - halfvec ---------- - [0,1] -(1 row) - -SELECT '[1,2,3'::halfvec; -ERROR: invalid input syntax for type halfvec: "[1,2,3" -LINE 1: SELECT '[1,2,3'::halfvec; - ^ -SELECT '[1,2,3]9'::halfvec; -ERROR: invalid input syntax for type halfvec: "[1,2,3]9" -LINE 1: SELECT '[1,2,3]9'::halfvec; - ^ -DETAIL: Junk after closing right brace. -SELECT '1,2,3'::halfvec; -ERROR: invalid input syntax for type halfvec: "1,2,3" -LINE 1: SELECT '1,2,3'::halfvec; - ^ -DETAIL: Vector contents must start with "[". -SELECT ''::halfvec; -ERROR: invalid input syntax for type halfvec: "" -LINE 1: SELECT ''::halfvec; - ^ -DETAIL: Vector contents must start with "[". -SELECT '['::halfvec; -ERROR: invalid input syntax for type halfvec: "[" -LINE 1: SELECT '['::halfvec; - ^ -SELECT '[ '::halfvec; -ERROR: invalid input syntax for type halfvec: "[ " -LINE 1: SELECT '[ '::halfvec; - ^ -SELECT '[,'::halfvec; -ERROR: invalid input syntax for type halfvec: "[," -LINE 1: SELECT '[,'::halfvec; - ^ -SELECT '[]'::halfvec; -ERROR: halfvec must have at least 1 dimension -LINE 1: SELECT '[]'::halfvec; - ^ -SELECT '[ ]'::halfvec; -ERROR: halfvec must have at least 1 dimension -LINE 1: SELECT '[ ]'::halfvec; - ^ -SELECT '[,]'::halfvec; -ERROR: invalid input syntax for type halfvec: "[,]" -LINE 1: SELECT '[,]'::halfvec; - ^ -SELECT '[1,]'::halfvec; -ERROR: invalid input syntax for type halfvec: "[1,]" -LINE 1: SELECT '[1,]'::halfvec; - ^ -SELECT '[1a]'::halfvec; -ERROR: invalid input syntax for type halfvec: "[1a]" -LINE 1: SELECT '[1a]'::halfvec; - ^ -SELECT '[1,,3]'::halfvec; -ERROR: invalid input syntax for type halfvec: "[1,,3]" -LINE 1: SELECT '[1,,3]'::halfvec; - ^ -SELECT '[1, ,3]'::halfvec; -ERROR: invalid input syntax for type halfvec: "[1, ,3]" -LINE 1: SELECT '[1, ,3]'::halfvec; - ^ -SELECT '[1,2,3]'::halfvec(3); - halfvec ---------- - [1,2,3] -(1 row) - -SELECT '[1,2,3]'::halfvec(2); -ERROR: expected 2 dimensions, not 3 -SELECT '[1,2,3]'::halfvec(3, 2); -ERROR: invalid type modifier -LINE 1: SELECT '[1,2,3]'::halfvec(3, 2); - ^ -SELECT '[1,2,3]'::halfvec('a'); -ERROR: invalid input syntax for type integer: "a" -LINE 1: SELECT '[1,2,3]'::halfvec('a'); - ^ -SELECT '[1,2,3]'::halfvec(0); -ERROR: dimensions for type halfvec must be at least 1 -LINE 1: SELECT '[1,2,3]'::halfvec(0); - ^ -SELECT '[1,2,3]'::halfvec(16001); -ERROR: dimensions for type halfvec cannot exceed 16000 -LINE 1: SELECT '[1,2,3]'::halfvec(16001); - ^ -SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::halfvec[]); - unnest ---------- - [1,2,3] - [4,5,6] -(2 rows) - -SELECT '{"[1,2,3]"}'::halfvec(2)[]; -ERROR: expected 2 dimensions, not 3 diff --git a/test/expected/hnsw_halfvec_cosine.out b/test/expected/hnsw_halfvec_cosine.out deleted file mode 100644 index 6ccca49..0000000 --- a/test/expected/hnsw_halfvec_cosine.out +++ /dev/null @@ -1,26 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val halfvec_cosine_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <=> '[3,3,3]'; - val ---------- - [1,1,1] - [1,2,3] - [1,2,4] -(3 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> '[0,0,0]') t2; - count -------- - 3 -(1 row) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> (SELECT NULL::halfvec)) t2; - count -------- - 3 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_halfvec_ip.out b/test/expected/hnsw_halfvec_ip.out deleted file mode 100644 index 7c004c9..0000000 --- a/test/expected/hnsw_halfvec_ip.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val halfvec_ip_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <#> '[3,3,3]'; - val ---------- - [1,2,4] - [1,2,3] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <#> (SELECT NULL::halfvec)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_halfvec_l1.out b/test/expected/hnsw_halfvec_l1.out deleted file mode 100644 index 4ecf706..0000000 --- a/test/expected/hnsw_halfvec_l1.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val halfvec_l1_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <+> '[3,3,3]'; - val ---------- - [1,2,3] - [1,2,4] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <+> (SELECT NULL::halfvec)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_halfvec_l2.out b/test/expected/hnsw_halfvec_l2.out deleted file mode 100644 index ecfe77c..0000000 --- a/test/expected/hnsw_halfvec_l2.out +++ /dev/null @@ -1,33 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val halfvec_l2_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ---------- - [1,2,3] - [1,2,4] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <-> (SELECT NULL::halfvec)) t2; - count -------- - 4 -(1 row) - -SELECT COUNT(*) FROM t; - count -------- - 5 -(1 row) - -TRUNCATE t; -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ------ -(0 rows) - -DROP TABLE t; diff --git a/test/expected/hnsw_options.out b/test/expected/hnsw_options.out deleted file mode 100644 index eeba3e5..0000000 --- a/test/expected/hnsw_options.out +++ /dev/null @@ -1,26 +0,0 @@ -CREATE TABLE t (val vector(3)); -CREATE INDEX ON t USING hnsw (val vector_l2_ops) WITH (m = 1); -ERROR: value 1 out of bounds for option "m" -DETAIL: Valid values are between "2" and "100". -CREATE INDEX ON t USING hnsw (val vector_l2_ops) WITH (m = 101); -ERROR: value 101 out of bounds for option "m" -DETAIL: Valid values are between "2" and "100". -CREATE INDEX ON t USING hnsw (val vector_l2_ops) WITH (ef_construction = 3); -ERROR: value 3 out of bounds for option "ef_construction" -DETAIL: Valid values are between "4" and "1000". -CREATE INDEX ON t USING hnsw (val vector_l2_ops) WITH (ef_construction = 1001); -ERROR: value 1001 out of bounds for option "ef_construction" -DETAIL: Valid values are between "4" and "1000". -CREATE INDEX ON t USING hnsw (val vector_l2_ops) WITH (m = 16, ef_construction = 31); -ERROR: ef_construction must be greater than or equal to 2 * m -SHOW hnsw.ef_search; - hnsw.ef_search ----------------- - 40 -(1 row) - -SET hnsw.ef_search = 0; -ERROR: 0 is outside the valid range for parameter "hnsw.ef_search" (1 .. 1000) -SET hnsw.ef_search = 1001; -ERROR: 1001 is outside the valid range for parameter "hnsw.ef_search" (1 .. 1000) -DROP TABLE t; diff --git a/test/expected/hnsw_sparsevec_cosine.out b/test/expected/hnsw_sparsevec_cosine.out deleted file mode 100644 index 8645580..0000000 --- a/test/expected/hnsw_sparsevec_cosine.out +++ /dev/null @@ -1,26 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val sparsevec(3)); -INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL); -CREATE INDEX ON t USING hnsw (val sparsevec_cosine_ops); -INSERT INTO t (val) VALUES ('{1:1,2:2,3:4}/3'); -SELECT * FROM t ORDER BY val <=> '{1:3,2:3,3:3}/3'; - val ------------------ - {1:1,2:1,3:1}/3 - {1:1,2:2,3:3}/3 - {1:1,2:2,3:4}/3 -(3 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> '{}/3') t2; - count -------- - 3 -(1 row) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> (SELECT NULL::sparsevec)) t2; - count -------- - 3 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_sparsevec_ip.out b/test/expected/hnsw_sparsevec_ip.out deleted file mode 100644 index bfc212b..0000000 --- a/test/expected/hnsw_sparsevec_ip.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val sparsevec(3)); -INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL); -CREATE INDEX ON t USING hnsw (val sparsevec_ip_ops); -INSERT INTO t (val) VALUES ('{1:1,2:2,3:4}/3'); -SELECT * FROM t ORDER BY val <#> '{1:3,2:3,3:3}/3'; - val ------------------ - {1:1,2:2,3:4}/3 - {1:1,2:2,3:3}/3 - {1:1,2:1,3:1}/3 - {}/3 -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <#> (SELECT NULL::sparsevec)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_sparsevec_l1.out b/test/expected/hnsw_sparsevec_l1.out deleted file mode 100644 index f854cbb..0000000 --- a/test/expected/hnsw_sparsevec_l1.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val sparsevec(3)); -INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL); -CREATE INDEX ON t USING hnsw (val sparsevec_l1_ops); -INSERT INTO t (val) VALUES ('{1:1,2:2,3:4}/3'); -SELECT * FROM t ORDER BY val <+> '{1:3,2:3,3:3}/3'; - val ------------------ - {1:1,2:2,3:3}/3 - {1:1,2:2,3:4}/3 - {1:1,2:1,3:1}/3 - {}/3 -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <+> (SELECT NULL::sparsevec)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_sparsevec_l2.out b/test/expected/hnsw_sparsevec_l2.out deleted file mode 100644 index f474871..0000000 --- a/test/expected/hnsw_sparsevec_l2.out +++ /dev/null @@ -1,43 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val sparsevec(3)); -INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL); -CREATE INDEX ON t USING hnsw (val sparsevec_l2_ops); -INSERT INTO t (val) VALUES ('{1:1,2:2,3:4}/3'); -SELECT * FROM t ORDER BY val <-> '{1:3,2:3,3:3}/3'; - val ------------------ - {1:1,2:2,3:3}/3 - {1:1,2:2,3:4}/3 - {1:1,2:1,3:1}/3 - {}/3 -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <-> (SELECT NULL::sparsevec)) t2; - count -------- - 4 -(1 row) - -SELECT COUNT(*) FROM t; - count -------- - 5 -(1 row) - -TRUNCATE t; -SELECT * FROM t ORDER BY val <-> '{1:3,2:3,3:3}/3'; - val ------ -(0 rows) - -DROP TABLE t; --- TODO move -CREATE TABLE t (val sparsevec(1001)); -INSERT INTO t (val) VALUES (array_fill(1, ARRAY[1001])::vector::sparsevec); -CREATE INDEX ON t USING hnsw (val sparsevec_l2_ops); -ERROR: sparsevec cannot have more than 1000 non-zero elements for hnsw index -TRUNCATE t; -CREATE INDEX ON t USING hnsw (val sparsevec_l2_ops); -INSERT INTO t (val) VALUES (array_fill(1, ARRAY[1001])::vector::sparsevec); -ERROR: sparsevec cannot have more than 1000 non-zero elements for hnsw index -DROP TABLE t; diff --git a/test/expected/hnsw_unlogged.out b/test/expected/hnsw_unlogged.out deleted file mode 100644 index 0063773..0000000 --- a/test/expected/hnsw_unlogged.out +++ /dev/null @@ -1,13 +0,0 @@ -SET enable_seqscan = off; -CREATE UNLOGGED TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val vector_l2_ops); -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ---------- - [1,2,3] - [1,1,1] - [0,0,0] -(3 rows) - -DROP TABLE t; diff --git a/test/expected/hnsw_vector_cosine.out b/test/expected/hnsw_vector_cosine.out deleted file mode 100644 index df9eb81..0000000 --- a/test/expected/hnsw_vector_cosine.out +++ /dev/null @@ -1,26 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val vector_cosine_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <=> '[3,3,3]'; - val ---------- - [1,1,1] - [1,2,3] - [1,2,4] -(3 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> '[0,0,0]') t2; - count -------- - 3 -(1 row) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> (SELECT NULL::vector)) t2; - count -------- - 3 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_vector_ip.out b/test/expected/hnsw_vector_ip.out deleted file mode 100644 index 92a5072..0000000 --- a/test/expected/hnsw_vector_ip.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val vector_ip_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <#> '[3,3,3]'; - val ---------- - [1,2,4] - [1,2,3] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <#> (SELECT NULL::vector)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_vector_l1.out b/test/expected/hnsw_vector_l1.out deleted file mode 100644 index 28473f6..0000000 --- a/test/expected/hnsw_vector_l1.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val vector_l1_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <+> '[3,3,3]'; - val ---------- - [1,2,3] - [1,2,4] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <+> (SELECT NULL::vector)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/hnsw_vector_l2.out b/test/expected/hnsw_vector_l2.out deleted file mode 100644 index aa56c2b..0000000 --- a/test/expected/hnsw_vector_l2.out +++ /dev/null @@ -1,33 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING hnsw (val vector_l2_ops); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ---------- - [1,2,3] - [1,2,4] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <-> (SELECT NULL::vector)) t2; - count -------- - 4 -(1 row) - -SELECT COUNT(*) FROM t; - count -------- - 5 -(1 row) - -TRUNCATE t; -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ------ -(0 rows) - -DROP TABLE t; diff --git a/test/expected/ivfflat_bit_hamming.out b/test/expected/ivfflat_bit_hamming.out deleted file mode 100644 index 43fbf71..0000000 --- a/test/expected/ivfflat_bit_hamming.out +++ /dev/null @@ -1,36 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val bit(3)); -INSERT INTO t (val) VALUES (B'000'), (B'100'), (B'111'), (NULL); -CREATE INDEX ON t USING ivfflat (val bit_hamming_ops) WITH (lists = 1); -INSERT INTO t (val) VALUES (B'110'); -SELECT * FROM t ORDER BY val <~> B'111'; - val ------ - 111 - 110 - 100 - 000 -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <~> (SELECT NULL::bit)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; --- TODO move -CREATE TABLE t (val varbit(3)); -CREATE INDEX ON t USING ivfflat (val bit_hamming_ops) WITH (lists = 1); -ERROR: type not supported for ivfflat index -CREATE INDEX ON t USING ivfflat ((val::bit(3)) bit_hamming_ops) WITH (lists = 1); -NOTICE: ivfflat index created with little data -DETAIL: This will cause low recall. -HINT: Drop the index until the table has more data. -CREATE INDEX ON t USING ivfflat ((val::bit(64001)) bit_hamming_ops) WITH (lists = 1); -ERROR: column cannot have more than 64000 dimensions for ivfflat index -CREATE INDEX ON t USING ivfflat ((val::bit(2)) bit_hamming_ops) WITH (lists = 5); -NOTICE: ivfflat index created with little data -DETAIL: This will cause low recall. -HINT: Drop the index until the table has more data. -DROP TABLE t; diff --git a/test/expected/ivfflat_halfvec_cosine.out b/test/expected/ivfflat_halfvec_cosine.out deleted file mode 100644 index 6ed48cc..0000000 --- a/test/expected/ivfflat_halfvec_cosine.out +++ /dev/null @@ -1,26 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING ivfflat (val halfvec_cosine_ops) WITH (lists = 1); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <=> '[3,3,3]'; - val ---------- - [1,1,1] - [1,2,3] - [1,2,4] -(3 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> '[0,0,0]') t2; - count -------- - 3 -(1 row) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> (SELECT NULL::halfvec)) t2; - count -------- - 3 -(1 row) - -DROP TABLE t; diff --git a/test/expected/ivfflat_halfvec_ip.out b/test/expected/ivfflat_halfvec_ip.out deleted file mode 100644 index a2b7c65..0000000 --- a/test/expected/ivfflat_halfvec_ip.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING ivfflat (val halfvec_ip_ops) WITH (lists = 1); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <#> '[3,3,3]'; - val ---------- - [1,2,4] - [1,2,3] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <#> (SELECT NULL::halfvec)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/ivfflat_halfvec_l2.out b/test/expected/ivfflat_halfvec_l2.out deleted file mode 100644 index 4a8e615..0000000 --- a/test/expected/ivfflat_halfvec_l2.out +++ /dev/null @@ -1,36 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val halfvec(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING ivfflat (val halfvec_l2_ops) WITH (lists = 1); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ---------- - [1,2,3] - [1,2,4] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <-> (SELECT NULL::halfvec)) t2; - count -------- - 4 -(1 row) - -SELECT COUNT(*) FROM t; - count -------- - 5 -(1 row) - -TRUNCATE t; -NOTICE: ivfflat index created with little data -DETAIL: This will cause low recall. -HINT: Drop the index until the table has more data. -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ------ -(0 rows) - -DROP TABLE t; diff --git a/test/expected/ivfflat_options.out b/test/expected/ivfflat_options.out deleted file mode 100644 index 128402f..0000000 --- a/test/expected/ivfflat_options.out +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE t (val vector(3)); -CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 0); -ERROR: value 0 out of bounds for option "lists" -DETAIL: Valid values are between "1" and "32768". -CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 32769); -ERROR: value 32769 out of bounds for option "lists" -DETAIL: Valid values are between "1" and "32768". -SHOW ivfflat.probes; - ivfflat.probes ----------------- - 1 -(1 row) - -DROP TABLE t; diff --git a/test/expected/ivfflat_unlogged.out b/test/expected/ivfflat_unlogged.out deleted file mode 100644 index 724886f..0000000 --- a/test/expected/ivfflat_unlogged.out +++ /dev/null @@ -1,13 +0,0 @@ -SET enable_seqscan = off; -CREATE UNLOGGED TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 1); -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ---------- - [1,2,3] - [1,1,1] - [0,0,0] -(3 rows) - -DROP TABLE t; diff --git a/test/expected/ivfflat_vector_cosine.out b/test/expected/ivfflat_vector_cosine.out deleted file mode 100644 index 8584d95..0000000 --- a/test/expected/ivfflat_vector_cosine.out +++ /dev/null @@ -1,26 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING ivfflat (val vector_cosine_ops) WITH (lists = 1); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <=> '[3,3,3]'; - val ---------- - [1,1,1] - [1,2,3] - [1,2,4] -(3 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> '[0,0,0]') t2; - count -------- - 3 -(1 row) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> (SELECT NULL::vector)) t2; - count -------- - 3 -(1 row) - -DROP TABLE t; diff --git a/test/expected/ivfflat_vector_ip.out b/test/expected/ivfflat_vector_ip.out deleted file mode 100644 index d2bc386..0000000 --- a/test/expected/ivfflat_vector_ip.out +++ /dev/null @@ -1,21 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING ivfflat (val vector_ip_ops) WITH (lists = 1); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <#> '[3,3,3]'; - val ---------- - [1,2,4] - [1,2,3] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <#> (SELECT NULL::vector)) t2; - count -------- - 4 -(1 row) - -DROP TABLE t; diff --git a/test/expected/ivfflat_vector_l2.out b/test/expected/ivfflat_vector_l2.out deleted file mode 100644 index 7580afc..0000000 --- a/test/expected/ivfflat_vector_l2.out +++ /dev/null @@ -1,36 +0,0 @@ -SET enable_seqscan = off; -CREATE TABLE t (val vector(3)); -INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); -CREATE INDEX ON t USING ivfflat (val vector_l2_ops) WITH (lists = 1); -INSERT INTO t (val) VALUES ('[1,2,4]'); -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ---------- - [1,2,3] - [1,2,4] - [1,1,1] - [0,0,0] -(4 rows) - -SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <-> (SELECT NULL::vector)) t2; - count -------- - 4 -(1 row) - -SELECT COUNT(*) FROM t; - count -------- - 5 -(1 row) - -TRUNCATE t; -NOTICE: ivfflat index created with little data -DETAIL: This will cause low recall. -HINT: Drop the index until the table has more data. -SELECT * FROM t ORDER BY val <-> '[3,3,3]'; - val ------ -(0 rows) - -DROP TABLE t; diff --git a/test/expected/sparsevec_input.out b/test/expected/sparsevec.out similarity index 51% rename from test/expected/sparsevec_input.out rename to test/expected/sparsevec.out index a6b3714..eadd37b 100644 --- a/test/expected/sparsevec_input.out +++ b/test/expected/sparsevec.out @@ -255,3 +255,399 @@ SELECT '{}/3'::sparsevec(1000000001); ERROR: dimensions for type sparsevec cannot exceed 1000000000 LINE 1: SELECT '{}/3'::sparsevec(1000000001); ^ +SELECT '{1:1,2:2,3:3}/3'::sparsevec < '{1:1,2:2,3:3}/3'; + ?column? +---------- + f +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec < '{1:1,2:2}/2'; + ?column? +---------- + f +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec <= '{1:1,2:2,3:3}/3'; + ?column? +---------- + t +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec <= '{1:1,2:2}/2'; + ?column? +---------- + f +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec = '{1:1,2:2,3:3}/3'; + ?column? +---------- + t +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec = '{1:1,2:2}/2'; + ?column? +---------- + f +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec != '{1:1,2:2,3:3}/3'; + ?column? +---------- + f +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec != '{1:1,2:2}/2'; + ?column? +---------- + t +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec >= '{1:1,2:2,3:3}/3'; + ?column? +---------- + t +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec >= '{1:1,2:2}/2'; + ?column? +---------- + t +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec > '{1:1,2:2,3:3}/3'; + ?column? +---------- + f +(1 row) + +SELECT '{1:1,2:2,3:3}/3'::sparsevec > '{1:1,2:2}/2'; + ?column? +---------- + t +(1 row) + +SELECT sparsevec_cmp('{1:1,2:2,3:3}/3', '{1:1,2:2,3:3}/3'); + sparsevec_cmp +--------------- + 0 +(1 row) + +SELECT sparsevec_cmp('{1:1,2:2,3:3}/3', '{}/3'); + sparsevec_cmp +--------------- + 1 +(1 row) + +SELECT sparsevec_cmp('{}/3', '{1:1,2:2,3:3}/3'); + sparsevec_cmp +--------------- + -1 +(1 row) + +SELECT sparsevec_cmp('{1:1,2:2}/2', '{1:1,2:2,3:3}/3'); + sparsevec_cmp +--------------- + -1 +(1 row) + +SELECT sparsevec_cmp('{1:1,2:2,3:3}/3', '{1:1,2:2}/2'); + sparsevec_cmp +--------------- + 1 +(1 row) + +SELECT sparsevec_cmp('{1:1,2:2}/2', '{1:2,2:3,3:4}/3'); + sparsevec_cmp +--------------- + -1 +(1 row) + +SELECT sparsevec_cmp('{1:2,2:3}/2', '{1:1,2:2,3:3}/3'); + sparsevec_cmp +--------------- + 1 +(1 row) + +SELECT round(l2_norm('{1:1,2:1}/2'::sparsevec)::numeric, 5); + round +--------- + 1.41421 +(1 row) + +SELECT l2_norm('{1:3,2:4}/2'::sparsevec); + l2_norm +--------- + 5 +(1 row) + +SELECT l2_norm('{2:1}/2'::sparsevec); + l2_norm +--------- + 1 +(1 row) + +SELECT l2_norm('{1:3e37,2:4e37}/2'::sparsevec)::real; + l2_norm +--------- + 5e+37 +(1 row) + +SELECT l2_norm('{}/2'::sparsevec); + l2_norm +--------- + 0 +(1 row) + +SELECT l2_norm('{1:2}/1'::sparsevec); + l2_norm +--------- + 2 +(1 row) + +SELECT l2_distance('{}/2'::sparsevec, '{1:3,2:4}/2'); + l2_distance +------------- + 5 +(1 row) + +SELECT l2_distance('{1:3}/2'::sparsevec, '{2:4}/2'); + l2_distance +------------- + 5 +(1 row) + +SELECT l2_distance('{2:4}/2'::sparsevec, '{1:3}/2'); + l2_distance +------------- + 5 +(1 row) + +SELECT l2_distance('{1:3,2:4}/2'::sparsevec, '{}/2'); + l2_distance +------------- + 5 +(1 row) + +SELECT l2_distance('{}/2'::sparsevec, '{2:1}/2'); + l2_distance +------------- + 1 +(1 row) + +SELECT '{}/2'::sparsevec <-> '{1:3,2:4}/2'; + ?column? +---------- + 5 +(1 row) + +SELECT inner_product('{1:1,2:2}/2'::sparsevec, '{1:2,2:4}/2'); + inner_product +--------------- + 10 +(1 row) + +SELECT inner_product('{1:1,2:2}/2'::sparsevec, '{1:3}/1'); +ERROR: different sparsevec dimensions 2 and 1 +SELECT inner_product('{1:1,3:3}/4'::sparsevec, '{2:2,4:4}/4'); + inner_product +--------------- + 0 +(1 row) + +SELECT inner_product('{2:2,4:4}/4'::sparsevec, '{1:1,3:3}/4'); + inner_product +--------------- + 0 +(1 row) + +SELECT inner_product('{1:1,3:3,5:5}/5'::sparsevec, '{2:4,3:6,4:8}/5'); + inner_product +--------------- + 18 +(1 row) + +SELECT inner_product('{1:1}/2'::sparsevec, '{}/2'); + inner_product +--------------- + 0 +(1 row) + +SELECT inner_product('{}/2'::sparsevec, '{1:1}/2'); + inner_product +--------------- + 0 +(1 row) + +SELECT inner_product('{1:3e38}/1'::sparsevec, '{1:3e38}/1'); + inner_product +--------------- + Infinity +(1 row) + +SELECT inner_product('{1:1,3:3,5:5}/5'::sparsevec, '{2:4,3:6,4:8}/5'); + inner_product +--------------- + 18 +(1 row) + +SELECT '{1:1,2:2}/2'::sparsevec <#> '{1:3,2:4}/2'; + ?column? +---------- + -11 +(1 row) + +SELECT cosine_distance('{1:1,2:2}/2'::sparsevec, '{1:2,2:4}/2'); + cosine_distance +----------------- + 0 +(1 row) + +SELECT cosine_distance('{1:1,2:2}/2'::sparsevec, '{}/2'); + cosine_distance +----------------- + NaN +(1 row) + +SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:1,2:1}/2'); + cosine_distance +----------------- + 0 +(1 row) + +SELECT cosine_distance('{1:1}/2'::sparsevec, '{2:2}/2'); + cosine_distance +----------------- + 1 +(1 row) + +SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:-1,2:-1}/2'); + cosine_distance +----------------- + 2 +(1 row) + +SELECT cosine_distance('{1:2}/2'::sparsevec, '{2:2}/2'); + cosine_distance +----------------- + 1 +(1 row) + +SELECT cosine_distance('{2:2}/2'::sparsevec, '{1:2}/2'); + cosine_distance +----------------- + 1 +(1 row) + +SELECT cosine_distance('{1:1,2:2}/2'::sparsevec, '{1:3}/1'); +ERROR: different sparsevec dimensions 2 and 1 +SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:1.1,2:1.1}/2'); + cosine_distance +----------------- + 0 +(1 row) + +SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:-1.1,2:-1.1}/2'); + cosine_distance +----------------- + 2 +(1 row) + +SELECT cosine_distance('{1:3e38}/1'::sparsevec, '{1:3e38}/1'); + cosine_distance +----------------- + NaN +(1 row) + +SELECT cosine_distance('{}/1'::sparsevec, '{}/1'); + cosine_distance +----------------- + NaN +(1 row) + +SELECT '{1:1,2:2}/2'::sparsevec <=> '{1:2,2:4}/2'; + ?column? +---------- + 0 +(1 row) + +SELECT l1_distance('{}/2'::sparsevec, '{1:3,2:4}/2'); + l1_distance +------------- + 7 +(1 row) + +SELECT l1_distance('{}/2'::sparsevec, '{2:1}/2'); + l1_distance +------------- + 1 +(1 row) + +SELECT l1_distance('{1:1,2:2}/2'::sparsevec, '{1:3}/1'); +ERROR: different sparsevec dimensions 2 and 1 +SELECT l1_distance('{1:3e38}/1'::sparsevec, '{1:-3e38}/1'); + l1_distance +------------- + Infinity +(1 row) + +SELECT l1_distance('{1:1,3:3,5:5,7:7}/8'::sparsevec, '{2:2,4:4,6:6,8:8}/8'); + l1_distance +------------- + 36 +(1 row) + +SELECT l1_distance('{1:1,3:3,5:5,7:7,9:9}/9'::sparsevec, '{2:2,4:4,6:6,8:8}/9'); + l1_distance +------------- + 45 +(1 row) + +SELECT '{}/2'::sparsevec <+> '{1:3,2:4}/2'; + ?column? +---------- + 7 +(1 row) + +SELECT l2_normalize('{1:3,2:4}/2'::sparsevec); + l2_normalize +----------------- + {1:0.6,2:0.8}/2 +(1 row) + +SELECT l2_normalize('{1:3}/2'::sparsevec); + l2_normalize +-------------- + {1:1}/2 +(1 row) + +SELECT l2_normalize('{2:0.1}/2'::sparsevec); + l2_normalize +-------------- + {2:1}/2 +(1 row) + +SELECT l2_normalize('{}/2'::sparsevec); + l2_normalize +-------------- + {}/2 +(1 row) + +SELECT l2_normalize('{1:3e38}/1'::sparsevec); + l2_normalize +-------------- + {1:1}/1 +(1 row) + +SELECT l2_normalize('{1:3e38,2:1e-37}/2'::sparsevec); + l2_normalize +-------------- + {1:1}/2 +(1 row) + +SELECT l2_normalize('{2:3e37,4:3e-37,6:4e37,8:4e-37}/9'::sparsevec); + l2_normalize +----------------- + {2:0.6,6:0.8}/9 +(1 row) + diff --git a/test/expected/sparsevec_functions.out b/test/expected/sparsevec_functions.out deleted file mode 100644 index 21667ac..0000000 --- a/test/expected/sparsevec_functions.out +++ /dev/null @@ -1,396 +0,0 @@ -SELECT '{1:1,2:2,3:3}/3'::sparsevec < '{1:1,2:2,3:3}/3'; - ?column? ----------- - f -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec < '{1:1,2:2}/2'; - ?column? ----------- - f -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec <= '{1:1,2:2,3:3}/3'; - ?column? ----------- - t -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec <= '{1:1,2:2}/2'; - ?column? ----------- - f -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec = '{1:1,2:2,3:3}/3'; - ?column? ----------- - t -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec = '{1:1,2:2}/2'; - ?column? ----------- - f -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec != '{1:1,2:2,3:3}/3'; - ?column? ----------- - f -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec != '{1:1,2:2}/2'; - ?column? ----------- - t -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec >= '{1:1,2:2,3:3}/3'; - ?column? ----------- - t -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec >= '{1:1,2:2}/2'; - ?column? ----------- - t -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec > '{1:1,2:2,3:3}/3'; - ?column? ----------- - f -(1 row) - -SELECT '{1:1,2:2,3:3}/3'::sparsevec > '{1:1,2:2}/2'; - ?column? ----------- - t -(1 row) - -SELECT sparsevec_cmp('{1:1,2:2,3:3}/3', '{1:1,2:2,3:3}/3'); - sparsevec_cmp ---------------- - 0 -(1 row) - -SELECT sparsevec_cmp('{1:1,2:2,3:3}/3', '{}/3'); - sparsevec_cmp ---------------- - 1 -(1 row) - -SELECT sparsevec_cmp('{}/3', '{1:1,2:2,3:3}/3'); - sparsevec_cmp ---------------- - -1 -(1 row) - -SELECT sparsevec_cmp('{1:1,2:2}/2', '{1:1,2:2,3:3}/3'); - sparsevec_cmp ---------------- - -1 -(1 row) - -SELECT sparsevec_cmp('{1:1,2:2,3:3}/3', '{1:1,2:2}/2'); - sparsevec_cmp ---------------- - 1 -(1 row) - -SELECT sparsevec_cmp('{1:1,2:2}/2', '{1:2,2:3,3:4}/3'); - sparsevec_cmp ---------------- - -1 -(1 row) - -SELECT sparsevec_cmp('{1:2,2:3}/2', '{1:1,2:2,3:3}/3'); - sparsevec_cmp ---------------- - 1 -(1 row) - -SELECT round(l2_norm('{1:1,2:1}/2'::sparsevec)::numeric, 5); - round ---------- - 1.41421 -(1 row) - -SELECT l2_norm('{1:3,2:4}/2'::sparsevec); - l2_norm ---------- - 5 -(1 row) - -SELECT l2_norm('{2:1}/2'::sparsevec); - l2_norm ---------- - 1 -(1 row) - -SELECT l2_norm('{1:3e37,2:4e37}/2'::sparsevec)::real; - l2_norm ---------- - 5e+37 -(1 row) - -SELECT l2_norm('{}/2'::sparsevec); - l2_norm ---------- - 0 -(1 row) - -SELECT l2_norm('{1:2}/1'::sparsevec); - l2_norm ---------- - 2 -(1 row) - -SELECT l2_distance('{}/2'::sparsevec, '{1:3,2:4}/2'); - l2_distance -------------- - 5 -(1 row) - -SELECT l2_distance('{1:3}/2'::sparsevec, '{2:4}/2'); - l2_distance -------------- - 5 -(1 row) - -SELECT l2_distance('{2:4}/2'::sparsevec, '{1:3}/2'); - l2_distance -------------- - 5 -(1 row) - -SELECT l2_distance('{1:3,2:4}/2'::sparsevec, '{}/2'); - l2_distance -------------- - 5 -(1 row) - -SELECT l2_distance('{}/2'::sparsevec, '{2:1}/2'); - l2_distance -------------- - 1 -(1 row) - -SELECT '{}/2'::sparsevec <-> '{1:3,2:4}/2'; - ?column? ----------- - 5 -(1 row) - -SELECT inner_product('{1:1,2:2}/2'::sparsevec, '{1:2,2:4}/2'); - inner_product ---------------- - 10 -(1 row) - -SELECT inner_product('{1:1,2:2}/2'::sparsevec, '{1:3}/1'); -ERROR: different sparsevec dimensions 2 and 1 -SELECT inner_product('{1:1,3:3}/4'::sparsevec, '{2:2,4:4}/4'); - inner_product ---------------- - 0 -(1 row) - -SELECT inner_product('{2:2,4:4}/4'::sparsevec, '{1:1,3:3}/4'); - inner_product ---------------- - 0 -(1 row) - -SELECT inner_product('{1:1,3:3,5:5}/5'::sparsevec, '{2:4,3:6,4:8}/5'); - inner_product ---------------- - 18 -(1 row) - -SELECT inner_product('{1:1}/2'::sparsevec, '{}/2'); - inner_product ---------------- - 0 -(1 row) - -SELECT inner_product('{}/2'::sparsevec, '{1:1}/2'); - inner_product ---------------- - 0 -(1 row) - -SELECT inner_product('{1:3e38}/1'::sparsevec, '{1:3e38}/1'); - inner_product ---------------- - Infinity -(1 row) - -SELECT inner_product('{1:1,3:3,5:5}/5'::sparsevec, '{2:4,3:6,4:8}/5'); - inner_product ---------------- - 18 -(1 row) - -SELECT '{1:1,2:2}/2'::sparsevec <#> '{1:3,2:4}/2'; - ?column? ----------- - -11 -(1 row) - -SELECT cosine_distance('{1:1,2:2}/2'::sparsevec, '{1:2,2:4}/2'); - cosine_distance ------------------ - 0 -(1 row) - -SELECT cosine_distance('{1:1,2:2}/2'::sparsevec, '{}/2'); - cosine_distance ------------------ - NaN -(1 row) - -SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:1,2:1}/2'); - cosine_distance ------------------ - 0 -(1 row) - -SELECT cosine_distance('{1:1}/2'::sparsevec, '{2:2}/2'); - cosine_distance ------------------ - 1 -(1 row) - -SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:-1,2:-1}/2'); - cosine_distance ------------------ - 2 -(1 row) - -SELECT cosine_distance('{1:2}/2'::sparsevec, '{2:2}/2'); - cosine_distance ------------------ - 1 -(1 row) - -SELECT cosine_distance('{2:2}/2'::sparsevec, '{1:2}/2'); - cosine_distance ------------------ - 1 -(1 row) - -SELECT cosine_distance('{1:1,2:2}/2'::sparsevec, '{1:3}/1'); -ERROR: different sparsevec dimensions 2 and 1 -SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:1.1,2:1.1}/2'); - cosine_distance ------------------ - 0 -(1 row) - -SELECT cosine_distance('{1:1,2:1}/2'::sparsevec, '{1:-1.1,2:-1.1}/2'); - cosine_distance ------------------ - 2 -(1 row) - -SELECT cosine_distance('{1:3e38}/1'::sparsevec, '{1:3e38}/1'); - cosine_distance ------------------ - NaN -(1 row) - -SELECT cosine_distance('{}/1'::sparsevec, '{}/1'); - cosine_distance ------------------ - NaN -(1 row) - -SELECT '{1:1,2:2}/2'::sparsevec <=> '{1:2,2:4}/2'; - ?column? ----------- - 0 -(1 row) - -SELECT l1_distance('{}/2'::sparsevec, '{1:3,2:4}/2'); - l1_distance -------------- - 7 -(1 row) - -SELECT l1_distance('{}/2'::sparsevec, '{2:1}/2'); - l1_distance -------------- - 1 -(1 row) - -SELECT l1_distance('{1:1,2:2}/2'::sparsevec, '{1:3}/1'); -ERROR: different sparsevec dimensions 2 and 1 -SELECT l1_distance('{1:3e38}/1'::sparsevec, '{1:-3e38}/1'); - l1_distance -------------- - Infinity -(1 row) - -SELECT l1_distance('{1:1,3:3,5:5,7:7}/8'::sparsevec, '{2:2,4:4,6:6,8:8}/8'); - l1_distance -------------- - 36 -(1 row) - -SELECT l1_distance('{1:1,3:3,5:5,7:7,9:9}/9'::sparsevec, '{2:2,4:4,6:6,8:8}/9'); - l1_distance -------------- - 45 -(1 row) - -SELECT '{}/2'::sparsevec <+> '{1:3,2:4}/2'; - ?column? ----------- - 7 -(1 row) - -SELECT l2_normalize('{1:3,2:4}/2'::sparsevec); - l2_normalize ------------------ - {1:0.6,2:0.8}/2 -(1 row) - -SELECT l2_normalize('{1:3}/2'::sparsevec); - l2_normalize --------------- - {1:1}/2 -(1 row) - -SELECT l2_normalize('{2:0.1}/2'::sparsevec); - l2_normalize --------------- - {2:1}/2 -(1 row) - -SELECT l2_normalize('{}/2'::sparsevec); - l2_normalize --------------- - {}/2 -(1 row) - -SELECT l2_normalize('{1:3e38}/1'::sparsevec); - l2_normalize --------------- - {1:1}/1 -(1 row) - -SELECT l2_normalize('{1:3e38,2:1e-37}/2'::sparsevec); - l2_normalize --------------- - {1:1}/2 -(1 row) - -SELECT l2_normalize('{2:3e37,4:3e-37,6:4e37,8:4e-37}/9'::sparsevec); - l2_normalize ------------------ - {2:0.6,6:0.8}/9 -(1 row) - diff --git a/test/expected/vector.out b/test/expected/vector.out new file mode 100644 index 0000000..ccf0bbf --- /dev/null +++ b/test/expected/vector.out @@ -0,0 +1,3 @@ +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "CREATE EXTENSION vector" to load this file. \quit +Use "CREATE EXTENSION vector" to load this file. diff --git a/test/expected/vector_functions.out b/test/expected/vector_functions.out deleted file mode 100644 index dd3654c..0000000 --- a/test/expected/vector_functions.out +++ /dev/null @@ -1,496 +0,0 @@ -SELECT '[1,2,3]'::vector + '[4,5,6]'; - ?column? ----------- - [5,7,9] -(1 row) - -SELECT '[3e38]'::vector + '[3e38]'; -ERROR: value out of range: overflow -SELECT '[1,2]'::vector + '[3]'; -ERROR: different vector dimensions 2 and 1 -SELECT '[1,2,3]'::vector - '[4,5,6]'; - ?column? ------------- - [-3,-3,-3] -(1 row) - -SELECT '[-3e38]'::vector - '[3e38]'; -ERROR: value out of range: overflow -SELECT '[1,2]'::vector - '[3]'; -ERROR: different vector dimensions 2 and 1 -SELECT '[1,2,3]'::vector * '[4,5,6]'; - ?column? ------------ - [4,10,18] -(1 row) - -SELECT '[1e37]'::vector * '[1e37]'; -ERROR: value out of range: overflow -SELECT '[1e-37]'::vector * '[1e-37]'; -ERROR: value out of range: underflow -SELECT '[1,2]'::vector * '[3]'; -ERROR: different vector dimensions 2 and 1 -SELECT '[1,2,3]'::vector || '[4,5]'; - ?column? -------------- - [1,2,3,4,5] -(1 row) - -SELECT array_fill(0, ARRAY[16000])::vector || '[1]'; -ERROR: vector cannot have more than 16000 dimensions -SELECT '[1,2,3]'::vector < '[1,2,3]'; - ?column? ----------- - f -(1 row) - -SELECT '[1,2,3]'::vector < '[1,2]'; - ?column? ----------- - f -(1 row) - -SELECT '[1,2,3]'::vector <= '[1,2,3]'; - ?column? ----------- - t -(1 row) - -SELECT '[1,2,3]'::vector <= '[1,2]'; - ?column? ----------- - f -(1 row) - -SELECT '[1,2,3]'::vector = '[1,2,3]'; - ?column? ----------- - t -(1 row) - -SELECT '[1,2,3]'::vector = '[1,2]'; - ?column? ----------- - f -(1 row) - -SELECT '[1,2,3]'::vector != '[1,2,3]'; - ?column? ----------- - f -(1 row) - -SELECT '[1,2,3]'::vector != '[1,2]'; - ?column? ----------- - t -(1 row) - -SELECT '[1,2,3]'::vector >= '[1,2,3]'; - ?column? ----------- - t -(1 row) - -SELECT '[1,2,3]'::vector >= '[1,2]'; - ?column? ----------- - t -(1 row) - -SELECT '[1,2,3]'::vector > '[1,2,3]'; - ?column? ----------- - f -(1 row) - -SELECT '[1,2,3]'::vector > '[1,2]'; - ?column? ----------- - t -(1 row) - -SELECT vector_cmp('[1,2,3]', '[1,2,3]'); - vector_cmp ------------- - 0 -(1 row) - -SELECT vector_cmp('[1,2,3]', '[0,0,0]'); - vector_cmp ------------- - 1 -(1 row) - -SELECT vector_cmp('[0,0,0]', '[1,2,3]'); - vector_cmp ------------- - -1 -(1 row) - -SELECT vector_cmp('[1,2]', '[1,2,3]'); - vector_cmp ------------- - -1 -(1 row) - -SELECT vector_cmp('[1,2,3]', '[1,2]'); - vector_cmp ------------- - 1 -(1 row) - -SELECT vector_cmp('[1,2]', '[2,3,4]'); - vector_cmp ------------- - -1 -(1 row) - -SELECT vector_cmp('[2,3]', '[1,2,3]'); - vector_cmp ------------- - 1 -(1 row) - -SELECT vector_dims('[1,2,3]'::vector); - vector_dims -------------- - 3 -(1 row) - -SELECT round(vector_norm('[1,1]')::numeric, 5); - round ---------- - 1.41421 -(1 row) - -SELECT vector_norm('[3,4]'); - vector_norm -------------- - 5 -(1 row) - -SELECT vector_norm('[0,1]'); - vector_norm -------------- - 1 -(1 row) - -SELECT vector_norm('[3e37,4e37]')::real; - vector_norm -------------- - 5e+37 -(1 row) - -SELECT vector_norm('[0,0]'); - vector_norm -------------- - 0 -(1 row) - -SELECT vector_norm('[2]'); - vector_norm -------------- - 2 -(1 row) - -SELECT l2_distance('[0,0]'::vector, '[3,4]'); - l2_distance -------------- - 5 -(1 row) - -SELECT l2_distance('[0,0]'::vector, '[0,1]'); - l2_distance -------------- - 1 -(1 row) - -SELECT l2_distance('[1,2]'::vector, '[3]'); -ERROR: different vector dimensions 2 and 1 -SELECT l2_distance('[3e38]'::vector, '[-3e38]'); - l2_distance -------------- - Infinity -(1 row) - -SELECT l2_distance('[1,1,1,1,1,1,1,1,1]'::vector, '[1,1,1,1,1,1,1,4,5]'); - l2_distance -------------- - 5 -(1 row) - -SELECT '[0,0]'::vector <-> '[3,4]'; - ?column? ----------- - 5 -(1 row) - -SELECT inner_product('[1,2]'::vector, '[3,4]'); - inner_product ---------------- - 11 -(1 row) - -SELECT inner_product('[1,2]'::vector, '[3]'); -ERROR: different vector dimensions 2 and 1 -SELECT inner_product('[3e38]'::vector, '[3e38]'); - inner_product ---------------- - Infinity -(1 row) - -SELECT inner_product('[1,1,1,1,1,1,1,1,1]'::vector, '[1,2,3,4,5,6,7,8,9]'); - inner_product ---------------- - 45 -(1 row) - -SELECT '[1,2]'::vector <#> '[3,4]'; - ?column? ----------- - -11 -(1 row) - -SELECT cosine_distance('[1,2]'::vector, '[2,4]'); - cosine_distance ------------------ - 0 -(1 row) - -SELECT cosine_distance('[1,2]'::vector, '[0,0]'); - cosine_distance ------------------ - NaN -(1 row) - -SELECT cosine_distance('[1,1]'::vector, '[1,1]'); - cosine_distance ------------------ - 0 -(1 row) - -SELECT cosine_distance('[1,0]'::vector, '[0,2]'); - cosine_distance ------------------ - 1 -(1 row) - -SELECT cosine_distance('[1,1]'::vector, '[-1,-1]'); - cosine_distance ------------------ - 2 -(1 row) - -SELECT cosine_distance('[1,2]'::vector, '[3]'); -ERROR: different vector dimensions 2 and 1 -SELECT cosine_distance('[1,1]'::vector, '[1.1,1.1]'); - cosine_distance ------------------ - 0 -(1 row) - -SELECT cosine_distance('[1,1]'::vector, '[-1.1,-1.1]'); - cosine_distance ------------------ - 2 -(1 row) - -SELECT cosine_distance('[3e38]'::vector, '[3e38]'); - cosine_distance ------------------ - NaN -(1 row) - -SELECT cosine_distance('[1,2,3,4,5,6,7,8,9]'::vector, '[1,2,3,4,5,6,7,8,9]'); - cosine_distance ------------------ - 0 -(1 row) - -SELECT cosine_distance('[1,2,3,4,5,6,7,8,9]'::vector, '[-1,-2,-3,-4,-5,-6,-7,-8,-9]'); - cosine_distance ------------------ - 2 -(1 row) - -SELECT '[1,2]'::vector <=> '[2,4]'; - ?column? ----------- - 0 -(1 row) - -SELECT l1_distance('[0,0]'::vector, '[3,4]'); - l1_distance -------------- - 7 -(1 row) - -SELECT l1_distance('[0,0]'::vector, '[0,1]'); - l1_distance -------------- - 1 -(1 row) - -SELECT l1_distance('[1,2]'::vector, '[3]'); -ERROR: different vector dimensions 2 and 1 -SELECT l1_distance('[3e38]'::vector, '[-3e38]'); - l1_distance -------------- - Infinity -(1 row) - -SELECT l1_distance('[1,2,3,4,5,6,7,8,9]'::vector, '[1,2,3,4,5,6,7,8,9]'); - l1_distance -------------- - 0 -(1 row) - -SELECT l1_distance('[1,2,3,4,5,6,7,8,9]'::vector, '[0,3,2,5,4,7,6,9,8]'); - l1_distance -------------- - 9 -(1 row) - -SELECT '[0,0]'::vector <+> '[3,4]'; - ?column? ----------- - 7 -(1 row) - -SELECT l2_normalize('[3,4]'::vector); - l2_normalize --------------- - [0.6,0.8] -(1 row) - -SELECT l2_normalize('[3,0]'::vector); - l2_normalize --------------- - [1,0] -(1 row) - -SELECT l2_normalize('[0,0.1]'::vector); - l2_normalize --------------- - [0,1] -(1 row) - -SELECT l2_normalize('[0,0]'::vector); - l2_normalize --------------- - [0,0] -(1 row) - -SELECT l2_normalize('[3e38]'::vector); - l2_normalize --------------- - [1] -(1 row) - -SELECT binary_quantize('[1,0,-1]'::vector); - binary_quantize ------------------ - 100 -(1 row) - -SELECT binary_quantize('[0,0.1,-0.2,-0.3,0.4,0.5,0.6,-0.7,0.8,-0.9,1]'::vector); - binary_quantize ------------------ - 01001110101 -(1 row) - -SELECT subvector('[1,2,3,4,5]'::vector, 1, 3); - subvector ------------ - [1,2,3] -(1 row) - -SELECT subvector('[1,2,3,4,5]'::vector, 3, 2); - subvector ------------ - [3,4] -(1 row) - -SELECT subvector('[1,2,3,4,5]'::vector, -1, 3); - subvector ------------ - [1] -(1 row) - -SELECT subvector('[1,2,3,4,5]'::vector, 3, 9); - subvector ------------ - [3,4,5] -(1 row) - -SELECT subvector('[1,2,3,4,5]'::vector, 1, 0); -ERROR: vector must have at least 1 dimension -SELECT subvector('[1,2,3,4,5]'::vector, 3, -1); -ERROR: vector must have at least 1 dimension -SELECT subvector('[1,2,3,4,5]'::vector, -1, 2); -ERROR: vector must have at least 1 dimension -SELECT subvector('[1,2,3,4,5]'::vector, 2147483647, 10); -ERROR: vector must have at least 1 dimension -SELECT subvector('[1,2,3,4,5]'::vector, 3, 2147483647); - subvector ------------ - [3,4,5] -(1 row) - -SELECT subvector('[1,2,3,4,5]'::vector, -2147483644, 2147483647); - subvector ------------ - [1,2] -(1 row) - -SELECT avg(v) FROM unnest(ARRAY['[1,2,3]'::vector, '[3,5,7]']) v; - avg ------------ - [2,3.5,5] -(1 row) - -SELECT avg(v) FROM unnest(ARRAY['[1,2,3]'::vector, '[3,5,7]', NULL]) v; - avg ------------ - [2,3.5,5] -(1 row) - -SELECT avg(v) FROM unnest(ARRAY[]::vector[]) v; - avg ------ - -(1 row) - -SELECT avg(v) FROM unnest(ARRAY['[1,2]'::vector, '[3]']) v; -ERROR: expected 2 dimensions, not 1 -SELECT avg(v) FROM unnest(ARRAY['[3e38]'::vector, '[3e38]']) v; - avg ---------- - [3e+38] -(1 row) - -SELECT vector_avg(array_agg(n)) FROM generate_series(1, 16002) n; -ERROR: vector cannot have more than 16000 dimensions -SELECT sum(v) FROM unnest(ARRAY['[1,2,3]'::vector, '[3,5,7]']) v; - sum ----------- - [4,7,10] -(1 row) - -SELECT sum(v) FROM unnest(ARRAY['[1,2,3]'::vector, '[3,5,7]', NULL]) v; - sum ----------- - [4,7,10] -(1 row) - -SELECT sum(v) FROM unnest(ARRAY[]::vector[]) v; - sum ------ - -(1 row) - -SELECT sum(v) FROM unnest(ARRAY['[1,2]'::vector, '[3]']) v; -ERROR: different vector dimensions 2 and 1 -SELECT sum(v) FROM unnest(ARRAY['[3e38]'::vector, '[3e38]']) v; -ERROR: value out of range: overflow diff --git a/test/expected/vector_input.out b/test/expected/vector_input.out deleted file mode 100644 index 5b3f49f..0000000 --- a/test/expected/vector_input.out +++ /dev/null @@ -1,176 +0,0 @@ -SELECT '[1,2,3]'::vector; - vector ---------- - [1,2,3] -(1 row) - -SELECT '[-1,-2,-3]'::vector; - vector ------------- - [-1,-2,-3] -(1 row) - -SELECT '[1.,2.,3.]'::vector; - vector ---------- - [1,2,3] -(1 row) - -SELECT ' [ 1, 2 , 3 ] '::vector; - vector ---------- - [1,2,3] -(1 row) - -SELECT '[1.23456]'::vector; - vector ------------ - [1.23456] -(1 row) - -SELECT '[hello,1]'::vector; -ERROR: invalid input syntax for type vector: "[hello,1]" -LINE 1: SELECT '[hello,1]'::vector; - ^ -SELECT '[NaN,1]'::vector; -ERROR: NaN not allowed in vector -LINE 1: SELECT '[NaN,1]'::vector; - ^ -SELECT '[Infinity,1]'::vector; -ERROR: infinite value not allowed in vector -LINE 1: SELECT '[Infinity,1]'::vector; - ^ -SELECT '[-Infinity,1]'::vector; -ERROR: infinite value not allowed in vector -LINE 1: SELECT '[-Infinity,1]'::vector; - ^ -SELECT '[1.5e38,-1.5e38]'::vector; - vector --------------------- - [1.5e+38,-1.5e+38] -(1 row) - -SELECT '[1.5e+38,-1.5e+38]'::vector; - vector --------------------- - [1.5e+38,-1.5e+38] -(1 row) - -SELECT '[1.5e-38,-1.5e-38]'::vector; - vector --------------------- - [1.5e-38,-1.5e-38] -(1 row) - -SELECT '[4e38,1]'::vector; -ERROR: "4e38" is out of range for type vector -LINE 1: SELECT '[4e38,1]'::vector; - ^ -SELECT '[-4e38,1]'::vector; -ERROR: "-4e38" is out of range for type vector -LINE 1: SELECT '[-4e38,1]'::vector; - ^ -SELECT '[1e-46,1]'::vector; - vector --------- - [0,1] -(1 row) - -SELECT '[-1e-46,1]'::vector; - vector --------- - [-0,1] -(1 row) - -SELECT '[1,2,3'::vector; -ERROR: invalid input syntax for type vector: "[1,2,3" -LINE 1: SELECT '[1,2,3'::vector; - ^ -SELECT '[1,2,3]9'::vector; -ERROR: invalid input syntax for type vector: "[1,2,3]9" -LINE 1: SELECT '[1,2,3]9'::vector; - ^ -DETAIL: Junk after closing right brace. -SELECT '1,2,3'::vector; -ERROR: invalid input syntax for type vector: "1,2,3" -LINE 1: SELECT '1,2,3'::vector; - ^ -DETAIL: Vector contents must start with "[". -SELECT ''::vector; -ERROR: invalid input syntax for type vector: "" -LINE 1: SELECT ''::vector; - ^ -DETAIL: Vector contents must start with "[". -SELECT '['::vector; -ERROR: invalid input syntax for type vector: "[" -LINE 1: SELECT '['::vector; - ^ -SELECT '[ '::vector; -ERROR: invalid input syntax for type vector: "[ " -LINE 1: SELECT '[ '::vector; - ^ -SELECT '[,'::vector; -ERROR: invalid input syntax for type vector: "[," -LINE 1: SELECT '[,'::vector; - ^ -SELECT '[]'::vector; -ERROR: vector must have at least 1 dimension -LINE 1: SELECT '[]'::vector; - ^ -SELECT '[ ]'::vector; -ERROR: vector must have at least 1 dimension -LINE 1: SELECT '[ ]'::vector; - ^ -SELECT '[,]'::vector; -ERROR: invalid input syntax for type vector: "[,]" -LINE 1: SELECT '[,]'::vector; - ^ -SELECT '[1,]'::vector; -ERROR: invalid input syntax for type vector: "[1,]" -LINE 1: SELECT '[1,]'::vector; - ^ -SELECT '[1a]'::vector; -ERROR: invalid input syntax for type vector: "[1a]" -LINE 1: SELECT '[1a]'::vector; - ^ -SELECT '[1,,3]'::vector; -ERROR: invalid input syntax for type vector: "[1,,3]" -LINE 1: SELECT '[1,,3]'::vector; - ^ -SELECT '[1, ,3]'::vector; -ERROR: invalid input syntax for type vector: "[1, ,3]" -LINE 1: SELECT '[1, ,3]'::vector; - ^ -SELECT '[1,2,3]'::vector(3); - vector ---------- - [1,2,3] -(1 row) - -SELECT '[1,2,3]'::vector(2); -ERROR: expected 2 dimensions, not 3 -SELECT '[1,2,3]'::vector(3, 2); -ERROR: invalid type modifier -LINE 1: SELECT '[1,2,3]'::vector(3, 2); - ^ -SELECT '[1,2,3]'::vector('a'); -ERROR: invalid input syntax for type integer: "a" -LINE 1: SELECT '[1,2,3]'::vector('a'); - ^ -SELECT '[1,2,3]'::vector(0); -ERROR: dimensions for type vector must be at least 1 -LINE 1: SELECT '[1,2,3]'::vector(0); - ^ -SELECT '[1,2,3]'::vector(16001); -ERROR: dimensions for type vector cannot exceed 16000 -LINE 1: SELECT '[1,2,3]'::vector(16001); - ^ -SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::vector[]); - unnest ---------- - [1,2,3] - [4,5,6] -(2 rows) - -SELECT '{"[1,2,3]"}'::vector(2)[]; -ERROR: expected 2 dimensions, not 3 diff --git a/test/sql/bit_functions.sql b/test/sql/bit.sql similarity index 100% rename from test/sql/bit_functions.sql rename to test/sql/bit.sql diff --git a/test/sql/halfvec_functions.sql b/test/sql/halfvec.sql similarity index 81% rename from test/sql/halfvec_functions.sql rename to test/sql/halfvec.sql index efd005a..1a3fd1b 100644 --- a/test/sql/halfvec_functions.sql +++ b/test/sql/halfvec.sql @@ -1,3 +1,42 @@ +SELECT '[1,2,3]'::halfvec; +SELECT '[-1,-2,-3]'::halfvec; +SELECT '[1.,2.,3.]'::halfvec; +SELECT ' [ 1, 2 , 3 ] '::halfvec; +SELECT '[1.23456]'::halfvec; +SELECT '[hello,1]'::halfvec; +SELECT '[NaN,1]'::halfvec; +SELECT '[Infinity,1]'::halfvec; +SELECT '[-Infinity,1]'::halfvec; +SELECT '[65519,-65519]'::halfvec; +SELECT '[65520,-65520]'::halfvec; +SELECT '[1e-8,-1e-8]'::halfvec; +SELECT '[4e38,1]'::halfvec; +SELECT '[1e-46,1]'::halfvec; +SELECT '[1,2,3'::halfvec; +SELECT '[1,2,3]9'::halfvec; +SELECT '1,2,3'::halfvec; +SELECT ''::halfvec; +SELECT '['::halfvec; +SELECT '[ '::halfvec; +SELECT '[,'::halfvec; +SELECT '[]'::halfvec; +SELECT '[ ]'::halfvec; +SELECT '[,]'::halfvec; +SELECT '[1,]'::halfvec; +SELECT '[1a]'::halfvec; +SELECT '[1,,3]'::halfvec; +SELECT '[1, ,3]'::halfvec; + +SELECT '[1,2,3]'::halfvec(3); +SELECT '[1,2,3]'::halfvec(2); +SELECT '[1,2,3]'::halfvec(3, 2); +SELECT '[1,2,3]'::halfvec('a'); +SELECT '[1,2,3]'::halfvec(0); +SELECT '[1,2,3]'::halfvec(16001); + +SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::halfvec[]); +SELECT '{"[1,2,3]"}'::halfvec(2)[]; + SELECT '[1,2,3]'::halfvec + '[4,5,6]'; SELECT '[65519]'::halfvec + '[65519]'; SELECT '[1,2]'::halfvec + '[3]'; diff --git a/test/sql/halfvec_input.sql b/test/sql/halfvec_input.sql deleted file mode 100644 index a11b59d..0000000 --- a/test/sql/halfvec_input.sql +++ /dev/null @@ -1,38 +0,0 @@ -SELECT '[1,2,3]'::halfvec; -SELECT '[-1,-2,-3]'::halfvec; -SELECT '[1.,2.,3.]'::halfvec; -SELECT ' [ 1, 2 , 3 ] '::halfvec; -SELECT '[1.23456]'::halfvec; -SELECT '[hello,1]'::halfvec; -SELECT '[NaN,1]'::halfvec; -SELECT '[Infinity,1]'::halfvec; -SELECT '[-Infinity,1]'::halfvec; -SELECT '[65519,-65519]'::halfvec; -SELECT '[65520,-65520]'::halfvec; -SELECT '[1e-8,-1e-8]'::halfvec; -SELECT '[4e38,1]'::halfvec; -SELECT '[1e-46,1]'::halfvec; -SELECT '[1,2,3'::halfvec; -SELECT '[1,2,3]9'::halfvec; -SELECT '1,2,3'::halfvec; -SELECT ''::halfvec; -SELECT '['::halfvec; -SELECT '[ '::halfvec; -SELECT '[,'::halfvec; -SELECT '[]'::halfvec; -SELECT '[ ]'::halfvec; -SELECT '[,]'::halfvec; -SELECT '[1,]'::halfvec; -SELECT '[1a]'::halfvec; -SELECT '[1,,3]'::halfvec; -SELECT '[1, ,3]'::halfvec; - -SELECT '[1,2,3]'::halfvec(3); -SELECT '[1,2,3]'::halfvec(2); -SELECT '[1,2,3]'::halfvec(3, 2); -SELECT '[1,2,3]'::halfvec('a'); -SELECT '[1,2,3]'::halfvec(0); -SELECT '[1,2,3]'::halfvec(16001); - -SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::halfvec[]); -SELECT '{"[1,2,3]"}'::halfvec(2)[]; diff --git a/test/sql/sparsevec_functions.sql b/test/sql/sparsevec.sql similarity index 66% rename from test/sql/sparsevec_functions.sql rename to test/sql/sparsevec.sql index 813bd29..2e1136b 100644 --- a/test/sql/sparsevec_functions.sql +++ b/test/sql/sparsevec.sql @@ -1,3 +1,62 @@ +SELECT '{1:1.5,3:3.5}/5'::sparsevec; +SELECT '{1:-2,3:-4}/5'::sparsevec; +SELECT '{1:2.,3:4.}/5'::sparsevec; +SELECT ' { 1 : 1.5 , 3 : 3.5 } / 5 '::sparsevec; +SELECT '{1:1.23456}/1'::sparsevec; +SELECT '{1:hello,2:1}/2'::sparsevec; +SELECT '{1:NaN,2:1}/2'::sparsevec; +SELECT '{1:Infinity,2:1}/2'::sparsevec; +SELECT '{1:-Infinity,2:1}/2'::sparsevec; +SELECT '{1:1.5e38,2:-1.5e38}/2'::sparsevec; +SELECT '{1:1.5e+38,2:-1.5e+38}/2'::sparsevec; +SELECT '{1:1.5e-38,2:-1.5e-38}/2'::sparsevec; +SELECT '{1:4e38,2:1}/2'::sparsevec; +SELECT '{1:-4e38,2:1}/2'::sparsevec; +SELECT '{1:1e-46,2:1}/2'::sparsevec; +SELECT '{1:-1e-46,2:1}/2'::sparsevec; +SELECT ''::sparsevec; +SELECT '{'::sparsevec; +SELECT '{ '::sparsevec; +SELECT '{:'::sparsevec; +SELECT '{,'::sparsevec; +SELECT '{}'::sparsevec; +SELECT '{}/'::sparsevec; +SELECT '{}/1'::sparsevec; +SELECT '{}/1a'::sparsevec; +SELECT '{ }/1'::sparsevec; +SELECT '{:}/1'::sparsevec; +SELECT '{,}/1'::sparsevec; +SELECT '{1,}/1'::sparsevec; +SELECT '{:1}/1'::sparsevec; +SELECT '{1:}/1'::sparsevec; +SELECT '{1a:1}/1'::sparsevec; +SELECT '{1:1a}/1'::sparsevec; +SELECT '{1:1,}/1'::sparsevec; +SELECT '{1:0,2:1,3:0}/3'::sparsevec; +SELECT '{2:1,1:1}/2'::sparsevec; +SELECT '{1:1,1:1}/2'::sparsevec; +SELECT '{1:1,2:1,1:1}/2'::sparsevec; +SELECT '{}/5'::sparsevec; +SELECT '{}/-1'::sparsevec; +SELECT '{}/1000000001'::sparsevec; +SELECT '{}/2147483648'::sparsevec; +SELECT '{}/-2147483649'::sparsevec; +SELECT '{}/9223372036854775808'::sparsevec; +SELECT '{}/-9223372036854775809'::sparsevec; +SELECT '{2147483647:1}/1'::sparsevec; +SELECT '{2147483648:1}/1'::sparsevec; +SELECT '{-2147483648:1}/1'::sparsevec; +SELECT '{-2147483649:1}/1'::sparsevec; +SELECT '{0:1}/1'::sparsevec; +SELECT '{2:1}/1'::sparsevec; + +SELECT '{}/3'::sparsevec(3); +SELECT '{}/3'::sparsevec(2); +SELECT '{}/3'::sparsevec(3, 2); +SELECT '{}/3'::sparsevec('a'); +SELECT '{}/3'::sparsevec(0); +SELECT '{}/3'::sparsevec(1000000001); + SELECT '{1:1,2:2,3:3}/3'::sparsevec < '{1:1,2:2,3:3}/3'; SELECT '{1:1,2:2,3:3}/3'::sparsevec < '{1:1,2:2}/2'; SELECT '{1:1,2:2,3:3}/3'::sparsevec <= '{1:1,2:2,3:3}/3'; diff --git a/test/sql/sparsevec_input.sql b/test/sql/sparsevec_input.sql deleted file mode 100644 index f5419ac..0000000 --- a/test/sql/sparsevec_input.sql +++ /dev/null @@ -1,58 +0,0 @@ -SELECT '{1:1.5,3:3.5}/5'::sparsevec; -SELECT '{1:-2,3:-4}/5'::sparsevec; -SELECT '{1:2.,3:4.}/5'::sparsevec; -SELECT ' { 1 : 1.5 , 3 : 3.5 } / 5 '::sparsevec; -SELECT '{1:1.23456}/1'::sparsevec; -SELECT '{1:hello,2:1}/2'::sparsevec; -SELECT '{1:NaN,2:1}/2'::sparsevec; -SELECT '{1:Infinity,2:1}/2'::sparsevec; -SELECT '{1:-Infinity,2:1}/2'::sparsevec; -SELECT '{1:1.5e38,2:-1.5e38}/2'::sparsevec; -SELECT '{1:1.5e+38,2:-1.5e+38}/2'::sparsevec; -SELECT '{1:1.5e-38,2:-1.5e-38}/2'::sparsevec; -SELECT '{1:4e38,2:1}/2'::sparsevec; -SELECT '{1:-4e38,2:1}/2'::sparsevec; -SELECT '{1:1e-46,2:1}/2'::sparsevec; -SELECT '{1:-1e-46,2:1}/2'::sparsevec; -SELECT ''::sparsevec; -SELECT '{'::sparsevec; -SELECT '{ '::sparsevec; -SELECT '{:'::sparsevec; -SELECT '{,'::sparsevec; -SELECT '{}'::sparsevec; -SELECT '{}/'::sparsevec; -SELECT '{}/1'::sparsevec; -SELECT '{}/1a'::sparsevec; -SELECT '{ }/1'::sparsevec; -SELECT '{:}/1'::sparsevec; -SELECT '{,}/1'::sparsevec; -SELECT '{1,}/1'::sparsevec; -SELECT '{:1}/1'::sparsevec; -SELECT '{1:}/1'::sparsevec; -SELECT '{1a:1}/1'::sparsevec; -SELECT '{1:1a}/1'::sparsevec; -SELECT '{1:1,}/1'::sparsevec; -SELECT '{1:0,2:1,3:0}/3'::sparsevec; -SELECT '{2:1,1:1}/2'::sparsevec; -SELECT '{1:1,1:1}/2'::sparsevec; -SELECT '{1:1,2:1,1:1}/2'::sparsevec; -SELECT '{}/5'::sparsevec; -SELECT '{}/-1'::sparsevec; -SELECT '{}/1000000001'::sparsevec; -SELECT '{}/2147483648'::sparsevec; -SELECT '{}/-2147483649'::sparsevec; -SELECT '{}/9223372036854775808'::sparsevec; -SELECT '{}/-9223372036854775809'::sparsevec; -SELECT '{2147483647:1}/1'::sparsevec; -SELECT '{2147483648:1}/1'::sparsevec; -SELECT '{-2147483648:1}/1'::sparsevec; -SELECT '{-2147483649:1}/1'::sparsevec; -SELECT '{0:1}/1'::sparsevec; -SELECT '{2:1}/1'::sparsevec; - -SELECT '{}/3'::sparsevec(3); -SELECT '{}/3'::sparsevec(2); -SELECT '{}/3'::sparsevec(3, 2); -SELECT '{}/3'::sparsevec('a'); -SELECT '{}/3'::sparsevec(0); -SELECT '{}/3'::sparsevec(1000000001); diff --git a/test/sql/vector_functions.sql b/test/sql/vector.sql similarity index 80% rename from test/sql/vector_functions.sql rename to test/sql/vector.sql index 7b4de45..088b040 100644 --- a/test/sql/vector_functions.sql +++ b/test/sql/vector.sql @@ -1,3 +1,45 @@ +SELECT '[1,2,3]'::vector; +SELECT '[-1,-2,-3]'::vector; +SELECT '[1.,2.,3.]'::vector; +SELECT ' [ 1, 2 , 3 ] '::vector; +SELECT '[1.23456]'::vector; +SELECT '[hello,1]'::vector; +SELECT '[NaN,1]'::vector; +SELECT '[Infinity,1]'::vector; +SELECT '[-Infinity,1]'::vector; +SELECT '[1.5e38,-1.5e38]'::vector; +SELECT '[1.5e+38,-1.5e+38]'::vector; +SELECT '[1.5e-38,-1.5e-38]'::vector; +SELECT '[4e38,1]'::vector; +SELECT '[-4e38,1]'::vector; +SELECT '[1e-46,1]'::vector; +SELECT '[-1e-46,1]'::vector; +SELECT '[1,2,3'::vector; +SELECT '[1,2,3]9'::vector; +SELECT '1,2,3'::vector; +SELECT ''::vector; +SELECT '['::vector; +SELECT '[ '::vector; +SELECT '[,'::vector; +SELECT '[]'::vector; +SELECT '[ ]'::vector; +SELECT '[,]'::vector; +SELECT '[1,]'::vector; +SELECT '[1a]'::vector; +SELECT '[1,,3]'::vector; +SELECT '[1, ,3]'::vector; + +SELECT '[1,2,3]'::vector(3); +SELECT '[1,2,3]'::vector(2); +SELECT '[1,2,3]'::vector(3, 2); +SELECT '[1,2,3]'::vector('a'); +SELECT '[1,2,3]'::vector(0); +SELECT '[1,2,3]'::vector(16001); + +SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::vector[]); +SELECT '{"[1,2,3]"}'::vector(2)[]; + + SELECT '[1,2,3]'::vector + '[4,5,6]'; SELECT '[3e38]'::vector + '[3e38]'; SELECT '[1,2]'::vector + '[3]'; diff --git a/test/sql/vector_input.sql b/test/sql/vector_input.sql deleted file mode 100644 index 3403e98..0000000 --- a/test/sql/vector_input.sql +++ /dev/null @@ -1,40 +0,0 @@ -SELECT '[1,2,3]'::vector; -SELECT '[-1,-2,-3]'::vector; -SELECT '[1.,2.,3.]'::vector; -SELECT ' [ 1, 2 , 3 ] '::vector; -SELECT '[1.23456]'::vector; -SELECT '[hello,1]'::vector; -SELECT '[NaN,1]'::vector; -SELECT '[Infinity,1]'::vector; -SELECT '[-Infinity,1]'::vector; -SELECT '[1.5e38,-1.5e38]'::vector; -SELECT '[1.5e+38,-1.5e+38]'::vector; -SELECT '[1.5e-38,-1.5e-38]'::vector; -SELECT '[4e38,1]'::vector; -SELECT '[-4e38,1]'::vector; -SELECT '[1e-46,1]'::vector; -SELECT '[-1e-46,1]'::vector; -SELECT '[1,2,3'::vector; -SELECT '[1,2,3]9'::vector; -SELECT '1,2,3'::vector; -SELECT ''::vector; -SELECT '['::vector; -SELECT '[ '::vector; -SELECT '[,'::vector; -SELECT '[]'::vector; -SELECT '[ ]'::vector; -SELECT '[,]'::vector; -SELECT '[1,]'::vector; -SELECT '[1a]'::vector; -SELECT '[1,,3]'::vector; -SELECT '[1, ,3]'::vector; - -SELECT '[1,2,3]'::vector(3); -SELECT '[1,2,3]'::vector(2); -SELECT '[1,2,3]'::vector(3, 2); -SELECT '[1,2,3]'::vector('a'); -SELECT '[1,2,3]'::vector(0); -SELECT '[1,2,3]'::vector(16001); - -SELECT unnest('{"[1,2,3]", "[4,5,6]"}'::vector[]); -SELECT '{"[1,2,3]"}'::vector(2)[];