1 #![feature(test)]
2 
3 extern crate test;
4 extern crate itertools;
5 
6 use test::{black_box, Bencher};
7 use itertools::Itertools;
8 
9 // approximate 100_000 iterations for each combination
10 const N1: usize = 100_000;
11 const N2: usize = 448;
12 const N3: usize = 86;
13 const N4: usize = 41;
14 
15 #[bench]
comb_for1(b: &mut Bencher)16 fn comb_for1(b: &mut Bencher) {
17     b.iter(|| {
18         for i in 0..N1 {
19             black_box(i);
20         }
21     });
22 }
23 
24 #[bench]
comb_for2(b: &mut Bencher)25 fn comb_for2(b: &mut Bencher) {
26     b.iter(|| {
27         for i in 0..N2 {
28             for j in (i + 1)..N2 {
29                 black_box(i + j);
30             }
31         }
32     });
33 }
34 
35 #[bench]
comb_for3(b: &mut Bencher)36 fn comb_for3(b: &mut Bencher) {
37     b.iter(|| {
38         for i in 0..N3 {
39             for j in (i + 1)..N3 {
40                 for k in (j + 1)..N3 {
41                     black_box(i + j + k);
42                 }
43             }
44         }
45     });
46 }
47 
48 #[bench]
comb_for4(b: &mut Bencher)49 fn comb_for4(b: &mut Bencher) {
50     b.iter(|| {
51         for i in 0..N4 {
52             for j in (i + 1)..N4 {
53                 for k in (j + 1)..N4 {
54                     for l in (k + 1)..N4 {
55                         black_box(i + j + k + l);
56                     }
57                 }
58             }
59         }
60     });
61 }
62 
63 #[bench]
comb_c1(b: &mut Bencher)64 fn comb_c1(b: &mut Bencher) {
65     b.iter(|| {
66         for (i,) in (0..N1).tuple_combinations() {
67             black_box(i);
68         }
69     });
70 }
71 
72 #[bench]
comb_c2(b: &mut Bencher)73 fn comb_c2(b: &mut Bencher) {
74     b.iter(|| {
75         for (i, j) in (0..N2).tuple_combinations() {
76             black_box(i + j);
77         }
78     });
79 }
80 
81 #[bench]
comb_c3(b: &mut Bencher)82 fn comb_c3(b: &mut Bencher) {
83     b.iter(|| {
84         for (i, j, k) in (0..N3).tuple_combinations() {
85             black_box(i + j + k);
86         }
87     });
88 }
89 
90 #[bench]
comb_c4(b: &mut Bencher)91 fn comb_c4(b: &mut Bencher) {
92     b.iter(|| {
93         for (i, j, k, l) in (0..N4).tuple_combinations() {
94             black_box(i + j + k + l);
95         }
96     });
97 }
98