diny 0.2.4

An asynchronous, alloc-free serialization framework
Documentation
#![feature(generic_associated_types)]

#[macro_use]
extern crate criterion;
extern crate futures;

mod common;

use criterion::Criterion;
use common::*;


fn width(c: &mut Criterion) {
    let width_0  = [Large::default();  0];
    let width_1  = [Large::default();  1];
    let width_2  = [Large::default();  2];
    let width_3  = [Large::default();  3];
    let width_4  = [Large::default();  4];
    let width_5  = [Large::default();  5];
    let width_6  = [Large::default();  6];
    let width_7  = [Large::default();  7];
    let width_8  = [Large::default();  8];
    let width_9  = [Large::default();  9];
    let width_10 = [Large::default(); 10];

    let name = "array_ser_width";
    let mut group = c.benchmark_group(name);
    group.bench_with_input(criterion::BenchmarkId::new(name, "00"), &width_0 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "01"), &width_1 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "02"), &width_2 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "03"), &width_3 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "04"), &width_4 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "05"), &width_5 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "06"), &width_6 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "07"), &width_7 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "08"), &width_8 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "09"), &width_9 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "10"), &width_10, ser_bench);
    group.finish();

    let name = "array_de_width";
    let mut group = c.benchmark_group(name);
    group.bench_with_input(criterion::BenchmarkId::new(name, "00"), &width_0 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "01"), &width_1 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "02"), &width_2 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "03"), &width_3 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "04"), &width_4 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "05"), &width_5 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "06"), &width_6 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "07"), &width_7 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "08"), &width_8 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "09"), &width_9 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "10"), &width_10, de_bench);
    group.finish();
}


fn depth(c: &mut Criterion) {
    let depth_0  = [Large::default(); 0];
    let depth_1  = [Large::default()];
    let depth_2  = [[Large::default()]];
    let depth_3  = [[Large::default()]];
    let depth_4  = [[[Large::default()]]];
    let depth_5  = [[[[Large::default()]]]];
    let depth_6  = [[[[[Large::default()]]]]];
    let depth_7  = [[[[[[Large::default()]]]]]];
    let depth_8  = [[[[[[[Large::default()]]]]]]];
    let depth_9  = [[[[[[[[Large::default()]]]]]]]];
    let depth_10 = [[[[[[[[[Large::default()]]]]]]]]];

    let name = "array_ser_depth";
    let mut group = c.benchmark_group(name);
    group.bench_with_input(criterion::BenchmarkId::new(name, "00"), &depth_0 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "01"), &depth_1 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "02"), &depth_2 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "03"), &depth_3 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "04"), &depth_4 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "05"), &depth_5 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "06"), &depth_6 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "07"), &depth_7 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "08"), &depth_8 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "09"), &depth_9 , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "10"), &depth_10, ser_bench);
    group.finish();

    let name = "array_de_depth";
    let mut group = c.benchmark_group(name);
    group.bench_with_input(criterion::BenchmarkId::new(name, "00"), &depth_0 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "01"), &depth_1 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "02"), &depth_2 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "03"), &depth_3 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "04"), &depth_4 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "05"), &depth_5 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "06"), &depth_6 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "07"), &depth_7 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "08"), &depth_8 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "09"), &depth_9 , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "10"), &depth_10, de_bench);
    group.finish();
}


fn breadth(c: &mut Criterion) {
    let origin  = [Large::default(); 0];
    let breadth = [[[[[[[[[[Large::default()]]]]]]]]]; 10];

    let name = "array_ser_breadth";
    let mut group = c.benchmark_group(name);
    group.bench_with_input(criterion::BenchmarkId::new(name, "00"), &origin , ser_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "10"), &breadth, ser_bench);
    group.finish();

    let name = "array_de_breadth";
    let mut group = c.benchmark_group(name);
    group.bench_with_input(criterion::BenchmarkId::new(name, "00"), &origin , de_bench);
    group.bench_with_input(criterion::BenchmarkId::new(name, "10"), &breadth, de_bench);
    group.finish();
}

criterion_group!(array, width, depth, breadth);
criterion_main!(array);