]> git.proxmox.com Git - rustc.git/blame - vendor/itertools-0.8.2/benches/fold_specialization.rs
New upstream version 1.52.1+dfsg1
[rustc.git] / vendor / itertools-0.8.2 / benches / fold_specialization.rs
CommitLineData
f20569fa
XL
1#![feature(test)]
2
3extern crate test;
4extern crate itertools;
5
6use itertools::Itertools;
7
8struct Unspecialized<I>(I);
9
10impl<I> Iterator for Unspecialized<I>
11where I: Iterator
12{
13 type Item = I::Item;
14
15 #[inline(always)]
16 fn next(&mut self) -> Option<I::Item> {
17 self.0.next()
18 }
19
20 #[inline(always)]
21 fn size_hint(&self) -> (usize, Option<usize>) {
22 self.0.size_hint()
23 }
24}
25
26mod specialization {
27 use super::*;
28
29 mod intersperse {
30 use super::*;
31
32 #[bench]
33 fn external(b: &mut test::Bencher)
34 {
35 let arr = [1; 1024];
36
37 b.iter(|| {
38 let mut sum = 0;
39 for &x in arr.into_iter().intersperse(&0) {
40 sum += x;
41 }
42 sum
43 })
44 }
45
46 #[bench]
47 fn internal_specialized(b: &mut test::Bencher)
48 {
49 let arr = [1; 1024];
50
51 b.iter(|| {
52 arr.into_iter().intersperse(&0).fold(0, |acc, x| acc + x)
53 })
54 }
55
56 #[bench]
57 fn internal_unspecialized(b: &mut test::Bencher)
58 {
59 let arr = [1; 1024];
60
61 b.iter(|| {
62 Unspecialized(arr.into_iter().intersperse(&0)).fold(0, |acc, x| acc + x)
63 })
64 }
65 }
66}