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

add unchecked reading to BitRead and BitReadSized

This commit is contained in:
Robin Appelman 2020-01-07 22:31:29 +01:00
commit 55eb866eb6
3 changed files with 160 additions and 3 deletions

View file

@ -290,6 +290,27 @@ fn read_trait() {
assert_eq!(Some(0b011_0101_0), f);
}
#[test]
fn read_trait_unchecked() {
unsafe {
let buffer = BitBuffer::new(BYTES.to_vec(), BigEndian);
let mut stream = BitStream::new(buffer);
let a: u8 = stream.read_unchecked().unwrap();
assert_eq!(0b1011_0101, a);
let b: i8 = stream.read_unchecked().unwrap();
assert_eq!(0b110_1010, b);
let c: i16 = stream.read_unchecked().unwrap();
assert_eq!(-0b101_0011_0110_0111, c);
let d: bool = stream.read_unchecked().unwrap();
assert_eq!(true, d);
let e: Option<u8> = stream.read_unchecked().unwrap();
assert_eq!(None, e);
stream.set_pos(0).unwrap();
let f: Option<u8> = stream.read_unchecked().unwrap();
assert_eq!(Some(0b011_0101_0), f);
}
}
#[test]
fn read_sized_trait() {
let buffer = BitBuffer::new(BYTES.to_vec(), BigEndian);
@ -320,6 +341,38 @@ fn read_sized_trait() {
assert_eq!(0b10u8, result.read_int(2).unwrap());
}
#[test]
fn read_sized_trait_unchecked() {
unsafe {
let buffer = BitBuffer::new(BYTES.to_vec(), BigEndian);
let mut stream = BitStream::new(buffer);
let a: u8 = stream.read_sized_unchecked(4).unwrap();
assert_eq!(0b1011, a);
stream.set_pos(0).unwrap();
let vec: Vec<u16> = stream.read_sized_unchecked(3).unwrap();
assert_eq!(
vec![
0b1011_0101_0110_1010,
0b1010_1100_1001_1001,
0b1001_1001_1001_1001
],
vec
);
stream.set_pos(0).unwrap();
let vec: Vec<u8> = stream.read_sized_unchecked(3).unwrap();
assert_eq!(vec![0b1011_0101, 0b0110_1010, 0b1010_1100], vec);
stream.set_pos(0).unwrap();
let result: HashMap<u8, u8> = stream.read_sized_unchecked(2).unwrap();
assert_eq!(
hashmap!(0b1011_0101 => 0b0110_1010, 0b1010_1100 => 0b1001_1001),
result
);
stream.set_pos(0).unwrap();
let mut result: BitStream<BigEndian> = stream.read_sized_unchecked(4).unwrap();
assert_eq!(0b10u8, result.read_int(2).unwrap());
}
}
#[derive(BitRead, PartialEq, Debug)]
struct TestStruct {
foo: u8,