hypercore 0.8.1

Secure, distributed, append-only log
Documentation
#![feature(test)]

extern crate failure;
extern crate hypercore;
extern crate random_access_memory as ram;

extern crate test;

use self::test::Bencher;
use failure::Error;
use hypercore::{Feed, Storage, Store};
use ram::RandomAccessMemory;

fn create_feed(page_size: usize) -> Result<Feed<RandomAccessMemory>, Error> {
  let create = |_store: Store| Ok(RandomAccessMemory::new(page_size));
  let storage = Storage::new(create)?;
  Ok(Feed::with_storage(storage)?)
}

#[bench]
fn create(b: &mut Bencher) {
  b.iter(|| {
    create_feed(1024).unwrap();
  });
}

#[bench]
fn write(b: &mut Bencher) {
  let mut feed = create_feed(1024).unwrap();
  let data = Vec::from("hello");
  b.iter(|| {
    feed.append(&data).unwrap();
  });
}

#[bench]
fn read(b: &mut Bencher) {
  let mut feed = create_feed(1024).unwrap();
  let data = Vec::from("hello");
  for _ in 0..1000 {
    feed.append(&data).unwrap();
  }

  let mut i = 0;
  b.iter(|| {
    feed.get(i).unwrap();
    i += 1;
  });
}