extern crate std;
use crate::schema::SimpleTable;
use crate::testing::{byte_diff_report, session_changeset_and_patchset};
use crate::{DiffSetBuilder, PatchsetFormat};
use alloc::string::String;
use alloc::vec::Vec;
pub fn run_differential_test(schemas: &[SimpleTable], create_sqls: &[&str], dml_sqls: &[&str]) {
let mut our_patchset_builder: DiffSetBuilder<PatchsetFormat, SimpleTable, String, Vec<u8>> =
DiffSetBuilder::default();
for schema in schemas {
our_patchset_builder.add_table(schema);
}
for &dml in dml_sqls {
if our_patchset_builder.digest_sql(dml).is_err() {
}
}
let our_patchset = our_patchset_builder.build();
let mut all_sqls: Vec<&str> = Vec::new();
all_sqls.extend_from_slice(create_sqls);
all_sqls.extend_from_slice(dml_sqls);
let (_rusqlite_changeset, rusqlite_patchset) = session_changeset_and_patchset(&all_sqls);
let ps_report = byte_diff_report("patchset", &rusqlite_patchset, &our_patchset);
assert!(
rusqlite_patchset == our_patchset,
"Patchset bit parity failure in differential test!\n\n{ps_report}\n\nSQL:\n{}",
all_sqls.join("\n")
);
}