in merkledb/src/tests.rs [195:236]
fn test_db_union() {
let mut mdb = MerkleMemDB::default();
let f1hash: MerkleHash;
let h1 = compute_data_hash("hello world".as_bytes());
let h2 = compute_data_hash("pikachu".as_bytes());
{
let chunks = vec![ChunkInfo { hash: h1, length: 11 }, ChunkInfo { hash: h2, length: 7 }];
let mut staging = mdb.start_insertion_staging();
mdb.add_file(&mut staging, &chunks);
f1hash = *mdb.finalize(staging).hash();
}
let h3 = compute_data_hash("poo".as_bytes());
let mut mdb2 = MerkleMemDB::default();
let f2hash: MerkleHash;
{
let chunks = vec![ChunkInfo { hash: h1, length: 11 }, ChunkInfo { hash: h3, length: 3 }];
let mut staging = mdb2.start_insertion_staging();
mdb2.add_file(&mut staging, &chunks);
f2hash = *mdb2.finalize(staging).hash();
}
mdb.union_with(&mdb2);
mdb.union_finalize().unwrap();
// file 1 node
{
let nodes = mdb.find_all_leaves(&mdb.find_node(&f1hash).unwrap()).unwrap();
assert_eq!(nodes.len(), 2);
assert_eq!(*nodes[0].hash(), h1);
assert_eq!(*nodes[1].hash(), h2);
}
// file 2 nodes
{
let nodes = mdb.find_all_leaves(&mdb.find_node(&f2hash).unwrap()).unwrap();
assert_eq!(nodes.len(), 2);
assert_eq!(*nodes[0].hash(), h1);
assert_eq!(*nodes[1].hash(), h3);
}
assert!(mdb.all_invariant_checks());
}