#![cfg(not(target_arch = "wasm32"))]
use minigraf::{Minigraf, QueryResult};
use std::path::PathBuf;
fn tmp(tag: &str) -> PathBuf {
std::env::temp_dir().join(format!("minigraf_compat_{tag}.graph"))
}
fn cleanup(path: &PathBuf) {
let _ = std::fs::remove_file(path);
let _ = std::fs::remove_file(path.with_extension("graph.wal"));
}
#[test]
fn native_raw_page_bytes_round_trip() {
let src = tmp("src");
let dst = tmp("dst");
cleanup(&src);
cleanup(&dst);
{
let db = Minigraf::open(&src).expect("open src");
db.execute(r#"(transact [[:alice :name "Alice"]])"#)
.expect("transact name");
db.execute("(transact [[:alice :age 30]])")
.expect("transact age");
db.checkpoint().expect("checkpoint");
}
let bytes = std::fs::read(&src).expect("read src");
std::fs::write(&dst, &bytes).expect("write dst");
let db2 = Minigraf::open(&dst).expect("open dst");
let r = db2
.execute("(query [:find ?name :where [?e :name ?name]])")
.expect("query name");
match r {
QueryResult::QueryResults { results, .. } => {
assert_eq!(results.len(), 1, "expected 1 name result");
}
_ => panic!("expected QueryResults for name query"),
}
let r2 = db2
.execute("(query [:find ?age :where [?e :age ?age]])")
.expect("query age");
match r2 {
QueryResult::QueryResults { results, .. } => {
assert_eq!(results.len(), 1, "expected 1 age result");
}
_ => panic!("expected QueryResults for age query"),
}
cleanup(&src);
cleanup(&dst);
}
#[test]
fn fixture_readable_by_native() {
let fixture: &[u8] = include_bytes!("fixtures/compat.graph");
let path = tmp("fixture");
cleanup(&path);
std::fs::write(&path, fixture).expect("write fixture");
let db = Minigraf::open(&path).expect("open fixture");
let r = db
.execute("(query [:find ?name :where [?e :name ?name]])")
.expect("query name");
match r {
QueryResult::QueryResults { results, .. } => {
assert_eq!(results.len(), 1, "expected 1 name result from fixture");
}
_ => panic!("expected QueryResults for name query"),
}
let r2 = db
.execute("(query [:find ?age :where [?e :age ?age]])")
.expect("query age");
match r2 {
QueryResult::QueryResults { results, .. } => {
assert_eq!(results.len(), 1, "expected 1 age result from fixture");
}
_ => panic!("expected QueryResults for age query"),
}
cleanup(&path);
}