use criterion::{Criterion, criterion_group, criterion_main};
use df_derive::ToDataFrame;
#[path = "support/mod.rs"]
mod bench_support;
#[path = "../tests/common.rs"]
mod core;
use crate::bench_support::configure_criterion;
use crate::core::dataframe::ToDataFrameVec;
const N_HOSTS: usize = 10_000;
#[derive(ToDataFrame, Clone)]
struct Metric {
name: String,
value: f64,
}
#[derive(ToDataFrame, Clone)]
struct Host {
id: u64,
metrics: Vec<Metric>,
}
fn generate_hosts() -> Vec<Host> {
(0..N_HOSTS)
.map(|i| Host {
id: i as u64,
metrics: Vec::new(),
})
.collect()
}
fn benchmark_empty_nested_vec(c: &mut Criterion) {
let hosts = generate_hosts();
c.bench_function("empty_nested_vec_conversion", |b| {
b.iter(|| {
let df = std::hint::black_box(&hosts).to_dataframe().unwrap();
std::hint::black_box(df)
});
});
}
criterion_group! {
name = benches;
config = configure_criterion();
targets = benchmark_empty_nested_vec
}
criterion_main!(benches);