commitlog 0.0.10

Implementation of an append-only commit log backed by disk.
Documentation
#![feature(test)]

extern crate commitlog;
extern crate rand;
extern crate test;

// yea.. bad idea. But I'm lazy.
mod testutil {
    include!("../src/testutil.rs");
}

use commitlog::message::*;
use commitlog::*;
use testutil::TestDir;

#[bench]
fn commitlog_append_10000(b: &mut test::Bencher) {
    let dir = TestDir::new();
    let mut log = CommitLog::new(LogOptions::new(&dir)).unwrap();
    b.iter(|| {
        for _ in 0..10_000 {
            log.append_msg(
                "719c3b4556066a1c7a06c9d55959d003d9b46273aabe2 \
                 eae15ef4ba78321ae2a68b0997a4abbd035a4cdbc8b27d701089a5af63a8b \
                 81f9dc16a874d0eda0983b79c1a6f79fe3ae61612ba2558562a85595f2f3f \
                 07fab8faba1b849685b61aad6b131b7041ca79cc662b4c5aad4d1b78fb103 \
                 4fafa2fe4f30207395e399c6d724",
            ).unwrap();
        }
        log.flush().unwrap();
    });
}

#[bench]
fn commitlog_append_10000_batched(b: &mut test::Bencher) {
    let dir = TestDir::new();
    let mut log = CommitLog::new(LogOptions::new(&dir)).unwrap();
    b.iter(|| {
        let mut buf = MessageBuf::default();
        for _ in 0..200 {
            for _ in 0..50 {
                buf.push(
                    "719c3b4556066a1c7a06c9d55959d003d9b46273aabe2 \
                     eae15ef4ba78321ae2a68b0997a4abbd035a4cdbc8b27d701089a5af63a8b \
                     81f9dc16a874d0eda0983b79c1a6f79fe3ae61612ba2558562a85595f2f3f \
                     07fab8faba1b849685b61aad6b131b7041ca79cc662b4c5aad4d1b78fb103 \
                     4fafa2fe4f30207395e399c6d724",
                );
            }
            log.append(&mut buf).unwrap();
            unsafe {
                buf.unsafe_clear();
            }
        }
        log.flush().unwrap();
    });
}