mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 16:44:06 +02:00
rountrip tests
This commit is contained in:
parent
f873005046
commit
f704ee9f9a
4 changed files with 117 additions and 10 deletions
|
|
@ -0,0 +1,76 @@
|
|||
use bitbuffer::{
|
||||
BigEndian, BitRead, BitReadBuffer, BitReadStream, BitWrite, BitWriteStream, LittleEndian,
|
||||
};
|
||||
use std::fmt::Debug;
|
||||
|
||||
fn roundtrip<
|
||||
T: BitRead<'static, BigEndian>
|
||||
+ BitWrite<BigEndian>
|
||||
+ BitRead<'static, LittleEndian>
|
||||
+ BitWrite<LittleEndian>
|
||||
+ Debug
|
||||
+ PartialEq,
|
||||
>(
|
||||
val: T,
|
||||
) {
|
||||
{
|
||||
let mut stream = BitWriteStream::new(LittleEndian);
|
||||
stream.write(&val).unwrap();
|
||||
let size = stream.bit_len();
|
||||
let data = stream.finish();
|
||||
let mut read = BitReadStream::new(BitReadBuffer::new_owned(data, LittleEndian));
|
||||
assert_eq!(val, read.read().unwrap());
|
||||
assert_eq!(size, read.pos());
|
||||
}
|
||||
{
|
||||
let mut stream = BitWriteStream::new(BigEndian);
|
||||
stream.write(&val).unwrap();
|
||||
let size = stream.bit_len();
|
||||
let data = stream.finish();
|
||||
let mut read = BitReadStream::new(BitReadBuffer::new_owned(data, BigEndian));
|
||||
assert_eq!(val, read.read().unwrap());
|
||||
assert_eq!(size, read.pos());
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_basic_struct() {
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite)]
|
||||
struct Foo {
|
||||
int: u32,
|
||||
float: f64,
|
||||
#[size = 2]
|
||||
smaller_int: u8,
|
||||
signed: i32,
|
||||
#[size = 3]
|
||||
smaller_signed: i32,
|
||||
dynamic_string: String,
|
||||
#[size = 3]
|
||||
fixed_string: String,
|
||||
}
|
||||
roundtrip(Foo {
|
||||
int: 1234,
|
||||
float: 10.2,
|
||||
smaller_int: 3,
|
||||
signed: -3,
|
||||
smaller_signed: -1,
|
||||
dynamic_string: "Foobar".to_string(),
|
||||
fixed_string: "asd".to_string(),
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bare_enum() {
|
||||
#[derive(Debug, PartialEq, BitRead, BitWrite)]
|
||||
#[discriminant_bits = 4]
|
||||
enum Enum {
|
||||
A,
|
||||
B,
|
||||
C,
|
||||
D,
|
||||
}
|
||||
roundtrip(Enum::A);
|
||||
roundtrip(Enum::B);
|
||||
roundtrip(Enum::C);
|
||||
roundtrip(Enum::D);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue