in mdb_shard/src/set_operations.rs [478:536]
fn test_operations(mem_shard_1: &MDBInMemoryShard, mem_shard_2: &MDBInMemoryShard) -> Result<()> {
let disk_shard_1 = convert_to_file(mem_shard_1)?;
let disk_shard_2 = convert_to_file(mem_shard_2)?;
verify_mdb_shards_match(mem_shard_1, Cursor::new(&disk_shard_1))?;
verify_mdb_shards_match(mem_shard_2, Cursor::new(&disk_shard_2))?;
// Now write these out to disk to verify them
let tmp_dir = TempDir::with_prefix("gitxet_shard_set_test")?;
let shard_path_1 = tmp_dir.path().join("shard_1.mdb");
let shard_path_2 = tmp_dir.path().join("shard_2.mdb");
std::fs::OpenOptions::new()
.write(true)
.create(true)
.truncate(true)
.open(&shard_path_1)?
.write_all(&disk_shard_1[..])?;
std::fs::OpenOptions::new()
.write(true)
.create(true)
.truncate(true)
.open(&shard_path_2)?
.write_all(&disk_shard_2[..])?;
let mut r1 = Cursor::new(&disk_shard_1);
let s1 = MDBShardInfo::load_from_reader(&mut r1)?;
let mut r2 = Cursor::new(&disk_shard_2);
let s2 = MDBShardInfo::load_from_reader(&mut r2)?;
let mem_union = mem_shard_1.union(mem_shard_2)?;
let mut shard_union = Vec::<u8>::new();
shard_set_union(&s1, &mut r1, &s2, &mut r2, &mut shard_union)?;
verify_mdb_shards_match(&mem_union, Cursor::new(&shard_union))?;
let disk_union_path = tmp_dir.path().join("shard_union.mdb");
let (disk_union_hash, _) = shard_file_union(&shard_path_1, &shard_path_2, &disk_union_path)?;
let mut disk_union_reader = BufReader::new(File::open(&disk_union_path)?);
verify_mdb_shards_match(&mem_union, &mut disk_union_reader)?;
assert_eq!(disk_union_hash, compute_data_hash(&shard_union[..]));
let mem_difference = mem_shard_1.difference(mem_shard_2)?;
let mut shard_difference = Vec::<u8>::new();
shard_set_difference(&s1, &mut r1, &s2, &mut r2, &mut shard_difference)?;
verify_mdb_shards_match(&mem_difference, Cursor::new(&shard_difference))?;
let disk_difference_path = tmp_dir.path().join("shard_difference.mdb");
let (disk_difference_hash, _) = shard_file_difference(&shard_path_1, &shard_path_2, &disk_difference_path)?;
let mut disk_difference_reader = BufReader::new(File::open(&disk_difference_path)?);
verify_mdb_shards_match(&mem_difference, &mut disk_difference_reader)?;
assert_eq!(disk_difference_hash, compute_data_hash(&shard_difference[..]));
Ok(())
}