1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
use std::path::Path;
use bencher::{benchmark_group, benchmark_main, Bencher};
#[derive(Debug)]
struct P(&'static Path);
impl From<&'static str> for P {
#[inline]
fn from(s: &'static str) -> Self {
P(Path::new(s))
}
}
fn sort_slice_by_path_key(bencher: &mut Bencher) {
bencher.iter(|| {
let mut array = [
P::from("第10-15-2章"),
P::from("第1-2章"),
P::from("第2-4章"),
P::from("第2-33章"),
P::from("第1章"),
P::from("第1-4章"),
P::from("第2-3章"),
P::from("第1-11章"),
P::from("第10-1章"),
P::from("第3-1章"),
P::from("第2-10章"),
P::from("第2-2章"),
P::from("第1-3章"),
P::from("第10-15章"),
P::from("第10-2章"),
P::from("第10-15-1章"),
P::from("第2-1章"),
P::from("第2-12章"),
P::from("第1-10章"),
P::from("第3-10章"),
];
alphanumeric_sort::sort_slice_by_path_key(&mut array, |e| e.0);
array
});
}
fn sort_path_slice(bencher: &mut Bencher) {
bencher.iter(|| {
let mut array = [
Path::new("第10-15-2章"),
Path::new("第1-2章"),
Path::new("第2-4章"),
Path::new("第2-33章"),
Path::new("第1章"),
Path::new("第1-4章"),
Path::new("第2-3章"),
Path::new("第1-11章"),
Path::new("第10-1章"),
Path::new("第3-1章"),
Path::new("第2-10章"),
Path::new("第2-2章"),
Path::new("第1-3章"),
Path::new("第10-15章"),
Path::new("第10-2章"),
Path::new("第10-15-1章"),
Path::new("第2-1章"),
Path::new("第2-12章"),
Path::new("第1-10章"),
Path::new("第3-10章"),
];
alphanumeric_sort::sort_path_slice(&mut array);
array
});
}
fn compare_path(bencher: &mut Bencher) {
bencher.iter(|| {
let mut array = [
Path::new("第10-15-2章"),
Path::new("第1-2章"),
Path::new("第2-4章"),
Path::new("第2-33章"),
Path::new("第1章"),
Path::new("第1-4章"),
Path::new("第2-3章"),
Path::new("第1-11章"),
Path::new("第10-1章"),
Path::new("第3-1章"),
Path::new("第2-10章"),
Path::new("第2-2章"),
Path::new("第1-3章"),
Path::new("第10-15章"),
Path::new("第10-2章"),
Path::new("第10-15-1章"),
Path::new("第2-1章"),
Path::new("第2-12章"),
Path::new("第1-10章"),
Path::new("第3-10章"),
];
array.sort_by(|a, b| alphanumeric_sort::compare_path(a, b));
array
});
}
benchmark_group!(sort_path_compare_path, sort_slice_by_path_key, sort_path_slice, compare_path);
benchmark_main!(sort_path_compare_path);
|