use std::path::{Path, PathBuf};
#[macro_use]
extern crate bencher;
use bencher::{black_box, Bencher};
use serde_json_borrow::Value;
fn data_dir() -> PathBuf {
Path::new(env!("CARGO_MANIFEST_DIR")).join("../../data/json")
}
fn data(b: &mut Bencher) {
parse(b, "data.json")
}
fn canada(b: &mut Bencher) {
parse(b, "canada.json")
}
fn apache(b: &mut Bencher) {
parse(b, "apache-builds.json")
}
fn data_xl(b: &mut Bencher) {
parse(b, "data-xl.json")
}
fn twitter(b: &mut Bencher) {
parse(b, "twitter.json")
}
fn citm_catalog(b: &mut Bencher) {
parse(b, "citm_catalog.json")
}
fn parse(b: &mut Bencher, filepath: &str) {
let filepath = data_dir().join(filepath);
let data = std::fs::read_to_string(&filepath)
.unwrap_or_else(|e| panic!("Failed to read {}: {}", filepath.display(), e));
b.bytes = data.len() as u64;
b.iter(|| {
let buf = black_box(data.as_str());
serde_json::from_str::<Value>(buf).unwrap()
})
}
benchmark_group!(
serde_json_borrow,
data,
canada,
apache,
data_xl,
twitter,
citm_catalog
);
benchmark_main!(serde_json_borrow);