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

borrow data

This commit is contained in:
Robin Appelman 2020-12-05 22:48:40 +01:00
commit 0c8d2ebe18
9 changed files with 195 additions and 167 deletions

View file

@ -22,7 +22,7 @@ const BYTES: &'static [u8] = &[
#[test]
fn read_u8_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(buffer.read_int::<u8>(0, 1).unwrap(), 0b1);
assert_eq!(buffer.read_bool(0).unwrap(), true);
@ -37,7 +37,7 @@ fn read_u8_le() {
#[test]
fn read_u8_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(buffer.read_int::<u8>(0, 1).unwrap(), 0b1);
assert_eq!(buffer.read_int::<u8>(1, 1).unwrap(), 0b0);
@ -52,21 +52,21 @@ fn read_u8_be() {
#[test]
fn read_u16_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(buffer.read_int::<u16>(6, 12).unwrap(), 0b00_0110_1010_10);
}
#[test]
fn read_u16_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(buffer.read_int::<u16>(6, 12).unwrap(), 0b01_0110_1010_10);
}
#[test]
fn read_u32_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(
buffer.read_int::<u32>(6, 24).unwrap(),
@ -76,7 +76,7 @@ fn read_u32_le() {
#[test]
fn read_u32_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(
buffer.read_int::<u32>(6, 24).unwrap(),
@ -86,7 +86,7 @@ fn read_u32_be() {
#[test]
fn read_u64_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(
buffer.read_int::<u64>(6, 34).unwrap(),
@ -108,7 +108,7 @@ fn read_u64_le() {
#[test]
fn read_u64_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(
buffer.read_int::<u64>(6, 34).unwrap(),
@ -126,7 +126,7 @@ fn read_u64_be() {
#[test]
fn read_i8_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(buffer.read_int::<i8>(0, 3).unwrap(), -0b11);
assert_eq!(buffer.read_int::<i8>(0, 8).unwrap(), -0b100_1011);
@ -134,7 +134,7 @@ fn read_i8_le() {
#[test]
fn read_i8_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(buffer.read_int::<i8>(1, 2).unwrap(), 0b1);
assert_eq!(buffer.read_int::<i8>(0, 3).unwrap(), -0b11);
@ -143,7 +143,7 @@ fn read_i8_be() {
#[test]
fn read_i16_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(buffer.read_int::<i16>(6, 12).unwrap(), 0b0_0110_1010_10);
assert_eq!(buffer.read_int::<i16>(6, 13).unwrap(), -0b11_1001_0101_10);
@ -151,7 +151,7 @@ fn read_i16_le() {
#[test]
fn read_i16_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(buffer.read_int::<i16>(6, 12).unwrap(), 0b1_0110_1010_10);
assert_eq!(buffer.read_int::<i16>(7, 12).unwrap(), -0b1001_0101_011);
@ -159,7 +159,7 @@ fn read_i16_be() {
#[test]
fn read_i32_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(
buffer.read_int::<i32>(6, 24).unwrap(),
@ -170,14 +170,14 @@ fn read_i32_le() {
#[test]
fn read_i32_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(buffer.read_int::<i32>(7, 24).unwrap(), -4893108);
}
#[test]
fn read_i64_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(buffer.read_int::<i64>(6, 34).unwrap(), -6871928406);
assert_eq!(buffer.read_int::<i64>(6, 59).unwrap(), -27471957726940758);
@ -186,7 +186,7 @@ fn read_i64_le() {
#[test]
fn read_i64_be() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
assert_eq!(buffer.read_int::<i64>(7, 34).unwrap(), -5010541773);
assert_eq!(buffer.read_int::<i64>(7, 60).unwrap(), -336251766397153476);
@ -195,23 +195,23 @@ fn read_i64_be() {
#[test]
fn read_f32_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(buffer.read_float::<f64>(6).unwrap(), 135447455835963910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0);
}
#[test]
fn read_f64_le() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), LittleEndian);
let buffer = BitReadBuffer::new(BYTES, LittleEndian);
assert_eq!(buffer.read_float::<f64>(6).unwrap(), 135447455835963910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0);
}
#[test]
fn test_from() {
let buffer: BitReadBuffer<LittleEndian> = BitReadBuffer::from(BYTES.to_vec());
let buffer: BitReadBuffer<LittleEndian> = BitReadBuffer::from(BYTES);
let _: BitReadStream<LittleEndian> = BitReadStream::from(buffer);
let _: BitReadStream<LittleEndian> = BitReadStream::from(BYTES.to_vec());
let _: BitReadStream<LittleEndian> = BitReadStream::from(BYTES);
}
#[test]
@ -219,7 +219,7 @@ fn test_read_str_be() {
let bytes = vec![
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0, 0, 0, 0, 0,
];
let buffer = BitReadBuffer::new(bytes, BigEndian);
let buffer = BitReadBuffer::new(&bytes, BigEndian);
assert_eq!(
buffer.read_string(0, Some(13)).unwrap(),
"Hello world".to_owned()
@ -239,7 +239,7 @@ fn test_read_str_no_null_termination_le() {
let bytes = vec![
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64,
];
let buffer = BitReadBuffer::new(bytes, LittleEndian);
let buffer = BitReadBuffer::new(&bytes, LittleEndian);
assert_eq!(
buffer.read_string(0, None).unwrap(),
"Hello world".to_owned()
@ -251,7 +251,7 @@ fn test_read_str_no_null_termination_be() {
let bytes = vec![
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64,
];
let buffer = BitReadBuffer::new(bytes, BigEndian);
let buffer = BitReadBuffer::new(&bytes, BigEndian);
assert_eq!(
buffer.read_string(0, None).unwrap(),
"Hello world".to_owned()
@ -264,7 +264,7 @@ fn test_read_str_le() {
'h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8, ' ' as u8, 'w' as u8, 'o' as u8,
'r' as u8, 'l' as u8, 'd' as u8, 0, 'f' as u8, 'o' as u8, 'o' as u8, 0, 0, 0, 0, 0,
];
let buffer = BitReadBuffer::new(bytes, LittleEndian);
let buffer = BitReadBuffer::new(&bytes, LittleEndian);
assert_eq!(buffer.read_string(0, Some(3)).unwrap(), "hel".to_owned());
assert_eq!(
buffer.read_string(0, Some(11)).unwrap(),
@ -278,7 +278,7 @@ fn test_read_str_le() {
#[test]
fn read_trait() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
let mut stream = BitReadStream::new(buffer);
let a: u8 = stream.read().unwrap();
assert_eq!(0b1011_0101, a);
@ -298,7 +298,7 @@ fn read_trait() {
#[test]
fn read_trait_unchecked() {
unsafe {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
let mut stream = BitReadStream::new(buffer);
let a: u8 = stream.read_unchecked(true).unwrap();
assert_eq!(0b1011_0101, a);
@ -318,7 +318,7 @@ fn read_trait_unchecked() {
#[test]
fn read_sized_trait() {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
let mut stream = BitReadStream::new(buffer);
let a: u8 = stream.read_sized(4).unwrap();
assert_eq!(0b1011, a);
@ -349,7 +349,7 @@ fn read_sized_trait() {
#[test]
fn read_sized_trait_unchecked() {
unsafe {
let buffer = BitReadBuffer::new(BYTES.to_vec(), BigEndian);
let buffer = BitReadBuffer::new(BYTES, BigEndian);
let mut stream = BitReadStream::new(buffer);
let a: u8 = stream.read_sized_unchecked(4, true).unwrap();
assert_eq!(0b1011, a);
@ -416,7 +416,7 @@ fn test_read_struct() {
0b0101_0101,
0b1010_1010,
];
let buffer = BitReadBuffer::new(bytes, LittleEndian);
let buffer = BitReadBuffer::new(&bytes, LittleEndian);
let mut stream = BitReadStream::from(buffer);
assert_eq!(
TestStruct {
@ -436,7 +436,7 @@ fn test_read_struct() {
#[test]
fn test_read_nonzero() {
let bytes = vec![12, 0, 0, 0];
let buffer = BitReadBuffer::new(bytes, LittleEndian);
let buffer = BitReadBuffer::new(&bytes, LittleEndian);
let mut stream = BitReadStream::from(buffer);
assert_eq!(NonZeroU16::new(12), stream.read().unwrap());
assert_eq!(None, stream.read::<Option<NonZeroU16>>().unwrap());
@ -444,13 +444,14 @@ fn test_read_nonzero() {
#[test]
fn read_read_signed() {
let buffer = BitReadBuffer::new(vec![255, 255, 255, 255, 255, 255, 255, 255], LittleEndian);
let bytes = vec![255, 255, 255, 255, 255, 255, 255, 255];
let buffer = BitReadBuffer::new(&bytes, LittleEndian);
assert_eq!(buffer.read_int::<i32>(0, 32).unwrap(), -1);
let bytes = (-10i32).to_le_bytes();
let mut byte_vec = Vec::with_capacity(4);
byte_vec.extend_from_slice(&bytes);
let buffer = BitReadBuffer::new(byte_vec, LittleEndian);
let buffer = BitReadBuffer::new(&byte_vec, LittleEndian);
assert_eq!(buffer.read_int::<i32>(0, 32).unwrap(), -10);
}

View file

@ -10,7 +10,7 @@ fn test_write_bool_le() {
stream.write_bool(true).unwrap();
let data = stream.finish();
let mut read = BitReadStream::from(BitReadBuffer::new(data, LittleEndian));
let mut read = BitReadStream::from(BitReadBuffer::new(&data, LittleEndian));
assert_eq!(true, read.read_bool().unwrap());
assert_eq!(true, read.read_bool().unwrap());
@ -31,7 +31,7 @@ fn test_write_bool_be() {
stream.write_bool(true).unwrap();
let data = stream.finish();
let mut read = BitReadStream::from(BitReadBuffer::new(data, BigEndian));
let mut read = BitReadStream::from(BitReadBuffer::new(&data, BigEndian));
assert_eq!(true, read.read_bool().unwrap());
assert_eq!(true, read.read_bool().unwrap());
@ -51,7 +51,7 @@ fn test_write_bool_number_le() {
stream.write_int(13253u64, 64).unwrap();
let data = stream.finish();
let mut read = BitReadStream::from(BitReadBuffer::new(data, LittleEndian));
let mut read = BitReadStream::from(BitReadBuffer::new(&data, LittleEndian));
assert_eq!(true, read.read_bool().unwrap());
assert_eq!(3253u16, read.read().unwrap());
@ -70,7 +70,7 @@ fn test_write_bool_number_be() {
stream.write_int(13253u64, 64).unwrap();
let data = stream.finish();
let mut read = BitReadStream::from(BitReadBuffer::new(data, BigEndian));
let mut read = BitReadStream::from(BitReadBuffer::new(&data, BigEndian));
assert_eq!(1u8, read.read_int(1).unwrap());
assert_eq!(3253u16, read.read().unwrap());
@ -88,7 +88,7 @@ fn test_write_float_le() {
stream.write_float(3253.12f32).unwrap();
let data = stream.finish();
let mut read = BitReadStream::from(BitReadBuffer::new(data, LittleEndian));
let mut read = BitReadStream::from(BitReadBuffer::new(&data, LittleEndian));
assert_eq!(true, read.read_bool().unwrap());
assert_eq!(3253.12f32, read.read().unwrap());
@ -105,7 +105,7 @@ fn test_write_float_be() {
stream.write_float(3253.12f32).unwrap();
let data = stream.finish();
let mut read = BitReadStream::from(BitReadBuffer::new(data, BigEndian));
let mut read = BitReadStream::from(BitReadBuffer::new(&data, BigEndian));
assert_eq!(1u8, read.read_int(1).unwrap());
assert_eq!(3253.12f32, read.read().unwrap());
@ -124,7 +124,7 @@ fn test_write_string_le() {
stream.write_string("fixed length2", Some(16)).unwrap();
let data = stream.finish();
let mut read = BitReadStream::from(BitReadBuffer::new(data, LittleEndian));
let mut read = BitReadStream::from(BitReadBuffer::new(&data, LittleEndian));
assert_eq!(true, read.read_bool().unwrap());
assert_eq!("null terminated", read.read_string(None).unwrap());