Skip to content

Commit 9fbd2d0

Browse files
authored
Add basic tests for sqlean extensions in extensions.rs(Update extensions.rs)
Add test functions for Sqlean extensions (vss0, math0, fuzzy0, stats0) - Added tests to extensions.rs for the following Sqlean extensions: - vss0: Vector similarity search - math0: Mathematical functions (e.g., sin(PI / 2)) - fuzzy0: String distance (e.g., Levenshtein distance) - stats0: Statistical operations (e.g., calculating averages) - Tests include creating sample tables, executing relevant SQL queries, and verifying the functionality of each extension.
1 parent 9e1f196 commit 9fbd2d0

1 file changed

Lines changed: 48 additions & 5 deletions

File tree

libsql-sqlite3/test/rust_suite/src/extensions.rs

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,51 @@ fn test_sqlite_vss() {
1111
conn.execute("CREATE VIRTUAL TABLE IF NOT EXISTS vss_demo USING vss0(a(2))", ())
1212
.unwrap();
1313
conn.execute("INSERT INTO vss_demo(rowid, a) VALUES (1, '[1.0, 2.0]'), (2, '[2.0, 2.0]'), (3, '[3.0, 2.0]')", ()).unwrap();
14-
conn.execute(
15-
"SELECT rowid, distance FROM vss_demo WHERE vss_search(?, ?) LIMIT 3",
16-
params![1.0, 2.0],
17-
).unwrap();
18-
}
14+
15+
let mut stmt = conn.prepare("SELECT rowid, distance FROM vss_demo WHERE vss_search(?, ?) LIMIT 3").unwrap();
16+
let mut rows = stmt.query(params![1.0, 2.0]).unwrap();
17+
while let Some(row) = rows.next().unwrap() {
18+
let rowid: i32 = row.get(0).unwrap();
19+
let distance: f64 = row.get(1).unwrap();
20+
println!("Row ID: {}, Distance: {}", rowid, distance);
21+
}
22+
}
23+
24+
#[test]
25+
fn test_sqlite_math() {
26+
let conn = Connection::open_in_memory().unwrap();
27+
unsafe {
28+
let _guard = LoadExtensionGuard::new(&conn).unwrap();
29+
conn.load_extension("src/math0", None).unwrap();
30+
}
31+
32+
let result: f64 = conn.query_row("SELECT sin(PI() / 2)", [], |row| row.get(0)).unwrap();
33+
assert!((result - 1.0).abs() < 1e-9, "Expected sin(PI/2) to be close to 1.0");
34+
}
35+
36+
#[test]
37+
fn test_sqlite_fuzzy() {
38+
let conn = Connection::open_in_memory().unwrap();
39+
unsafe {
40+
let _guard = LoadExtensionGuard::new(&conn).unwrap();
41+
conn.load_extension("src/fuzzy0", None).unwrap();
42+
}
43+
44+
let result: i32 = conn.query_row("SELECT levenshtein('kitten', 'sitting')", [], |row| row.get(0)).unwrap();
45+
assert_eq!(result, 3, "Expected levenshtein distance between 'kitten' and 'sitting' to be 3");
46+
}
47+
48+
#[test]
49+
fn test_sqlite_stats() {
50+
let conn = Connection::open_in_memory().unwrap();
51+
unsafe {
52+
let _guard = LoadExtensionGuard::new(&conn).unwrap();
53+
conn.load_extension("src/stats0", None).unwrap();
54+
}
55+
56+
conn.execute("CREATE TABLE data(value REAL)", ()).unwrap();
57+
conn.execute("INSERT INTO data(value) VALUES (1.0), (2.0), (3.0), (4.0), (5.0)", ()).unwrap();
58+
59+
let avg: f64 = conn.query_row("SELECT avg(value) FROM data", [], |row| row.get(0)).unwrap();
60+
assert!((avg - 3.0).abs() < 1e-9, "Expected average of values 1.0 to 5.0 to be 3.0");
61+
}

0 commit comments

Comments
 (0)