mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-29 11:37:39 +00:00
115 lines
3.0 KiB
Rust
115 lines
3.0 KiB
Rust
use core::hint::black_box;
|
|
use std::collections::{BTreeSet, HashSet};
|
|
use std::hash::{DefaultHasher, Hash, Hasher};
|
|
use std::path::*;
|
|
|
|
#[bench]
|
|
#[cfg_attr(miri, ignore)] // Miri isn't fast...
|
|
fn bench_path_cmp_fast_path_buf_sort(b: &mut test::Bencher) {
|
|
let prefix = "my/home";
|
|
let mut paths: Vec<_> =
|
|
(0..1000).map(|num| PathBuf::from(prefix).join(format!("file {num}.rs"))).collect();
|
|
|
|
paths.sort();
|
|
|
|
b.iter(|| {
|
|
black_box(paths.as_mut_slice()).sort_unstable();
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
#[cfg_attr(miri, ignore)] // Miri isn't fast...
|
|
fn bench_path_cmp_fast_path_long(b: &mut test::Bencher) {
|
|
let prefix = "/my/home/is/my/castle/and/my/castle/has/a/rusty/workbench/";
|
|
let paths: Vec<_> =
|
|
(0..1000).map(|num| PathBuf::from(prefix).join(format!("file {num}.rs"))).collect();
|
|
|
|
let mut set = BTreeSet::new();
|
|
|
|
paths.iter().for_each(|p| {
|
|
set.insert(p.as_path());
|
|
});
|
|
|
|
b.iter(|| {
|
|
set.remove(paths[500].as_path());
|
|
set.insert(paths[500].as_path());
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
#[cfg_attr(miri, ignore)] // Miri isn't fast...
|
|
fn bench_path_cmp_fast_path_short(b: &mut test::Bencher) {
|
|
let prefix = "my/home";
|
|
let paths: Vec<_> =
|
|
(0..1000).map(|num| PathBuf::from(prefix).join(format!("file {num}.rs"))).collect();
|
|
|
|
let mut set = BTreeSet::new();
|
|
|
|
paths.iter().for_each(|p| {
|
|
set.insert(p.as_path());
|
|
});
|
|
|
|
b.iter(|| {
|
|
set.remove(paths[500].as_path());
|
|
set.insert(paths[500].as_path());
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
#[cfg_attr(miri, ignore)] // Miri isn't fast...
|
|
fn bench_path_hashset(b: &mut test::Bencher) {
|
|
let prefix = "/my/home/is/my/castle/and/my/castle/has/a/rusty/workbench/";
|
|
let paths: Vec<_> =
|
|
(0..1000).map(|num| PathBuf::from(prefix).join(format!("file {num}.rs"))).collect();
|
|
|
|
let mut set = HashSet::new();
|
|
|
|
paths.iter().for_each(|p| {
|
|
set.insert(p.as_path());
|
|
});
|
|
|
|
b.iter(|| {
|
|
set.remove(paths[500].as_path());
|
|
set.insert(black_box(paths[500].as_path()))
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
#[cfg_attr(miri, ignore)] // Miri isn't fast...
|
|
fn bench_path_hashset_miss(b: &mut test::Bencher) {
|
|
let prefix = "/my/home/is/my/castle/and/my/castle/has/a/rusty/workbench/";
|
|
let paths: Vec<_> =
|
|
(0..1000).map(|num| PathBuf::from(prefix).join(format!("file {num}.rs"))).collect();
|
|
|
|
let mut set = HashSet::new();
|
|
|
|
paths.iter().for_each(|p| {
|
|
set.insert(p.as_path());
|
|
});
|
|
|
|
let probe = PathBuf::from(prefix).join("other");
|
|
|
|
b.iter(|| set.remove(black_box(probe.as_path())));
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_hash_path_short(b: &mut test::Bencher) {
|
|
let mut hasher = DefaultHasher::new();
|
|
let path = Path::new("explorer.exe");
|
|
|
|
b.iter(|| black_box(path).hash(&mut hasher));
|
|
|
|
black_box(hasher.finish());
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_hash_path_long(b: &mut test::Bencher) {
|
|
let mut hasher = DefaultHasher::new();
|
|
let path =
|
|
Path::new("/aaaaa/aaaaaa/./../aaaaaaaa/bbbbbbbbbbbbb/ccccccccccc/ddddddddd/eeeeeee.fff");
|
|
|
|
b.iter(|| black_box(path).hash(&mut hasher));
|
|
|
|
black_box(hasher.finish());
|
|
}
|