//! This file benchmarks the `sm` function. use criterion::{black_box, criterion_group, criterion_main, Criterion}; use rand::{ distributions::{Distribution, Uniform}, thread_rng, }; use sort::sm; fn bench_10(c: &mut Criterion) { let mut rng = thread_rng(); let input = { let uniform = Uniform::new(-100.0f32, 100.0f32); uniform.sample_iter(&mut rng).take(10).collect::>() }; assert_eq!(input.len(), 10); c.bench_function("sm", |b| { b.iter(|| { let mut count = 0; black_box(sm(input.as_slice(), &mut count)) }) }); } fn bench_20(c: &mut Criterion) { let mut rng = thread_rng(); let input = { let uniform = Uniform::new(-100.0f32, 100.0f32); uniform.sample_iter(&mut rng).take(20).collect::>() }; assert_eq!(input.len(), 20); c.bench_function("sm", |b| { b.iter(|| { let mut count = 0; black_box(sm(input.as_slice(), &mut count)) }) }); } fn bench_30(c: &mut Criterion) { let mut rng = thread_rng(); let input = { let uniform = Uniform::new(-100.0f32, 100.0f32); uniform.sample_iter(&mut rng).take(30).collect::>() }; assert_eq!(input.len(), 30); c.bench_function("sm", |b| { b.iter(|| { let mut count = 0; black_box(sm(input.as_slice(), &mut count)) }) }); } fn bench_40(c: &mut Criterion) { let mut rng = thread_rng(); let input = { let uniform = Uniform::new(-100.0f32, 100.0f32); uniform.sample_iter(&mut rng).take(40).collect::>() }; assert_eq!(input.len(), 40); c.bench_function("sm", |b| { b.iter(|| { let mut count = 0; black_box(sm(input.as_slice(), &mut count)) }) }); } fn bench_50(c: &mut Criterion) { let mut rng = thread_rng(); let input = { let uniform = Uniform::new(-100.0f32, 100.0f32); uniform.sample_iter(&mut rng).take(50).collect::>() }; assert_eq!(input.len(), 50); c.bench_function("sm", |b| { b.iter(|| { let mut count = 0; black_box(sm(input.as_slice(), &mut count)) }) }); } criterion_group!(benches, bench_10, bench_20, bench_30, bench_40, bench_50); criterion_main!(benches);