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:
parent
b938ab9d76
commit
c85d4e4fa6
2 changed files with 80 additions and 19 deletions
|
|
@ -117,8 +117,7 @@ fn build_string_data(size: usize, inputs: &Vec<&str>) -> Vec<u8> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
fn get_string_buffer() -> Vec<u8> {
|
||||||
fn perf_string_be(b: &mut Bencher) {
|
|
||||||
let inputs = vec![
|
let inputs = vec![
|
||||||
"foo",
|
"foo",
|
||||||
"bar",
|
"bar",
|
||||||
|
|
@ -126,8 +125,12 @@ fn perf_string_be(b: &mut Bencher) {
|
||||||
"a",
|
"a",
|
||||||
"",
|
"",
|
||||||
];
|
];
|
||||||
let data = build_string_data(10 * 1024 * 1024, &inputs);
|
build_string_data(10 * 1024 * 1024, &inputs)
|
||||||
let buffer = BitBuffer::new(data, BigEndian);
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn perf_string_be(b: &mut Bencher) {
|
||||||
|
let buffer = BitBuffer::new(get_string_buffer(), BigEndian);
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut pos = 0;
|
let mut pos = 0;
|
||||||
|
|
@ -145,15 +148,7 @@ fn perf_string_be(b: &mut Bencher) {
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn perf_string_le(b: &mut Bencher) {
|
fn perf_string_le(b: &mut Bencher) {
|
||||||
let inputs = vec![
|
let buffer = BitBuffer::new(get_string_buffer(), LittleEndian);
|
||||||
"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);
|
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut pos = 0;
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -389,12 +389,6 @@ where
|
||||||
///
|
///
|
||||||
/// You can either read a fixed number of bytes, or a dynamic length null-terminated string
|
/// 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
|
/// # Errors
|
||||||
///
|
///
|
||||||
/// - [`ReadError::NotEnoughData`]: not enough bits available in the buffer
|
/// - [`ReadError::NotEnoughData`]: not enough bits available in the buffer
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue