1 use criterion
::{criterion_group, criterion_main, Criterion}
;
2 use itertools
::Itertools
;
4 struct Unspecialized
<I
>(I
);
6 impl<I
> Iterator
for Unspecialized
<I
>
12 fn next(&mut self) -> Option
<I
::Item
> {
17 fn size_hint(&self) -> (usize, Option
<usize>) {
28 pub fn external(c
: &mut Criterion
)
32 c
.bench_function("external", move |b
| {
35 for &x
in arr
.iter().intersperse(&0) {
43 pub fn internal_specialized(c
: &mut Criterion
)
47 c
.bench_function("internal specialized", move |b
| {
49 arr
.iter().intersperse(&0).fold(0, |acc
, x
| acc
+ x
)
54 pub fn internal_unspecialized(c
: &mut Criterion
)
58 c
.bench_function("internal unspecialized", move |b
| {
60 Unspecialized(arr
.iter().intersperse(&0)).fold(0, |acc
, x
| acc
+ x
)
69 specialization
::intersperse
::external
,
70 specialization
::intersperse
::internal_specialized
,
71 specialization
::intersperse
::internal_unspecialized
,
73 criterion_main
!(benches
);