mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 16:44:06 +02:00
make usable with rust stable
This commit is contained in:
parent
26bc7f9350
commit
b8d6e4fd7a
2 changed files with 47 additions and 45 deletions
|
|
@ -1,9 +1,9 @@
|
|||
#![feature(test)]
|
||||
#![warn(missing_docs)]
|
||||
|
||||
//! Tools for reading integers of arbitrary bit length and non byte-aligned integers and other data types
|
||||
|
||||
extern crate test;
|
||||
// for bench on nightly
|
||||
//extern crate test;
|
||||
|
||||
pub use endianness::{BigEndian, LittleEndian};
|
||||
use endianness::Endianness;
|
||||
|
|
@ -95,7 +95,7 @@ pub type Result<T> = std::result::Result<T, ReadError>;
|
|||
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111,
|
||||
/// 0, 0, 0, 0, 0, 0, 0, 0
|
||||
/// ];
|
||||
/// let buffer = BitBuffer::from_padded_slice(bytes, LittleEndian);
|
||||
/// let buffer = BitBuffer::from_padded_slice(bytes, 8, LittleEndian);
|
||||
/// ```
|
||||
pub struct BitBuffer<'a, E, S>
|
||||
where
|
||||
|
|
|
|||
86
src/tests.rs
86
src/tests.rs
|
|
@ -1,6 +1,7 @@
|
|||
use std::fs;
|
||||
use super::*;
|
||||
use test::Bencher;
|
||||
// for bench on nightly
|
||||
//use std::fs;
|
||||
//use test::Bencher;
|
||||
|
||||
const BYTES: &'static [u8] = &[
|
||||
0b1011_0101,
|
||||
|
|
@ -222,43 +223,44 @@ fn read_f64_le() {
|
|||
assert_eq!(buffer.read_float::<f64>(6).unwrap(), 135447455835963910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0);
|
||||
}
|
||||
|
||||
fn read_perf<P: IsPadded>(buffer: BitBuffer<LittleEndian, P>) -> u16 {
|
||||
let size = 5;
|
||||
let mut pos = 0;
|
||||
let len = buffer.bit_len();
|
||||
let mut result: u16 = 0;
|
||||
loop {
|
||||
if pos + size > len {
|
||||
return result;
|
||||
}
|
||||
let data = buffer.read::<u16>(pos, size).unwrap();
|
||||
result = result.wrapping_add(data);
|
||||
pos += size;
|
||||
}
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn perf_padded(b: &mut Bencher) {
|
||||
let mut file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file");
|
||||
let len = file.len();
|
||||
file.extend_from_slice(&[0, 0, 0, 0, 0, 0, 0, 0]);
|
||||
let bytes = file.as_slice();
|
||||
b.iter(|| {
|
||||
let buffer = BitBuffer::from_padded_slice(&bytes, len, LittleEndian);
|
||||
let data = read_perf(buffer);
|
||||
assert_eq!(data, 43943);
|
||||
test::black_box(data);
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn perf_non_padded(b: &mut Bencher) {
|
||||
let file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file");
|
||||
let bytes = file.as_slice();
|
||||
b.iter(|| {
|
||||
let buffer = BitBuffer::new(&bytes, LittleEndian);
|
||||
let data = read_perf(buffer);
|
||||
assert_eq!(data, 43943);
|
||||
test::black_box(data);
|
||||
});
|
||||
}
|
||||
// for bench on nightly
|
||||
//fn read_perf<P: IsPadded>(buffer: BitBuffer<LittleEndian, P>) -> u16 {
|
||||
// let size = 5;
|
||||
// let mut pos = 0;
|
||||
// let len = buffer.bit_len();
|
||||
// let mut result: u16 = 0;
|
||||
// loop {
|
||||
// if pos + size > len {
|
||||
// return result;
|
||||
// }
|
||||
// let data = buffer.read::<u16>(pos, size).unwrap();
|
||||
// result = result.wrapping_add(data);
|
||||
// pos += size;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//#[bench]
|
||||
//fn perf_padded(b: &mut Bencher) {
|
||||
// let mut file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file");
|
||||
// let len = file.len();
|
||||
// file.extend_from_slice(&[0, 0, 0, 0, 0, 0, 0, 0]);
|
||||
// let bytes = file.as_slice();
|
||||
// b.iter(|| {
|
||||
// let buffer = BitBuffer::from_padded_slice(&bytes, len, LittleEndian);
|
||||
// let data = read_perf(buffer);
|
||||
// assert_eq!(data, 43943);
|
||||
// test::black_box(data);
|
||||
// });
|
||||
//}
|
||||
//
|
||||
//#[bench]
|
||||
//fn perf_non_padded(b: &mut Bencher) {
|
||||
// let file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file");
|
||||
// let bytes = file.as_slice();
|
||||
// b.iter(|| {
|
||||
// let buffer = BitBuffer::new(&bytes, LittleEndian);
|
||||
// let data = read_perf(buffer);
|
||||
// assert_eq!(data, 43943);
|
||||
// test::black_box(data);
|
||||
// });
|
||||
//}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue