blob: 52acb6837bf7cfab6edcff5a46a88bc3525966f8 [file] [log] [blame]
#![feature(test)]
extern crate pretty;
extern crate tempfile;
extern crate test;
extern crate typed_arena;
use std::io;
use pretty::BoxAllocator;
use trees::Tree;
use typed_arena::Arena;
#[path = "../examples/trees.rs"]
mod trees;
macro_rules! bench_trees {
($b:expr, $out:expr, $allocator:expr, $size:expr) => {{
let arena = Arena::new();
let b = $b;
let mut out = $out;
let size = $size;
let mut example = Tree::node("aaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
for _ in 0..size {
let bbbbbbs = arena.alloc_extend([example, Tree::node("dd")].iter().cloned());
let ffffs = arena.alloc_extend(
[Tree::node("gg"), Tree::node("hhh"), Tree::node("ii")]
.iter()
.cloned(),
);
let aaas = arena.alloc_extend(
[
Tree::node_with_forest("bbbbbb", bbbbbbs),
Tree::node("eee"),
Tree::node_with_forest("ffff", ffffs),
].iter()
.cloned(),
);
example = Tree::node_with_forest("aaa", aaas);
}
let allocator = $allocator;
b.iter(|| {
example
.pretty::<_, ()>(&allocator)
.1
.render(70, &mut out)
.unwrap();
});
}};
}
#[bench]
fn bench_sink_box(b: &mut test::Bencher) -> () {
bench_trees!(b, io::sink(), BoxAllocator, 1)
}
#[bench]
fn bench_sink_arena(b: &mut test::Bencher) -> () {
bench_trees!(b, io::sink(), Arena::new(), 1)
}
#[bench]
fn bench_vec_box(b: &mut test::Bencher) -> () {
bench_trees!(b, Vec::new(), BoxAllocator, 1)
}
#[bench]
fn bench_vec_arena(b: &mut test::Bencher) -> () {
bench_trees!(b, Vec::new(), Arena::new(), 1)
}
#[bench]
fn bench_io_box(b: &mut test::Bencher) -> () {
let out = tempfile::tempfile().unwrap();
bench_trees!(b, io::BufWriter::new(out), BoxAllocator, 1)
}
#[bench]
fn bench_io_arena(b: &mut test::Bencher) -> () {
let out = tempfile::tempfile().unwrap();
bench_trees!(b, io::BufWriter::new(out), Arena::new(), 1)
}
#[bench]
fn bench_large_sink_box(b: &mut test::Bencher) -> () {
bench_trees!(b, io::sink(), BoxAllocator, 50)
}
#[bench]
fn bench_large_sink_arena(b: &mut test::Bencher) -> () {
bench_trees!(b, io::sink(), Arena::new(), 50)
}
#[bench]
fn bench_large_vec_box(b: &mut test::Bencher) -> () {
bench_trees!(b, Vec::new(), BoxAllocator, 50)
}
#[bench]
fn bench_large_vec_arena(b: &mut test::Bencher) -> () {
bench_trees!(b, Vec::new(), Arena::new(), 50)
}
#[bench]
fn bench_large_io_box(b: &mut test::Bencher) -> () {
let out = tempfile::tempfile().unwrap();
bench_trees!(b, io::BufWriter::new(out), BoxAllocator, 50)
}
#[bench]
fn bench_large_io_arena(b: &mut test::Bencher) -> () {
let out = tempfile::tempfile().unwrap();
bench_trees!(b, io::BufWriter::new(out), Arena::new(), 50)
}