zerompk 0.7.1

A zero-copy, zero-dependency, no_std-compatible, extremely fast MessagePack serializer for Rust.
Documentation
#![feature(test)]

extern crate test;

const ELEMENTS: usize = 1024;
const N: usize = 100;

fn bench_values(b: &mut test::Bencher, values: Vec<i32>) {
    b.iter(|| {
        for _ in 0..N {
            let encoded = zerompk::to_msgpack_vec(test::black_box(&values)).unwrap();
            test::black_box(encoded);
        }
    });
}

#[bench]
fn serialize_i32_positive_fixint(b: &mut test::Bencher) {
    bench_values(b, (0..ELEMENTS).map(|i| (i % 128) as i32).collect());
}

#[bench]
fn serialize_i32_negative_fixint(b: &mut test::Bencher) {
    bench_values(b, (0..ELEMENTS).map(|i| -1 - (i % 32) as i32).collect());
}

#[bench]
fn serialize_i32_int8(b: &mut test::Bencher) {
    bench_values(b, (0..ELEMENTS).map(|i| -33 - (i % 96) as i32).collect());
}

#[bench]
fn serialize_i32_int16(b: &mut test::Bencher) {
    bench_values(
        b,
        (0..ELEMENTS)
            .map(|i| {
                if i % 2 == 0 {
                    128 + (i % 32_640) as i32
                } else {
                    -129 - (i % 32_640) as i32
                }
            })
            .collect(),
    );
}

#[bench]
fn serialize_i32_int32(b: &mut test::Bencher) {
    bench_values(
        b,
        (0..ELEMENTS)
            .map(|i| {
                if i % 2 == 0 {
                    32_768 + i as i32
                } else {
                    -32_769 - i as i32
                }
            })
            .collect(),
    );
}

#[bench]
fn serialize_i32_mixed(b: &mut test::Bencher) {
    const VALUES: [i32; 10] = [0, 127, -1, -32, -33, -128, 128, -129, 32_768, -32_769];
    bench_values(b, (0..ELEMENTS).map(|i| VALUES[i % VALUES.len()]).collect());
}