use std::io::Cursor;
use criterion::{black_box, Criterion};
use nbt as hematite_nbt;
use quartz_nbt::io::Flavor;
pub fn nbt_parse_bigtest(c: &mut Criterion) {
let input = include_bytes!("../../../assets/bigtest.nbt");
c.bench_function("graphite_parse_bigtest", |b| {
b.iter(|| {
let input = black_box(input);
let nbt = graphite_binary::nbt::decode::read(&mut input.as_slice()).unwrap();
black_box(nbt);
})
});
c.bench_function("hematite_parse_bigtest", |b| {
b.iter(|| {
let input = black_box(input);
let cursor = Cursor::new(input);
let blob: hematite_nbt::Blob = hematite_nbt::from_reader(cursor).unwrap();
black_box(blob);
})
});
c.bench_function("quartz_parse_bigtest", |b| {
b.iter(|| {
let input = black_box(input);
let mut cursor = Cursor::new(input);
let nbt = quartz_nbt::io::read_nbt(&mut cursor, Flavor::Uncompressed).unwrap();
black_box(nbt);
})
});
}
pub fn nbt_write_bigtest(c: &mut Criterion) {
let input = include_bytes!("../../../assets/bigtest.nbt");
let nbt = graphite_binary::nbt::decode::read(&mut input.as_slice()).unwrap();
c.bench_function("graphite_write_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let written = graphite_binary::nbt::encode::write(nbt);
black_box(written);
})
});
let cursor = Cursor::new(input);
let nbt: hematite_nbt::Blob = hematite_nbt::from_reader(cursor).unwrap();
c.bench_function("hematite_write_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let mut written = Vec::new();
hematite_nbt::to_writer(&mut written, nbt, None).unwrap();
black_box(written);
})
});
let mut cursor = Cursor::new(input);
let (nbt, _) = quartz_nbt::io::read_nbt(&mut cursor, Flavor::Uncompressed).unwrap();
c.bench_function("quartz_write_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let mut written = Vec::new();
quartz_nbt::io::write_nbt(&mut written, None, nbt, Flavor::Uncompressed).unwrap();
black_box(written);
})
});
}
pub fn nbt_to_snbt_bigtest(c: &mut Criterion) {
let input = include_bytes!("../../../assets/bigtest.nbt");
let nbt = graphite_binary::nbt::decode::read(&mut input.as_slice()).unwrap();
c.bench_function("graphite_to_snbt_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let snbt = graphite_binary::nbt::stringified::to_snbt_string(nbt);
black_box(snbt);
})
});
let mut cursor = Cursor::new(input);
let (nbt, _) = quartz_nbt::io::read_nbt(&mut cursor, Flavor::Uncompressed).unwrap();
c.bench_function("quartz_to_snbt_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let snbt = nbt.to_snbt();
black_box(snbt);
})
});
}
pub fn nbt_from_snbt_bigtest(c: &mut Criterion) {
let input = include_bytes!("../../../assets/bigtest.nbt");
let nbt = graphite_binary::nbt::decode::read(&mut input.as_slice()).unwrap();
let snbt = graphite_binary::nbt::stringified::to_snbt_string(&nbt);
c.bench_function("graphite_from_snbt_bigtest", |b| {
b.iter(|| {
let snbt = black_box(&snbt);
let nbt = graphite_binary::nbt::stringified::from_snbt(snbt).unwrap();
black_box(nbt);
})
});
c.bench_function("quartz_from_snbt_bigtest", |b| {
b.iter(|| {
let snbt = black_box(&snbt);
let nbt = quartz_nbt::snbt::parse(snbt).unwrap();
black_box(nbt);
})
});
}
pub fn nbt_find_bigtest(c: &mut Criterion) {
let input = include_bytes!("../../../assets/bigtest.nbt");
let nbt = graphite_binary::nbt::decode::read(&mut input.as_slice()).unwrap();
c.bench_function("graphite_find_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
let nested = nbt.find_root("nested compound test").unwrap();
let egg = nbt.find(nested, "egg").unwrap();
let value = nbt.find(egg, "value").unwrap().as_float().unwrap();
black_box(value);
})
});
let cursor = Cursor::new(input);
let nbt: hematite_nbt::Blob = hematite_nbt::from_reader(cursor).unwrap();
c.bench_function("hematite_find_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
match nbt.get("nested compound test").unwrap() {
hematite_nbt::Value::Compound(map) => match map.get("egg").unwrap() {
hematite_nbt::Value::Compound(map) => match map.get("value").unwrap() {
hematite_nbt::Value::Float(value) => {
black_box(value);
}
_ => panic!("not a Float"),
},
_ => panic!("not a Compound"),
},
_ => panic!("not a Compound"),
}
})
});
let mut cursor = Cursor::new(input);
let (nbt, _) = quartz_nbt::io::read_nbt(&mut cursor, Flavor::Uncompressed).unwrap();
c.bench_function("quartz_find_bigtest", |b| {
b.iter(|| {
let nbt = black_box(&nbt);
match nbt.inner().get("nested compound test").unwrap() {
quartz_nbt::NbtTag::Compound(map) => match map.inner().get("egg").unwrap() {
quartz_nbt::NbtTag::Compound(map) => {
let value: f32 = map.get("value").unwrap();
black_box(value);
}
_ => panic!("not a Compound"),
},
_ => panic!("not a Compound"),
}
})
});
}