| use criterion::{criterion_group, criterion_main, Criterion}; |
| use itertools::Itertools; |
| struct Unspecialized<I>(I); |
| impl<I> Iterator for Unspecialized<I> |
| fn next(&mut self) -> Option<Self::Item> { |
| fn size_hint(&self) -> (usize, Option<usize>) { |
| pub fn external(c: &mut Criterion) |
| c.bench_function("external", move |b| { |
| for &x in arr.iter().intersperse(&0) { |
| pub fn internal_specialized(c: &mut Criterion) |
| c.bench_function("internal specialized", move |b| { |
| arr.iter().intersperse(&0).fold(0, |acc, x| acc + x) |
| pub fn internal_unspecialized(c: &mut Criterion) |
| c.bench_function("internal unspecialized", move |b| { |
| Unspecialized(arr.iter().intersperse(&0)).fold(0, |acc, x| acc + x) |
| specialization::intersperse::external, |
| specialization::intersperse::internal_specialized, |
| specialization::intersperse::internal_unspecialized, |
| criterion_main!(benches); |