]> git.proxmox.com Git - rustc.git/blame - vendor/itertools-0.8.2/benches/tuples.rs
New upstream version 1.52.1+dfsg1
[rustc.git] / vendor / itertools-0.8.2 / benches / tuples.rs
CommitLineData
f20569fa
XL
1#![feature(test)]
2
3extern crate test;
4extern crate itertools;
5
6use test::Bencher;
7use itertools::Itertools;
8
9fn s1(a: u32) -> u32 {
10 a
11}
12
13fn s2(a: u32, b: u32) -> u32 {
14 a + b
15}
16
17fn s3(a: u32, b: u32, c: u32) -> u32 {
18 a + b + c
19}
20
21fn s4(a: u32, b: u32, c: u32, d: u32) -> u32 {
22 a + b + c + d
23}
24
25fn sum_s1(s: &[u32]) -> u32 {
26 s1(s[0])
27}
28
29fn sum_s2(s: &[u32]) -> u32 {
30 s2(s[0], s[1])
31}
32
33fn sum_s3(s: &[u32]) -> u32 {
34 s3(s[0], s[1], s[2])
35}
36
37fn sum_s4(s: &[u32]) -> u32 {
38 s4(s[0], s[1], s[2], s[3])
39}
40
41fn sum_t1(s: &(&u32, )) -> u32 {
42 s1(*s.0)
43}
44
45fn sum_t2(s: &(&u32, &u32)) -> u32 {
46 s2(*s.0, *s.1)
47}
48
49fn sum_t3(s: &(&u32, &u32, &u32)) -> u32 {
50 s3(*s.0, *s.1, *s.2)
51}
52
53fn sum_t4(s: &(&u32, &u32, &u32, &u32)) -> u32 {
54 s4(*s.0, *s.1, *s.2, *s.3)
55}
56
57macro_rules! def_benchs {
58 ($N:expr;
59 $TUPLE_FUN:ident,
60 $TUPLES:ident,
61 $TUPLE_WINDOWS:ident;
62 $SLICE_FUN:ident,
63 $CHUNKS:ident,
64 $WINDOWS:ident;
65 $FOR_CHUNKS:ident,
66 $FOR_WINDOWS:ident
67 ) => (
68 #[bench]
69 fn $FOR_CHUNKS(b: &mut Bencher) {
70 let v: Vec<u32> = (0.. $N * 1_000).collect();
71 let mut s = 0;
72 b.iter(|| {
73 let mut j = 0;
74 for _ in 0..1_000 {
75 s += $SLICE_FUN(&v[j..(j + $N)]);
76 j += $N;
77 }
78 s
79 });
80 }
81
82 #[bench]
83 fn $FOR_WINDOWS(b: &mut Bencher) {
84 let v: Vec<u32> = (0..1_000).collect();
85 let mut s = 0;
86 b.iter(|| {
87 for i in 0..(1_000 - $N) {
88 s += $SLICE_FUN(&v[i..(i + $N)]);
89 }
90 s
91 });
92 }
93
94 #[bench]
95 fn $TUPLES(b: &mut Bencher) {
96 let v: Vec<u32> = (0.. $N * 1_000).collect();
97 let mut s = 0;
98 b.iter(|| {
99 for x in v.iter().tuples() {
100 s += $TUPLE_FUN(&x);
101 }
102 s
103 });
104 }
105
106 #[bench]
107 fn $CHUNKS(b: &mut Bencher) {
108 let v: Vec<u32> = (0.. $N * 1_000).collect();
109 let mut s = 0;
110 b.iter(|| {
111 for x in v.chunks($N) {
112 s += $SLICE_FUN(x);
113 }
114 s
115 });
116 }
117
118 #[bench]
119 fn $TUPLE_WINDOWS(b: &mut Bencher) {
120 let v: Vec<u32> = (0..1_000).collect();
121 let mut s = 0;
122 b.iter(|| {
123 for x in v.iter().tuple_windows() {
124 s += $TUPLE_FUN(&x);
125 }
126 s
127 });
128 }
129
130 #[bench]
131 fn $WINDOWS(b: &mut Bencher) {
132 let v: Vec<u32> = (0..1_000).collect();
133 let mut s = 0;
134 b.iter(|| {
135 for x in v.windows($N) {
136 s += $SLICE_FUN(x);
137 }
138 s
139 });
140 }
141 )
142}
143
144def_benchs!{
145 1;
146 sum_t1,
147 tuple_chunks_1,
148 tuple_windows_1;
149 sum_s1,
150 slice_chunks_1,
151 slice_windows_1;
152 for_chunks_1,
153 for_windows_1
154}
155
156def_benchs!{
157 2;
158 sum_t2,
159 tuple_chunks_2,
160 tuple_windows_2;
161 sum_s2,
162 slice_chunks_2,
163 slice_windows_2;
164 for_chunks_2,
165 for_windows_2
166}
167
168def_benchs!{
169 3;
170 sum_t3,
171 tuple_chunks_3,
172 tuple_windows_3;
173 sum_s3,
174 slice_chunks_3,
175 slice_windows_3;
176 for_chunks_3,
177 for_windows_3
178}
179
180def_benchs!{
181 4;
182 sum_t4,
183 tuple_chunks_4,
184 tuple_windows_4;
185 sum_s4,
186 slice_chunks_4,
187 slice_windows_4;
188 for_chunks_4,
189 for_windows_4
190}