1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00
Files
sqlite/ext/vec1/test/vec1func.test
dan e32fbe0c23 Import vec1 sources into directory ext/vec1/ of this project.
FossilOrigin-Name: 3a0876d973868be7b6f4156a434cd09098c7ab1abdc7f0ef4f3d12a03de68b24
2026-09-30 14:49:16 +00:00

116 lines
3.3 KiB
Plaintext

# 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 vec1func
vec1_load db
do_execsql_test 1.0 {
SELECT vec1_to_json(
vec1_from_json('[1.0, 2.0, 3.0, 4.0]')
)
} {{[1,2,3,4]}}
do_execsql_test 1.1 {
SELECT quote(vec1_from_json('[1.0, 2.0, 3.0, 4.0]'))
} {X'0000803F000000400000404000008040'}
do_catchsql_test 1.2 {
SELECT vec1_to_json(X'')
} {1 {vec1: invalid vector argument}}
do_catchsql_test 1.3 {
SELECT vec1_to_json(X'0000803F000000400000404000008040FF')
} {1 {vec1: invalid vector argument}}
do_execsql_test 1.4 {
SELECT vec1_to_json(X'0000803F000000400000404000008040')
} {[1,2,3,4]}
do_execsql_test 1.5 {
SELECT vec1_to_json_i(X'0000803F000000400000404000008040')
} {[1065353216,1073741824,1077936128,1082130432]}
#-------------------------------------------------------------------------
foreach {tn in out} {
1 " [1,2,3] " "0 {{[1,2,3]}}"
2 " [ 1 , 2 , 3 ] " "0 {{[1,2,3]}}"
3 " {1,2,3} " "1 {error parsing json vector}"
4 " [1,2,3" "1 {error parsing json vector}"
5 " [1,2, ]" "1 {error parsing json vector}"
6 " [1,2,3] x " "1 {error parsing json vector}"
} {
do_catchsql_test 2.$tn {
SELECT vec1_to_json( vec1_from_json($in) )
} $out
}
#-------------------------------------------------------------------------
do_execsql_test 3.0 {
SELECT vec1_cos_distance(random_vector(9), random_vector(9))
BETWEEN 0.0 AND 2.0
} {1}
do_catchsql_test 3.1 {
SELECT vec1_cos_distance(random_vector(9), random_vector(8))
} {1 {vec1_cos_distance: bad arguments}}
do_catchsql_test 3.2 {
SELECT vec1_cos_distance(randomblob(37), randomblob(37))
} {1 {vec1_cos_distance: bad arguments}}
do_catchsql_test 3.3 {
SELECT vec1_l2_distance(random_vector(9), random_vector(8))
} {1 {vec1_l2_distance: bad arguments}}
do_catchsql_test 3.4 {
SELECT vec1_l2_distance(randomblob(37), randomblob(37))
} {1 {vec1_l2_distance: bad arguments}}
#-------------------------------------------------------------------------
# Test that vectors of zero magnitude are considered orthogonal to all
# others, including itself.
do_execsql_test 4.0 {
SELECT vec1_cos_distance(random_vector(9), zeroblob(4*9));
} {1.0}
do_execsql_test 4.1 {
SELECT vec1_cos_distance(zeroblob(4*9), random_vector(9));
} {1.0}
#-------------------------------------------------------------------------
# Test that non-blob arguments are errors.
#
foreach {tn a2 bErr} {
0 { (X'12345678', X'12345678') } 0
1 { (X'12345678', '12345678') } 1
2 { ('12345678', '12345678') } 1
3 { ('12345678', X'12345678') } 1
} {
do_test 5.$tn.1 {
lindex [catchsql "SELECT vec1_l2_distance $a2"] 0
} $bErr
do_test 5.$tn.2 {
lindex [catchsql "SELECT vec1_cos_distance $a2"] 0
} $bErr
}
#-------------------------------------------------------------------------
#
do_execsql_test 6.0 { SELECT vec1_from_json(NULL) } {{}}
do_execsql_test 6.1 { SELECT vec1_from_json(NULL) IS NULL } {1}
finish_test