#[path = "common/harness.rs"]
mod harness;
use harness::TestHarness;
use macrame::prelude::*;
const SQLITE_DEFAULT: i64 = -2000;
async fn cache_size(conn: &libsql::Connection) -> i64 {
let mut rows = conn.query("PRAGMA cache_size", ()).await.unwrap();
rows.next().await.unwrap().unwrap().get(0).unwrap()
}
#[tokio::test]
async fn the_default_tuning_leaves_the_cache_where_sqlite_put_it() {
let harness = TestHarness::new();
let db = Database::open_tuned(
&harness.db_path,
Tuning {
cadence: CadencePolicy::Disabled,
..Default::default()
},
)
.await
.unwrap();
assert_eq!(
cache_size(db.read_conn()).await,
SQLITE_DEFAULT,
"a default Tuning changed the page cache; the default is SQLite's, and \
restating it here would freeze a number this crate did not choose"
);
db.close().await.unwrap();
}
#[tokio::test]
async fn the_reader_gets_the_reader_value_and_not_the_writer_value() {
let harness = TestHarness::new();
let db = Database::open_tuned(
&harness.db_path,
Tuning {
cadence: CadencePolicy::Disabled,
writer_cache_size: Some(-64_000),
reader_cache_size: Some(-8_000),
..Default::default()
},
)
.await
.unwrap();
let seen = cache_size(db.read_conn()).await;
assert_eq!(
seen, -8_000,
"the shared reader reports {seen}; -64000 means the writer's value was \
applied to both connections, and -2000 means the reader's never ran"
);
db.close().await.unwrap();
}
#[tokio::test]
async fn a_positive_value_is_passed_through_as_pages() {
let harness = TestHarness::new();
let db = Database::open_tuned(
&harness.db_path,
Tuning {
cadence: CadencePolicy::Disabled,
reader_cache_size: Some(4_000),
..Default::default()
},
)
.await
.unwrap();
assert_eq!(
cache_size(db.read_conn()).await,
4_000,
"a positive cache_size was reinterpreted; SQLite's units are the units"
);
db.close().await.unwrap();
}
#[tokio::test]
async fn a_tiny_cache_is_a_performance_choice_and_not_a_correctness_one() {
let harness = TestHarness::new();
let db = Database::open_tuned(
&harness.db_path,
Tuning {
cadence: CadencePolicy::Disabled,
writer_cache_size: Some(10),
reader_cache_size: Some(10),
..Default::default()
},
)
.await
.unwrap();
let concepts: Vec<_> = (0..200)
.map(|i| {
ConceptUpsert::new(format!("c{i}"), format!("Concept {i}"))
.content("x".repeat(512))
.valid_from("2026-01-01T00:00:00.000000Z")
})
.collect();
db.write_concepts(concepts).await.unwrap();
let mut rows = db
.read_conn()
.query("SELECT COUNT(*) FROM concepts", ())
.await
.unwrap();
let n: i64 = rows.next().await.unwrap().unwrap().get(0).unwrap();
assert_eq!(n, 200);
db.close().await.unwrap();
}