|
| 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