use std::{collections::BTreeMap, time::Instant};
use log::info;
use radixdb::RadixTree;
fn do_test() -> anyhow::Result<()> {
let n1 = 2000000u64;
let n2 = 100000u64;
let elems0 = (0..n1)
.map(|i| {
if i % 100000 == 0 {
info!("{}", i);
}
(
i.to_string().as_bytes().to_vec(),
i.to_string().as_bytes().to_vec(),
)
})
.collect::<BTreeMap<_, _>>();
let elems1 = (n1..n1 + n2)
.map(|i| {
if i % 100000 == 0 {
info!("{}", i);
}
(
i.to_string().as_bytes().to_vec(),
i.to_string().as_bytes().to_vec(),
)
})
.collect::<BTreeMap<_, _>>();
let tree0: RadixTree = elems0.iter().collect();
let tree1: RadixTree = elems1.iter().collect();
for _ in 0..100 {
let mut res = tree0.clone();
let t0 = Instant::now();
res.outer_combine_with(&tree1, |a, b| a.set(Some(b)));
info!("bulk union {} {} {} s", n1, n2, t0.elapsed().as_secs_f64());
}
for _ in 0..100 {
let mut res = elems0.clone();
let elems1 = elems1.clone();
let t0 = Instant::now();
for (k, v) in elems1 {
res.insert(k, v);
}
info!(
"BTreeMap union {} {} {} s",
n1,
n2,
t0.elapsed().as_secs_f64()
);
}
Ok(())
}
fn init_logger() {
let _ = env_logger::builder()
.filter_level(log::LevelFilter::max())
.is_test(true)
.try_init();
}
fn browser_compare() -> anyhow::Result<()> {
init_logger();
do_test()
}
fn main() {
browser_compare().unwrap()
}