File: bench.rs

package info (click to toggle)
rust-alphanumeric-sort 1.5.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 116 kB
  • sloc: makefile: 2
file content (109 lines) | stat: -rw-r--r-- 3,138 bytes parent folder | download
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);