use bencher::{benchmark_group, benchmark_main, Bencher};
use columnar::{Clear, Columnar};
use columnar::bytes::indexed;
fn empty_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![(); 1024]); }
fn option_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![Option::<String>::None; 1024]); }
fn u64_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![0u64; 1024]); }
fn u32x2_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![(0u32,0u32); 1024]); }
fn u8_u64_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![(0u8, 0u64); 512]); }
fn string10_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![format!("grawwwwrr!"); 1024]); }
fn string20_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![format!("grawwwwrr!!!!!!!!!!!"); 512]); }
fn vec_u_s_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![vec![(0u64, format!("grawwwwrr!")); 32]; 32]); }
fn vec_u_vn_s_copy(bencher: &mut Bencher) { _bench_copy(bencher, vec![vec![(0u64, vec![(); 1 << 40], format!("grawwwwrr!")); 32]; 32]); }
fn empty_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![(); 1024]); }
fn option_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![Option::<String>::None; 1024]); }
fn u64_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![0u64; 1024]); }
fn u32x2_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![(0u32,0u32); 1024]); }
fn u8_u64_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![(0u8, 0u64); 512]); }
fn string10_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![format!("grawwwwrr!"); 1024]); }
fn string20_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![format!("grawwwwrr!!!!!!!!!!!"); 512]); }
fn vec_u_s_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![vec![(0u64, format!("grawwwwrr!")); 32]; 32]); }
fn vec_u_vn_s_extend(bencher: &mut Bencher) { _bench_extend(bencher, vec![vec![(0u64, vec![(); 1 << 40], format!("grawwwwrr!")); 32]; 32]); }
fn empty_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![(); 1024]); }
fn option_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![Option::<String>::None; 1024]); }
fn u64_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![0u64; 1024]); }
fn u32x2_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![(0u32,0u32); 1024]); }
fn u8_u64_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![(0u8, 0u64); 512]); }
fn string10_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![format!("grawwwwrr!"); 1024]); }
fn string20_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![format!("grawwwwrr!!!!!!!!!!!"); 512]); }
fn vec_u_s_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![vec![(0u64, format!("grawwwwrr!")); 32]; 32]); }
fn vec_u_vn_s_clone(bencher: &mut Bencher) { _bench_clone(bencher, vec![vec![(0u64, vec![(); 1 << 40], format!("grawwwwrr!")); 32]; 32]); }
fn _bench_copy<T: Columnar+Eq>(bencher: &mut Bencher, record: T) where T::Container : for<'a> columnar::Push<&'a T> {
use columnar::Push;
let mut arena: T::Container = Default::default();
for _ in 0 .. 1024 {
arena.push(&record);
}
use columnar::Borrow;
bencher.bytes = indexed::length_in_bytes(&arena.borrow()) as u64;
arena.clear();
bencher.iter(|| {
arena.clear();
for _ in 0 .. 1024 {
arena.push(&record);
}
});
}
fn _bench_extend<T: Columnar+Eq>(bencher: &mut Bencher, record: T) where T::Container : for<'a> columnar::Push<&'a T> {
use columnar::Push;
let mut arena: T::Container = Default::default();
for _ in 0 .. 1024 {
arena.push(&record);
}
use columnar::{Borrow, Container};
bencher.bytes = indexed::length_in_bytes(&arena.borrow()) as u64;
let arena2 = arena.clone();
bencher.iter(|| {
arena.clear();
for i in 0 .. 1024 {
arena.extend_from_self(arena2.borrow(), i .. i+1)
}
});
}
fn _bench_clone<T: Columnar+Eq+Clone>(bencher: &mut Bencher, record: T) {
let mut arena = Vec::new();
bencher.iter(|| {
arena.clear();
for _ in 0 .. 1024 {
arena.push(record.clone());
}
});
}
benchmark_group!(
clone,
empty_clone,
option_clone,
string10_clone,
string20_clone,
u32x2_clone,
u64_clone,
u8_u64_clone,
vec_u_s_clone,
vec_u_vn_s_clone,
);
benchmark_group!(
extend,
empty_extend,
option_extend,
string10_extend,
string20_extend,
u32x2_extend,
u64_extend,
u8_u64_extend,
vec_u_s_extend,
vec_u_vn_s_extend,
);
benchmark_group!(
copy,
empty_copy,
option_copy,
string10_copy,
string20_copy,
u32x2_copy,
u64_copy,
u8_u64_copy,
vec_u_s_copy,
vec_u_vn_s_copy,
);
benchmark_main!(clone, copy, extend);