Sha256: 5a517bbe29d366a15f6f751660e17ab1aa3e7b21552a1983048c662e34f0d69e
Contents?: true
Size: 1.71 KB
Versions: 25
Compression:
Stored size: 1.71 KB
Contents
use criterion::{criterion_group, criterion_main, Criterion}; use itertools::Itertools; struct Unspecialized<I>(I); impl<I> Iterator for Unspecialized<I> where I: Iterator { type Item = I::Item; #[inline(always)] fn next(&mut self) -> Option<Self::Item> { self.0.next() } #[inline(always)] fn size_hint(&self) -> (usize, Option<usize>) { self.0.size_hint() } } mod specialization { use super::*; pub mod intersperse { use super::*; pub fn external(c: &mut Criterion) { let arr = [1; 1024]; c.bench_function("external", move |b| { b.iter(|| { let mut sum = 0; for &x in arr.iter().intersperse(&0) { sum += x; } sum }) }); } pub fn internal_specialized(c: &mut Criterion) { let arr = [1; 1024]; c.bench_function("internal specialized", move |b| { b.iter(|| { arr.iter().intersperse(&0).fold(0, |acc, x| acc + x) }) }); } pub fn internal_unspecialized(c: &mut Criterion) { let arr = [1; 1024]; c.bench_function("internal unspecialized", move |b| { b.iter(|| { Unspecialized(arr.iter().intersperse(&0)).fold(0, |acc, x| acc + x) }) }); } } } criterion_group!( benches, specialization::intersperse::external, specialization::intersperse::internal_specialized, specialization::intersperse::internal_unspecialized, ); criterion_main!(benches);
Version data entries
25 entries across 25 versions & 1 rubygems