|
| 1 | +mod is_ascii; |
| 2 | + |
1 | 3 | // Lower-case ASCII 'a' is the first byte that has its highest bit set |
2 | 4 | // after wrap-adding 0x1F: |
3 | 5 | // |
@@ -59,48 +61,6 @@ macro_rules! benches { |
59 | 61 | )+ |
60 | 62 | } |
61 | 63 | }; |
62 | | - |
63 | | - // For some tests the vec allocation tends to dominate, so it can be avoided. |
64 | | - (@readonly $( fn $name: ident($arg: ident: &[u8]) $body: block )+) => { |
65 | | - benches!(@ro mod short_readonly SHORT $($name $arg $body)+); |
66 | | - benches!(@ro mod medium_readonly MEDIUM $($name $arg $body)+); |
67 | | - benches!(@ro mod long_readonly LONG $($name $arg $body)+); |
68 | | - // Add another `MEDIUM` bench, but trim the ends so that we can (try to) |
69 | | - // benchmark a case where the function has to handle misalignment. |
70 | | - mod medium_unaligned { |
71 | | - use super::*; |
72 | | - $( |
73 | | - #[bench] |
74 | | - fn $name(bencher: &mut Bencher) { |
75 | | - bencher.bytes = MEDIUM.len() as u64 - 2; |
76 | | - let mut vec = MEDIUM.as_bytes().to_vec(); |
77 | | - bencher.iter(|| { |
78 | | - black_box(&mut vec); |
79 | | - let $arg = black_box(&vec[1..(vec.len() - 1)]); |
80 | | - black_box($body) |
81 | | - }) |
82 | | - } |
83 | | - )+ |
84 | | - } |
85 | | - }; |
86 | | - (@ro mod $mod_name: ident $input: ident $($name: ident $arg: ident $body: block)+) => { |
87 | | - mod $mod_name { |
88 | | - use super::*; |
89 | | - |
90 | | - $( |
91 | | - #[bench] |
92 | | - fn $name(bencher: &mut Bencher) { |
93 | | - bencher.bytes = $input.len() as u64; |
94 | | - let mut vec = $input.as_bytes().to_vec(); |
95 | | - bencher.iter(|| { |
96 | | - black_box(&mut vec); |
97 | | - let $arg = black_box(&vec[..]); |
98 | | - black_box($body) |
99 | | - }) |
100 | | - } |
101 | | - )+ |
102 | | - } |
103 | | - }; |
104 | 64 | } |
105 | 65 |
|
106 | 66 | use test::black_box; |
@@ -287,40 +247,6 @@ benches! { |
287 | 247 | is_ascii_control, |
288 | 248 | } |
289 | 249 |
|
290 | | -benches! { |
291 | | - @readonly |
292 | | - fn is_ascii_slice_libcore(bytes: &[u8]) { |
293 | | - bytes.is_ascii() |
294 | | - } |
295 | | - |
296 | | - fn is_ascii_slice_iter_all(bytes: &[u8]) { |
297 | | - bytes.iter().all(|b| b.is_ascii()) |
298 | | - } |
299 | | - |
300 | | - fn is_ascii_slice_align_to(bytes: &[u8]) { |
301 | | - is_ascii_align_to_impl(bytes) |
302 | | - } |
303 | | -} |
304 | | - |
305 | | -// Separate since it's easier to debug errors if they don't go through macro |
306 | | -// expansion first. |
307 | | -fn is_ascii_align_to_impl(bytes: &[u8]) -> bool { |
308 | | - if bytes.len() < core::mem::size_of::<usize>() { |
309 | | - return bytes.iter().all(|b| b.is_ascii()); |
310 | | - } |
311 | | - // SAFETY: transmuting a sequence of `u8` to `usize` is always fine |
312 | | - let (head, body, tail) = unsafe { bytes.align_to::<usize>() }; |
313 | | - head.iter().all(|b| b.is_ascii()) |
314 | | - && body.iter().all(|w| !contains_nonascii(*w)) |
315 | | - && tail.iter().all(|b| b.is_ascii()) |
316 | | -} |
317 | | - |
318 | | -#[inline] |
319 | | -fn contains_nonascii(v: usize) -> bool { |
320 | | - const NONASCII_MASK: usize = 0x80808080_80808080u64 as usize; |
321 | | - (NONASCII_MASK & v) != 0 |
322 | | -} |
323 | | - |
324 | 250 | macro_rules! repeat { |
325 | 251 | ($s: expr) => { |
326 | 252 | concat!($s, $s, $s, $s, $s, $s, $s, $s, $s, $s) |
|
0 commit comments