# 2026-01-17 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # source [file join [file dirname [info script]] vec1_common.tcl] set testprefix vec1ab vec1_load db do_execsql_test 1.0 { CREATE VIRTUAL TABLE v1 USING vec1; WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10000 ) INSERT INTO v1(rowid, vector) SELECT NULL, random_vector(128) FROM s; } foreach {tn training} { 1.1 "flat" 1.2 "{ codesize: 16 }" 1.3 "{ codesize: 16 }" 1.4 "{ codesize: 8 }" 1.5 "{ codesize: 8 , nbucket: 32 }" 1.6 "{ codesize: 16 , nbucket: 32 }" 1.7 "{ codesize: 8 , nbucket: 32 }" } { do_test $tn.1 { if {$training=="flat"} { set T {{index:"flat"}} } else { set T [db one { SELECT vec1_train(vector, $training) FROM v1 WHERE rowid < 1000 }] } set {} {} } {} do_execsql_test $tn.2 { INSERT INTO v1(cmd, vector) VALUES('rebuild', $T); } do_execsql_test $tn.3 { PRAGMA integrity_check } ok db close sqlite3 db test.db vec1_load db do_execsql_test $tn.4 { PRAGMA integrity_check } ok do_execsql_test $tn.5 { SELECT sum(good) FROM ( SELECT rowid IN ( SELECT rowid FROM v1(o.vector, '{ K: 10 }') ) AS good FROM v1 AS o LIMIT 100 ); } {100} } do_execsql_test 2.0 { CREATE VIRTUAL TABLE v2 USING vec1; WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10000 ) INSERT INTO v2(rowid, vector) SELECT 0x3_FFFF_FFFF + i, random_vector(128) FROM s; WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<50 ) INSERT INTO v2(rowid, vector) SELECT i - 0x3_FFFF_FFFF, random_vector(128) FROM s; } do_execsql_test 2.1 { INSERT INTO v2(cmd, vector) VALUES('rebuild', '{index:"flat"}'); } do_execsql_test 2.2 { SELECT sum(good) FROM ( SELECT rowid IN ( SELECT rowid FROM v2(o.vector, '{ K: 10 }') ) AS good FROM v2 AS o LIMIT 100 ); } {100} do_execsql_test 2.3 { INSERT INTO v2(cmd, vector) VALUES('rebuild', ( SELECT vec1_train(vector, '{ codesize: 16 }') FROM ( SELECT vector FROM v2 LIMIT 1000 ) )); } do_execsql_test 2.4 { SELECT sum(good) FROM ( SELECT rowid IN ( SELECT rowid FROM v2(o.vector, '{ K: 10 }') ) AS good FROM v2 AS o LIMIT 100 ); } {100} finish_test