summaryrefslogtreecommitdiffstats
path: root/vendor/itertools/benches
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
commit9918693037dce8aa4bb6f08741b6812923486c18 (patch)
tree21d2b40bec7e6a7ea664acee056eb3d08e15a1cf /vendor/itertools/benches
parentReleasing progress-linux version 1.75.0+dfsg1-5~progress7.99u1. (diff)
downloadrustc-9918693037dce8aa4bb6f08741b6812923486c18.tar.xz
rustc-9918693037dce8aa4bb6f08741b6812923486c18.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/itertools/benches')
-rw-r--r--vendor/itertools/benches/bench1.rs159
-rw-r--r--vendor/itertools/benches/combinations.rs10
-rw-r--r--vendor/itertools/benches/extra/zipslices.rs48
-rw-r--r--vendor/itertools/benches/fold_specialization.rs22
-rw-r--r--vendor/itertools/benches/powerset.rs67
-rw-r--r--vendor/itertools/benches/specializations.rs176
-rw-r--r--vendor/itertools/benches/tree_fold1.rs74
-rw-r--r--vendor/itertools/benches/tuples.rs27
8 files changed, 372 insertions, 211 deletions
diff --git a/vendor/itertools/benches/bench1.rs b/vendor/itertools/benches/bench1.rs
index 71278d17b..0946affe5 100644
--- a/vendor/itertools/benches/bench1.rs
+++ b/vendor/itertools/benches/bench1.rs
@@ -1,10 +1,10 @@
use criterion::{black_box, criterion_group, criterion_main, Criterion};
-use itertools::Itertools;
use itertools::free::cloned;
use itertools::iproduct;
+use itertools::Itertools;
-use std::iter::repeat;
use std::cmp;
+use std::iter::repeat;
use std::ops::{Add, Range};
mod extra;
@@ -15,8 +15,10 @@ fn slice_iter(c: &mut Criterion) {
let xs: Vec<_> = repeat(1i32).take(20).collect();
c.bench_function("slice iter", move |b| {
- b.iter(|| for elt in xs.iter() {
- black_box(elt);
+ b.iter(|| {
+ for elt in xs.iter() {
+ black_box(elt);
+ }
})
});
}
@@ -25,8 +27,10 @@ fn slice_iter_rev(c: &mut Criterion) {
let xs: Vec<_> = repeat(1i32).take(20).collect();
c.bench_function("slice iter rev", move |b| {
- b.iter(|| for elt in xs.iter().rev() {
- black_box(elt);
+ b.iter(|| {
+ for elt in xs.iter().rev() {
+ black_box(elt);
+ }
})
});
}
@@ -307,10 +311,10 @@ fn zip_unchecked_counted_loop(c: &mut Criterion) {
let len = cmp::min(xs.len(), ys.len());
for i in 0..len {
unsafe {
- let x = *xs.get_unchecked(i);
- let y = *ys.get_unchecked(i);
- black_box(x);
- black_box(y);
+ let x = *xs.get_unchecked(i);
+ let y = *ys.get_unchecked(i);
+ black_box(x);
+ black_box(y);
}
}
})
@@ -329,9 +333,9 @@ fn zipdot_i32_unchecked_counted_loop(c: &mut Criterion) {
let mut s = 0i32;
for i in 0..len {
unsafe {
- let x = *xs.get_unchecked(i);
- let y = *ys.get_unchecked(i);
- s += x * y;
+ let x = *xs.get_unchecked(i);
+ let y = *ys.get_unchecked(i);
+ s += x * y;
}
}
s
@@ -351,9 +355,9 @@ fn zipdot_f32_unchecked_counted_loop(c: &mut Criterion) {
let mut s = 0f32;
for i in 0..len {
unsafe {
- let x = *xs.get_unchecked(i);
- let y = *ys.get_unchecked(i);
- s += x * y;
+ let x = *xs.get_unchecked(i);
+ let y = *ys.get_unchecked(i);
+ s += x * y;
}
}
s
@@ -374,12 +378,12 @@ fn zip_unchecked_counted_loop3(c: &mut Criterion) {
let len = cmp::min(xs.len(), cmp::min(ys.len(), zs.len()));
for i in 0..len {
unsafe {
- let x = *xs.get_unchecked(i);
- let y = *ys.get_unchecked(i);
- let z = *zs.get_unchecked(i);
- black_box(x);
- black_box(y);
- black_box(z);
+ let x = *xs.get_unchecked(i);
+ let y = *ys.get_unchecked(i);
+ let z = *zs.get_unchecked(i);
+ black_box(x);
+ black_box(y);
+ black_box(z);
}
}
})
@@ -464,11 +468,7 @@ fn equal(c: &mut Criterion) {
let alpha = black_box(&data[1..]);
let beta = black_box(&data[..l - 1]);
- c.bench_function("equal", move |b| {
- b.iter(|| {
- itertools::equal(alpha, beta)
- })
- });
+ c.bench_function("equal", move |b| b.iter(|| itertools::equal(alpha, beta)));
}
fn merge_default(c: &mut Criterion) {
@@ -493,9 +493,7 @@ fn merge_default(c: &mut Criterion) {
let data2 = black_box(data2);
c.bench_function("merge default", move |b| {
- b.iter(|| {
- data1.iter().merge(&data2).count()
- })
+ b.iter(|| data1.iter().merge(&data2).count())
});
}
@@ -521,9 +519,7 @@ fn merge_by_cmp(c: &mut Criterion) {
let data2 = black_box(data2);
c.bench_function("merge by cmp", move |b| {
- b.iter(|| {
- data1.iter().merge_by(&data2, PartialOrd::le).count()
- })
+ b.iter(|| data1.iter().merge_by(&data2, PartialOrd::le).count())
});
}
@@ -549,9 +545,7 @@ fn merge_by_lt(c: &mut Criterion) {
let data2 = black_box(data2);
c.bench_function("merge by lt", move |b| {
- b.iter(|| {
- data1.iter().merge_by(&data2, |a, b| a <= b).count()
- })
+ b.iter(|| data1.iter().merge_by(&data2, |a, b| a <= b).count())
});
}
@@ -578,9 +572,7 @@ fn kmerge_default(c: &mut Criterion) {
let its = &[data1.iter(), data2.iter()];
c.bench_function("kmerge default", move |b| {
- b.iter(|| {
- its.iter().cloned().kmerge().count()
- })
+ b.iter(|| its.iter().cloned().kmerge().count())
});
}
@@ -589,7 +581,7 @@ fn kmerge_tenway(c: &mut Criterion) {
let mut state = 1729u16;
fn rng(state: &mut u16) -> u16 {
- let new = state.wrapping_mul(31421) + 6927;
+ let new = state.wrapping_mul(31421).wrapping_add(6927);
*state = new;
new
}
@@ -603,7 +595,7 @@ fn kmerge_tenway(c: &mut Criterion) {
while rest.len() > 0 {
let chunk_len = 1 + rng(&mut state) % 512;
let chunk_len = cmp::min(rest.len(), chunk_len as usize);
- let (fst, tail) = {rest}.split_at_mut(chunk_len);
+ let (fst, tail) = { rest }.split_at_mut(chunk_len);
fst.sort();
chunks.push(fst.iter().cloned());
rest = tail;
@@ -612,15 +604,14 @@ fn kmerge_tenway(c: &mut Criterion) {
// println!("Chunk lengths: {}", chunks.iter().format_with(", ", |elt, f| f(&elt.len())));
c.bench_function("kmerge tenway", move |b| {
- b.iter(|| {
- chunks.iter().cloned().kmerge().count()
- })
+ b.iter(|| chunks.iter().cloned().kmerge().count())
});
}
fn fast_integer_sum<I>(iter: I) -> I::Item
- where I: IntoIterator,
- I::Item: Default + Add<Output=I::Item>
+where
+ I: IntoIterator,
+ I::Item: Default + Add<Output = I::Item>,
{
iter.into_iter().fold(<_>::default(), |x, y| x + y)
}
@@ -629,9 +620,7 @@ fn step_vec_2(c: &mut Criterion) {
let v = vec![0; 1024];
c.bench_function("step vec 2", move |b| {
- b.iter(|| {
- fast_integer_sum(cloned(v.iter().step_by(2)))
- })
+ b.iter(|| fast_integer_sum(cloned(v.iter().step_by(2))))
});
}
@@ -639,9 +628,7 @@ fn step_vec_10(c: &mut Criterion) {
let v = vec![0; 1024];
c.bench_function("step vec 10", move |b| {
- b.iter(|| {
- fast_integer_sum(cloned(v.iter().step_by(10)))
- })
+ b.iter(|| fast_integer_sum(cloned(v.iter().step_by(10))))
});
}
@@ -649,9 +636,7 @@ fn step_range_2(c: &mut Criterion) {
let v = black_box(0..1024);
c.bench_function("step range 2", move |b| {
- b.iter(|| {
- fast_integer_sum(v.clone().step_by(2))
- })
+ b.iter(|| fast_integer_sum(v.clone().step_by(2)))
});
}
@@ -659,9 +644,7 @@ fn step_range_10(c: &mut Criterion) {
let v = black_box(0..1024);
c.bench_function("step range 10", move |b| {
- b.iter(|| {
- fast_integer_sum(v.clone().step_by(10))
- })
+ b.iter(|| fast_integer_sum(v.clone().step_by(10)))
});
}
@@ -681,22 +664,6 @@ fn cartesian_product_iterator(c: &mut Criterion) {
});
}
-fn cartesian_product_fold(c: &mut Criterion) {
- let xs = vec![0; 16];
-
- c.bench_function("cartesian product fold", move |b| {
- b.iter(|| {
- let mut sum = 0;
- iproduct!(&xs, &xs, &xs).fold((), |(), (&x, &y, &z)| {
- sum += x;
- sum += y;
- sum += z;
- });
- sum
- })
- });
-}
-
fn multi_cartesian_product_iterator(c: &mut Criterion) {
let xs = [vec![0; 16], vec![0; 16], vec![0; 16]];
@@ -713,22 +680,6 @@ fn multi_cartesian_product_iterator(c: &mut Criterion) {
});
}
-fn multi_cartesian_product_fold(c: &mut Criterion) {
- let xs = [vec![0; 16], vec![0; 16], vec![0; 16]];
-
- c.bench_function("multi cartesian product fold", move |b| {
- b.iter(|| {
- let mut sum = 0;
- xs.iter().multi_cartesian_product().fold((), |(), x| {
- sum += x[0];
- sum += x[1];
- sum += x[2];
- });
- sum
- })
- });
-}
-
fn cartesian_product_nested_for(c: &mut Criterion) {
let xs = vec![0; 16];
@@ -753,9 +704,7 @@ fn all_equal(c: &mut Criterion) {
let mut xs = vec![0; 5_000_000];
xs.extend(vec![1; 5_000_000]);
- c.bench_function("all equal", move |b| {
- b.iter(|| xs.iter().all_equal())
- });
+ c.bench_function("all equal", move |b| b.iter(|| xs.iter().all_equal()));
}
fn all_equal_for(c: &mut Criterion) {
@@ -797,21 +746,17 @@ fn permutations_iter(c: &mut Criterion) {
}
c.bench_function("permutations iter", move |b| {
- b.iter(|| {
- for _ in NewIterator(0..PERM_COUNT).permutations(PERM_COUNT) {
-
- }
- })
+ b.iter(
+ || {
+ for _ in NewIterator(0..PERM_COUNT).permutations(PERM_COUNT) {}
+ },
+ )
});
}
fn permutations_range(c: &mut Criterion) {
c.bench_function("permutations range", move |b| {
- b.iter(|| {
- for _ in (0..PERM_COUNT).permutations(PERM_COUNT) {
-
- }
- })
+ b.iter(|| for _ in (0..PERM_COUNT).permutations(PERM_COUNT) {})
});
}
@@ -819,11 +764,7 @@ fn permutations_slice(c: &mut Criterion) {
let v = (0..PERM_COUNT).collect_vec();
c.bench_function("permutations slice", move |b| {
- b.iter(|| {
- for _ in v.as_slice().iter().permutations(PERM_COUNT) {
-
- }
- })
+ b.iter(|| for _ in v.as_slice().iter().permutations(PERM_COUNT) {})
});
}
@@ -863,9 +804,7 @@ criterion_group!(
step_range_2,
step_range_10,
cartesian_product_iterator,
- cartesian_product_fold,
multi_cartesian_product_iterator,
- multi_cartesian_product_fold,
cartesian_product_nested_for,
all_equal,
all_equal_for,
diff --git a/vendor/itertools/benches/combinations.rs b/vendor/itertools/benches/combinations.rs
index e7433a4cb..42a452111 100644
--- a/vendor/itertools/benches/combinations.rs
+++ b/vendor/itertools/benches/combinations.rs
@@ -111,15 +111,7 @@ fn comb_c14(c: &mut Criterion) {
}
criterion_group!(
- benches,
- comb_for1,
- comb_for2,
- comb_for3,
- comb_for4,
- comb_c1,
- comb_c2,
- comb_c3,
- comb_c4,
+ benches, comb_for1, comb_for2, comb_for3, comb_for4, comb_c1, comb_c2, comb_c3, comb_c4,
comb_c14,
);
criterion_main!(benches);
diff --git a/vendor/itertools/benches/extra/zipslices.rs b/vendor/itertools/benches/extra/zipslices.rs
index 633be5906..5476c0cb8 100644
--- a/vendor/itertools/benches/extra/zipslices.rs
+++ b/vendor/itertools/benches/extra/zipslices.rs
@@ -46,8 +46,9 @@ impl<'a, 'b, A, B> ZipSlices<&'a [A], &'b [B]> {
}
impl<T, U> ZipSlices<T, U>
- where T: Slice,
- U: Slice
+where
+ T: Slice,
+ U: Slice,
{
/// Create a new `ZipSlices` from slices `a` and `b`.
///
@@ -67,8 +68,9 @@ impl<T, U> ZipSlices<T, U>
}
impl<T, U> Iterator for ZipSlices<T, U>
- where T: Slice,
- U: Slice
+where
+ T: Slice,
+ U: Slice,
{
type Item = (T::Item, U::Item);
@@ -80,9 +82,7 @@ impl<T, U> Iterator for ZipSlices<T, U>
} else {
let i = self.index;
self.index += 1;
- Some((
- self.t.get_unchecked(i),
- self.u.get_unchecked(i)))
+ Some((self.t.get_unchecked(i), self.u.get_unchecked(i)))
}
}
}
@@ -95,8 +95,9 @@ impl<T, U> Iterator for ZipSlices<T, U>
}
impl<T, U> DoubleEndedIterator for ZipSlices<T, U>
- where T: Slice,
- U: Slice
+where
+ T: Slice,
+ U: Slice,
{
#[inline(always)]
fn next_back(&mut self) -> Option<Self::Item> {
@@ -106,22 +107,23 @@ impl<T, U> DoubleEndedIterator for ZipSlices<T, U>
} else {
self.len -= 1;
let i = self.len;
- Some((
- self.t.get_unchecked(i),
- self.u.get_unchecked(i)))
+ Some((self.t.get_unchecked(i), self.u.get_unchecked(i)))
}
}
}
}
impl<T, U> ExactSizeIterator for ZipSlices<T, U>
- where T: Slice,
- U: Slice
-{}
+where
+ T: Slice,
+ U: Slice,
+{
+}
unsafe impl<T, U> Slice for ZipSlices<T, U>
- where T: Slice,
- U: Slice
+where
+ T: Slice,
+ U: Slice,
{
type Item = (T::Item, U::Item);
@@ -130,8 +132,7 @@ unsafe impl<T, U> Slice for ZipSlices<T, U>
}
unsafe fn get_unchecked(&mut self, i: usize) -> Self::Item {
- (self.t.get_unchecked(i),
- self.u.get_unchecked(i))
+ (self.t.get_unchecked(i), self.u.get_unchecked(i))
}
}
@@ -152,7 +153,9 @@ pub unsafe trait Slice {
unsafe impl<'a, T> Slice for &'a [T] {
type Item = &'a T;
#[inline(always)]
- fn len(&self) -> usize { (**self).len() }
+ fn len(&self) -> usize {
+ (**self).len()
+ }
#[inline(always)]
unsafe fn get_unchecked(&mut self, i: usize) -> &'a T {
debug_assert!(i < self.len());
@@ -163,7 +166,9 @@ unsafe impl<'a, T> Slice for &'a [T] {
unsafe impl<'a, T> Slice for &'a mut [T] {
type Item = &'a mut T;
#[inline(always)]
- fn len(&self) -> usize { (**self).len() }
+ fn len(&self) -> usize {
+ (**self).len()
+ }
#[inline(always)]
unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut T {
debug_assert!(i < self.len());
@@ -174,7 +179,6 @@ unsafe impl<'a, T> Slice for &'a mut [T] {
#[test]
fn zipslices() {
-
let xs = [1, 2, 3, 4, 5, 6];
let ys = [1, 2, 3, 7];
::itertools::assert_equal(ZipSlices::new(&xs, &ys), xs.iter().zip(&ys));
diff --git a/vendor/itertools/benches/fold_specialization.rs b/vendor/itertools/benches/fold_specialization.rs
index 5de4671e9..3a040305b 100644
--- a/vendor/itertools/benches/fold_specialization.rs
+++ b/vendor/itertools/benches/fold_specialization.rs
@@ -1,10 +1,13 @@
+#![allow(unstable_name_collisions)]
+
use criterion::{criterion_group, criterion_main, Criterion};
use itertools::Itertools;
struct Unspecialized<I>(I);
impl<I> Iterator for Unspecialized<I>
-where I: Iterator
+where
+ I: Iterator,
{
type Item = I::Item;
@@ -25,8 +28,7 @@ mod specialization {
pub mod intersperse {
use super::*;
- pub fn external(c: &mut Criterion)
- {
+ pub fn external(c: &mut Criterion) {
let arr = [1; 1024];
c.bench_function("external", move |b| {
@@ -40,25 +42,19 @@ mod specialization {
});
}
- pub fn internal_specialized(c: &mut Criterion)
- {
+ pub fn internal_specialized(c: &mut Criterion) {
let arr = [1; 1024];
c.bench_function("internal specialized", move |b| {
- b.iter(|| {
- arr.iter().intersperse(&0).fold(0, |acc, x| acc + x)
- })
+ b.iter(|| arr.iter().intersperse(&0).fold(0, |acc, x| acc + x))
});
}
- pub fn internal_unspecialized(c: &mut Criterion)
- {
+ pub fn internal_unspecialized(c: &mut Criterion) {
let arr = [1; 1024];
c.bench_function("internal unspecialized", move |b| {
- b.iter(|| {
- Unspecialized(arr.iter().intersperse(&0)).fold(0, |acc, x| acc + x)
- })
+ b.iter(|| Unspecialized(arr.iter().intersperse(&0)).fold(0, |acc, x| acc + x))
});
}
}
diff --git a/vendor/itertools/benches/powerset.rs b/vendor/itertools/benches/powerset.rs
index 074550bc4..018333d31 100644
--- a/vendor/itertools/benches/powerset.rs
+++ b/vendor/itertools/benches/powerset.rs
@@ -20,17 +20,64 @@ fn powerset_n(c: &mut Criterion, n: usize) {
});
}
-fn powerset_0(c: &mut Criterion) { powerset_n(c, 0); }
+fn powerset_n_fold(c: &mut Criterion, n: usize) {
+ let id = format!("powerset {} fold", n);
+ c.bench_function(id.as_str(), move |b| {
+ b.iter(|| {
+ for _ in 0..calc_iters(n) {
+ (0..n).powerset().fold(0, |s, elt| s + black_box(elt).len());
+ }
+ })
+ });
+}
+
+fn powerset_0(c: &mut Criterion) {
+ powerset_n(c, 0);
+}
+
+fn powerset_1(c: &mut Criterion) {
+ powerset_n(c, 1);
+}
+
+fn powerset_2(c: &mut Criterion) {
+ powerset_n(c, 2);
+}
-fn powerset_1(c: &mut Criterion) { powerset_n(c, 1); }
+fn powerset_4(c: &mut Criterion) {
+ powerset_n(c, 4);
+}
-fn powerset_2(c: &mut Criterion) { powerset_n(c, 2); }
+fn powerset_8(c: &mut Criterion) {
+ powerset_n(c, 8);
+}
-fn powerset_4(c: &mut Criterion) { powerset_n(c, 4); }
+fn powerset_12(c: &mut Criterion) {
+ powerset_n(c, 12);
+}
-fn powerset_8(c: &mut Criterion) { powerset_n(c, 8); }
+fn powerset_0_fold(c: &mut Criterion) {
+ powerset_n_fold(c, 0);
+}
-fn powerset_12(c: &mut Criterion) { powerset_n(c, 12); }
+fn powerset_1_fold(c: &mut Criterion) {
+ powerset_n_fold(c, 1);
+}
+
+fn powerset_2_fold(c: &mut Criterion) {
+ powerset_n_fold(c, 2);
+}
+
+fn powerset_4_fold(c: &mut Criterion) {
+ powerset_n_fold(c, 4);
+}
+
+fn powerset_8_fold(c: &mut Criterion) {
+ powerset_n_fold(c, 8);
+}
+
+fn powerset_12_fold(c: &mut Criterion) {
+ powerset_n_fold(c, 12);
+}
criterion_group!(
benches,
@@ -40,5 +87,11 @@ criterion_group!(
powerset_4,
powerset_8,
powerset_12,
+ powerset_0_fold,
+ powerset_1_fold,
+ powerset_2_fold,
+ powerset_4_fold,
+ powerset_8_fold,
+ powerset_12_fold,
);
-criterion_main!(benches); \ No newline at end of file
+criterion_main!(benches);
diff --git a/vendor/itertools/benches/specializations.rs b/vendor/itertools/benches/specializations.rs
new file mode 100644
index 000000000..139270897
--- /dev/null
+++ b/vendor/itertools/benches/specializations.rs
@@ -0,0 +1,176 @@
+use criterion::black_box;
+use itertools::iproduct;
+use itertools::Itertools;
+
+/// Create multiple functions each defining a benchmark group about iterator methods.
+///
+/// Each created group has functions with the following ids:
+///
+/// - `next`, `size_hint`, `count`, `last`, `nth`, `collect`, `fold`
+/// - and when marked as `DoubleEndedIterator`: `next_back`, `rfold`
+/// - and when marked as `ExactSizeIterator`: `len`
+///
+/// Note that this macro can be called only once.
+macro_rules! bench_specializations {
+ (
+ $(
+ $name:ident {
+ $($extra:ident)*
+ {$(
+ $init:stmt;
+ )*}
+ $iterator:expr
+ }
+ )*
+ ) => {
+ $(
+ fn $name(c: &mut ::criterion::Criterion) {
+ let mut bench_group = c.benchmark_group(stringify!($name));
+ $(
+ $init
+ )*
+ let bench_first_its = {
+ let mut bench_idx = 0;
+ [0; 1000].map(|_| {
+ let mut it = $iterator;
+ if bench_idx != 0 {
+ it.nth(bench_idx - 1);
+ }
+ bench_idx += 1;
+ it
+ })
+ };
+ bench_specializations!(@Iterator bench_group bench_first_its: $iterator);
+ $(
+ bench_specializations!(@$extra bench_group bench_first_its: $iterator);
+ )*
+ bench_group.finish();
+ }
+ )*
+
+ ::criterion::criterion_group!(benches, $($name, )*);
+ ::criterion::criterion_main!(benches);
+ };
+
+ (@Iterator $group:ident $first_its:ident: $iterator:expr) => {
+ $group.bench_function("next", |bencher| bencher.iter(|| {
+ let mut it = $iterator;
+ while let Some(x) = it.next() {
+ black_box(x);
+ }
+ }));
+ $group.bench_function("size_hint", |bencher| bencher.iter(|| {
+ $first_its.iter().for_each(|it| {
+ black_box(it.size_hint());
+ })
+ }));
+ $group.bench_function("count", |bencher| bencher.iter(|| {
+ $iterator.count()
+ }));
+ $group.bench_function("last", |bencher| bencher.iter(|| {
+ $iterator.last()
+ }));
+ $group.bench_function("nth", |bencher| bencher.iter(|| {
+ for start in 0_usize..10 {
+ for n in 0..10 {
+ let mut it = $iterator;
+ if let Some(s) = start.checked_sub(1) {
+ black_box(it.nth(s));
+ }
+ while let Some(x) = it.nth(n) {
+ black_box(x);
+ }
+ }
+ }
+ }));
+ $group.bench_function("collect", |bencher| bencher.iter(|| {
+ $iterator.collect::<Vec<_>>()
+ }));
+ $group.bench_function("fold", |bencher| bencher.iter(|| {
+ $iterator.fold((), |(), x| {
+ black_box(x);
+ })
+ }));
+ };
+
+ (@DoubleEndedIterator $group:ident $_first_its:ident: $iterator:expr) => {
+ $group.bench_function("next_back", |bencher| bencher.iter(|| {
+ let mut it = $iterator;
+ while let Some(x) = it.next_back() {
+ black_box(x);
+ }
+ }));
+ $group.bench_function("nth_back", |bencher| bencher.iter(|| {
+ for start in 0_usize..10 {
+ for n in 0..10 {
+ let mut it = $iterator;
+ if let Some(s) = start.checked_sub(1) {
+ black_box(it.nth_back(s));
+ }
+ while let Some(x) = it.nth_back(n) {
+ black_box(x);
+ }
+ }
+ }
+ }));
+ $group.bench_function("rfold", |bencher| bencher.iter(|| {
+ $iterator.rfold((), |(), x| {
+ black_box(x);
+ })
+ }));
+ };
+
+ (@ExactSizeIterator $group:ident $first_its:ident: $_iterator:expr) => {
+ $group.bench_function("len", |bencher| bencher.iter(|| {
+ $first_its.iter().for_each(|it| {
+ black_box(it.len());
+ })
+ }));
+ };
+}
+
+// Example: To bench only `ZipLongest::fold`, you can do
+// cargo bench --bench specializations zip_longest/fold
+bench_specializations! {
+ cartesian_product {
+ {
+ let v = black_box(vec![0; 16]);
+ }
+ iproduct!(&v, &v, &v)
+ }
+ multi_cartesian_product {
+ {
+ let vs = black_box([0; 3].map(|_| vec![0; 16]));
+ }
+ vs.iter().multi_cartesian_product()
+ }
+ tuple_combinations {
+ {
+ let v = black_box((0..64).collect_vec());
+ }
+ v.iter().tuple_combinations::<(_, _, _, _)>()
+ }
+ while_some {
+ {}
+ (0..)
+ .map(black_box)
+ .map(|i| char::from_digit(i, 16))
+ .while_some()
+ }
+ with_position {
+ ExactSizeIterator
+ {
+ let v = black_box((0..10240).collect_vec());
+ }
+ v.iter().with_position()
+ }
+ zip_longest {
+ DoubleEndedIterator
+ ExactSizeIterator
+ {
+ let xs = black_box(vec![0; 1024]);
+ let ys = black_box(vec![0; 768]);
+ }
+ xs.iter().zip_longest(ys.iter())
+ }
+}
diff --git a/vendor/itertools/benches/tree_fold1.rs b/vendor/itertools/benches/tree_fold1.rs
index f12995db8..5b76d5404 100644
--- a/vendor/itertools/benches/tree_fold1.rs
+++ b/vendor/itertools/benches/tree_fold1.rs
@@ -1,12 +1,15 @@
+#![allow(deprecated)]
+
use criterion::{criterion_group, criterion_main, Criterion};
-use itertools::{Itertools, cloned};
+use itertools::{cloned, Itertools};
-trait IterEx : Iterator {
+trait IterEx: Iterator {
// Another efficient implementation against which to compare,
// but needs `std` so is less desirable.
fn tree_fold1_vec<F>(self, mut f: F) -> Option<Self::Item>
- where F: FnMut(Self::Item, Self::Item) -> Self::Item,
- Self: Sized,
+ where
+ F: FnMut(Self::Item, Self::Item) -> Self::Item,
+ Self: Sized,
{
let hint = self.size_hint().0;
let cap = std::mem::size_of::<usize>() * 8 - hint.leading_zeros() as usize;
@@ -21,24 +24,23 @@ trait IterEx : Iterator {
stack.into_iter().fold1(f)
}
}
-impl<T:Iterator> IterEx for T {}
+impl<T: Iterator> IterEx for T {}
macro_rules! def_benchs {
($N:expr,
$FUN:ident,
$BENCH_NAME:ident,
- ) => (
+ ) => {
mod $BENCH_NAME {
use super::*;
pub fn sum(c: &mut Criterion) {
- let v: Vec<u32> = (0.. $N).collect();
+ let v: Vec<u32> = (0..$N).collect();
- c.bench_function(&(stringify!($BENCH_NAME).replace('_', " ") + " sum"), move |b| {
- b.iter(|| {
- cloned(&v).$FUN(|x, y| x + y)
- })
- });
+ c.bench_function(
+ &(stringify!($BENCH_NAME).replace('_', " ") + " sum"),
+ move |b| b.iter(|| cloned(&v).$FUN(|x, y| x + y)),
+ );
}
pub fn complex_iter(c: &mut Criterion) {
@@ -46,11 +48,10 @@ macro_rules! def_benchs {
let v = (5..).take($N / 2);
let it = u.chain(v);
- c.bench_function(&(stringify!($BENCH_NAME).replace('_', " ") + " complex iter"), move |b| {
- b.iter(|| {
- it.clone().map(|x| x as f32).$FUN(f32::atan2)
- })
- });
+ c.bench_function(
+ &(stringify!($BENCH_NAME).replace('_', " ") + " complex iter"),
+ move |b| b.iter(|| it.clone().map(|x| x as f32).$FUN(f32::atan2)),
+ );
}
pub fn string_format(c: &mut Criterion) {
@@ -58,13 +59,18 @@ macro_rules! def_benchs {
// size to not waste too much time in travis. The allocations
// in here are so expensive anyway that it'll still take
// way longer per iteration than the other two benchmarks.
- let v: Vec<u32> = (0.. ($N/4)).collect();
-
- c.bench_function(&(stringify!($BENCH_NAME).replace('_', " ") + " string format"), move |b| {
- b.iter(|| {
- cloned(&v).map(|x| x.to_string()).$FUN(|x, y| format!("{} + {}", x, y))
- })
- });
+ let v: Vec<u32> = (0..($N / 4)).collect();
+
+ c.bench_function(
+ &(stringify!($BENCH_NAME).replace('_', " ") + " string format"),
+ move |b| {
+ b.iter(|| {
+ cloned(&v)
+ .map(|x| x.to_string())
+ .$FUN(|x, y| format!("{} + {}", x, y))
+ })
+ },
+ );
}
}
@@ -74,58 +80,58 @@ macro_rules! def_benchs {
$BENCH_NAME::complex_iter,
$BENCH_NAME::string_format,
);
- )
+ };
}
-def_benchs!{
+def_benchs! {
10_000,
fold1,
fold1_10k,
}
-def_benchs!{
+def_benchs! {
10_000,
tree_fold1,
tree_fold1_stack_10k,
}
-def_benchs!{
+def_benchs! {
10_000,
tree_fold1_vec,
tree_fold1_vec_10k,
}
-def_benchs!{
+def_benchs! {
100,
fold1,
fold1_100,
}
-def_benchs!{
+def_benchs! {
100,
tree_fold1,
tree_fold1_stack_100,
}
-def_benchs!{
+def_benchs! {
100,
tree_fold1_vec,
tree_fold1_vec_100,
}
-def_benchs!{
+def_benchs! {
8,
fold1,
fold1_08,
}
-def_benchs!{
+def_benchs! {
8,
tree_fold1,
tree_fold1_stack_08,
}
-def_benchs!{
+def_benchs! {
8,
tree_fold1_vec,
tree_fold1_vec_08,
diff --git a/vendor/itertools/benches/tuples.rs b/vendor/itertools/benches/tuples.rs
index ea50aaaee..2eca34712 100644
--- a/vendor/itertools/benches/tuples.rs
+++ b/vendor/itertools/benches/tuples.rs
@@ -33,7 +33,7 @@ fn sum_s4(s: &[u32]) -> u32 {
s4(s[0], s[1], s[2], s[3])
}
-fn sum_t1(s: &(&u32, )) -> u32 {
+fn sum_t1(s: &(&u32,)) -> u32 {
s1(*s.0)
}
@@ -60,9 +60,9 @@ macro_rules! def_benchs {
$WINDOWS:ident;
$FOR_CHUNKS:ident,
$FOR_WINDOWS:ident
- ) => (
+ ) => {
fn $FOR_CHUNKS(c: &mut Criterion) {
- let v: Vec<u32> = (0.. $N * 1_000).collect();
+ let v: Vec<u32> = (0..$N * 1_000).collect();
let mut s = 0;
c.bench_function(&stringify!($FOR_CHUNKS).replace('_', " "), move |b| {
b.iter(|| {
@@ -90,7 +90,7 @@ macro_rules! def_benchs {
}
fn $TUPLES(c: &mut Criterion) {
- let v: Vec<u32> = (0.. $N * 1_000).collect();
+ let v: Vec<u32> = (0..$N * 1_000).collect();
let mut s = 0;
c.bench_function(&stringify!($TUPLES).replace('_', " "), move |b| {
b.iter(|| {
@@ -103,7 +103,7 @@ macro_rules! def_benchs {
}
fn $CHUNKS(c: &mut Criterion) {
- let v: Vec<u32> = (0.. $N * 1_000).collect();
+ let v: Vec<u32> = (0..$N * 1_000).collect();
let mut s = 0;
c.bench_function(&stringify!($CHUNKS).replace('_', " "), move |b| {
b.iter(|| {
@@ -150,10 +150,10 @@ macro_rules! def_benchs {
$TUPLE_WINDOWS,
$WINDOWS,
);
- )
+ };
}
-def_benchs!{
+def_benchs! {
1;
benches_1,
sum_t1,
@@ -166,7 +166,7 @@ def_benchs!{
for_windows_1
}
-def_benchs!{
+def_benchs! {
2;
benches_2,
sum_t2,
@@ -179,7 +179,7 @@ def_benchs!{
for_windows_2
}
-def_benchs!{
+def_benchs! {
3;
benches_3,
sum_t3,
@@ -192,7 +192,7 @@ def_benchs!{
for_windows_3
}
-def_benchs!{
+def_benchs! {
4;
benches_4,
sum_t4,
@@ -205,9 +205,4 @@ def_benchs!{
for_windows_4
}
-criterion_main!(
- benches_1,
- benches_2,
- benches_3,
- benches_4,
-);
+criterion_main!(benches_1, benches_2, benches_3, benches_4,);