#!/usr/bin/env tclsh set testdir [file dirname $argv0] source $testdir/tester.tcl do_execsql_test vector-functions-valid { SELECT vector_extract(vector('[]')); SELECT vector_extract(vector(' [ 1 , 2 , 3 ] ')); SELECT vector_extract(vector('[-1000000000000000000]')); } { {[]} {[1,2,3]} {[-1000000000000000000]} } do_execsql_test_on_specific_db {:memory:} vector-insert { CREATE TABLE IF NOT EXISTS vector_test ( id INTEGER PRIMARY KEY, format TEXT NOT NULL, vec_data F32_BLOB(3) -- 3-dimensional vector ); INSERT INTO vector_test (id, format, vec_data) VALUES (2, 'Bracketed_comma_separated', vector('[4.000000,5.000000,6.000000]')); SELECT id, format, vector_extract(vec_data) from vector_test; } {2|Bracketed_comma_separated|[4,5,6]} do_execsql_test_on_specific_db {:memory:} vector-insert { CREATE TABLE IF NOT EXISTS vector_test ( id INTEGER PRIMARY KEY, format TEXT NOT NULL, vec_data F32_BLOB(3) -- 3-dimensional vector ); INSERT INTO vector_test (id, format, vec_data) VALUES (2, 'Bracketed_comma_separated', vector('[4.000000,5.000000,6.000000]')); SELECT id, format, vector_extract(vec_data) from vector_test; } {2|Bracketed_comma_separated|[4,5,6]} do_execsql_test_in_memory_error vector-insert-no-quotes { CREATE TABLE IF NOT EXISTS vector_test ( id INTEGER PRIMARY KEY, format TEXT NOT NULL, vec_data F32_BLOB(3) -- 3-dimensional vector ); INSERT INTO vector_test (id, format, vec_data) VALUES (2, 'Bracketed_comma_separated', vector([4.000000,5.000000,6.000000])); } { × Parse error: no such column: [4.000000,5.000000,6.000000]} do_execsql_test_in_memory_error_content vector-insert-double-quotes { CREATE TABLE IF NOT EXISTS vector_test ( id INTEGER PRIMARY KEY, format TEXT NOT NULL, vec_data F32_BLOB(3) -- 3-dimensional vector ); INSERT INTO vector_test (id, format, vec_data) VALUES (2, 'Bracketed_comma_separated', vector("[4.000000,5.000000,6.000000]")); } {no such column: [4.000000,5.000000,6.000000]} do_execsql_test vector-distance-dot { SELECT vector_distance_dot(vector('[1, 2]'), vector('[3, 4]')); SELECT vector_distance_dot(vector('[1, 0]'), vector('[0, 1]')); SELECT vector_distance_dot(vector('[1, 1]'), vector('[-1, -1]')); SELECT vector_distance_dot(vector('[0.5, 0.5]'), vector('[4.0, 4.0]')); } { -11.0 0.0 2.0 -4.0 } do_execsql_test_on_specific_db {:memory:} vector-distance-dot-table { CREATE TABLE dot_test ( id INTEGER PRIMARY KEY, vec F32_BLOB(2) ); INSERT INTO dot_test (id, vec) VALUES (1, vector('[1, 1]')); INSERT INTO dot_test (id, vec) VALUES (2, vector('[2, 2]')); SELECT vector_distance_dot(vec, vector('[1, 1]')) as dist FROM dot_test ORDER BY dist ASC; } { -4.0 -2.0 }