#![feature(test)]
extern crate frunk;
extern crate test;
use frunk::monoid::*;
use test::Bencher;
#[bench]
fn combine_all_i32(b: &mut Bencher) {
let v = vec![
Some(1),
Some(2),
Some(3),
Some(4),
Some(5),
Some(6),
Some(7),
Some(8),
Some(9),
Some(10),
];
b.iter(|| combine_all(&v))
}
#[bench]
fn std_add_all_i32(b: &mut Bencher) {
let v = vec![
Some(1),
Some(2),
Some(3),
Some(4),
Some(5),
Some(6),
Some(7),
Some(8),
Some(9),
Some(10),
];
b.iter(|| {
v.iter().fold(Some(0), |maybe_acc, maybe_n| {
maybe_acc.and_then(|acc| maybe_n.map(|n| acc + n))
})
})
}