Guest User

Untitled

a guest
Mar 26th, 2021
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.20 KB | None | 0 0
  1. use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
  2.  
  3. fn generate_data(n: usize) -> Vec<u64> {
  4.     use rand::prelude::*;
  5.     let mut rng = thread_rng();
  6.     let mut res = vec![0u64; n];
  7.     rng.fill(&mut res[..]);
  8.     res
  9. }
  10.  
  11. const N: usize = 1000;
  12.  
  13. pub fn criterion_benchmark(c: &mut Criterion) {
  14.     let data = generate_data(N);
  15.     let mut group = c.benchmark_group("vec_fill");
  16.     group.bench_function(BenchmarkId::new("with_capacity_extend", ""), |b| {
  17.         b.iter(|| {
  18.             let mut result = Vec::with_capacity(data.len() + 1);
  19.             result.push(0);
  20.             result.extend(data.iter());
  21.             result
  22.         })
  23.     });
  24.     group.bench_function(BenchmarkId::new("clone_insert", ""), |b| {
  25.         b.iter(|| {
  26.             let mut result = data.clone();
  27.             result.insert(0, 0);
  28.             result
  29.         })
  30.     });
  31.     group.bench_function(BenchmarkId::new("chain_collect", ""), |b| {
  32.         b.iter(|| {
  33.             let result: Vec<u64> = std::iter::once(0).chain(data.iter().copied()).collect();
  34.             result
  35.         })
  36.     });
  37.     group.finish();
  38. }
  39.  
  40. criterion_group!(benches, criterion_benchmark);
  41. criterion_main!(benches);
  42.  
Advertisement
Add Comment
Please, Sign In to add comment