1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 08:34:07 +02:00

add bench for read_bytes

This commit is contained in:
Robin Appelman 2019-09-20 22:07:57 +02:00
commit c85d4e4fa6
2 changed files with 80 additions and 19 deletions

View file

@ -117,8 +117,7 @@ fn build_string_data(size: usize, inputs: &Vec<&str>) -> Vec<u8> {
}
}
#[bench]
fn perf_string_be(b: &mut Bencher) {
fn get_string_buffer() -> Vec<u8> {
let inputs = vec![
"foo",
"bar",
@ -126,8 +125,12 @@ fn perf_string_be(b: &mut Bencher) {
"a",
"",
];
let data = build_string_data(10 * 1024 * 1024, &inputs);
let buffer = BitBuffer::new(data, BigEndian);
build_string_data(10 * 1024 * 1024, &inputs)
}
#[bench]
fn perf_string_be(b: &mut Bencher) {
let buffer = BitBuffer::new(get_string_buffer(), BigEndian);
b.iter(|| {
let mut pos = 0;
@ -145,15 +148,7 @@ fn perf_string_be(b: &mut Bencher) {
#[bench]
fn perf_string_le(b: &mut Bencher) {
let inputs = vec![
"foo",
"bar",
"something a little bit longer for extra testing",
"a",
"",
];
let data = build_string_data(10 * 1024 * 1024, &inputs);
let buffer = BitBuffer::new(data, LittleEndian);
let buffer = BitBuffer::new(get_string_buffer(), LittleEndian);
b.iter(|| {
let mut pos = 0;
@ -168,3 +163,75 @@ fn perf_string_le(b: &mut Bencher) {
}
});
}
#[bench]
fn perf_bytes_be(b: &mut Bencher) {
let buffer = BitBuffer::new(get_string_buffer(), BigEndian);
b.iter(|| {
let mut pos = 0;
let len = buffer.bit_len();
loop {
if pos + (128 * 8) > len {
break;
}
let result = buffer.read_bytes(pos, 128).unwrap();
pos += (result.len() + 1) * 8;
test::black_box(result);
}
});
}
#[bench]
fn perf_bytes_le(b: &mut Bencher) {
let buffer = BitBuffer::new(get_string_buffer(), BigEndian);
b.iter(|| {
let mut pos = 0;
let len = buffer.bit_len();
loop {
if pos + (128 * 8) > len {
break;
}
let result = buffer.read_bytes(pos, 128).unwrap();
pos += (result.len() + 1) * 8;
test::black_box(result);
}
});
}
#[bench]
fn perf_bytes_be_unaligned(b: &mut Bencher) {
let buffer = BitBuffer::new(get_string_buffer(), BigEndian);
b.iter(|| {
let mut pos = 0;
let len = buffer.bit_len();
loop {
if pos + (128 * 8) > len {
break;
}
let result = buffer.read_bytes(pos, 128).unwrap();
pos += (result.len() + 1) * 8;
test::black_box(result);
}
});
}
#[bench]
fn perf_bytes_le_unaligned(b: &mut Bencher) {
let buffer = BitBuffer::new(get_string_buffer(), BigEndian);
b.iter(|| {
let mut pos = 3;
let len = buffer.bit_len();
loop {
if pos + (128 * 8) > len {
break;
}
let result = buffer.read_bytes(pos, 128).unwrap();
pos += (result.len() + 1) * 8;
test::black_box(result);
}
});
}

View file

@ -389,12 +389,6 @@ where
///
/// You can either read a fixed number of bytes, or a dynamic length null-terminated string
///
/// # Features
///
/// To disable the overhead of checking if the read bytes are valid you can enable the `unchecked_utf8`
/// feature of the crate to use `String::from_utf8_unchecked` instead of `String::from_utf8`
/// to create the string from the read bytes.
///
/// # Errors
///
/// - [`ReadError::NotEnoughData`]: not enough bits available in the buffer