#[test] /// Take the `bits` function and assert that remaining bytes are correctly returned, if the /// previous bytes are fully consumed fn test_complete_byte_consumption_bits() { let input = &[0x12, 0x34, 0x56, 0x78][..];
// Take 3 bit slices with sizes [4, 8, 4]. #[allow(clippy::type_complexity)] let result: ModalResult<(&[u8], (u8, u8, u8)), InputError<_>> =
bits::<_, _, ErrMode<InputError<(&[u8], usize)>>, _, _>((
take(4usize),
take(8usize),
take(4usize),
))
.parse_peek(input);
let output = result.expect("We take 2 bytes and the input is longer than 2 bytes");
let remaining = output.0;
assert_eq!(remaining, [0x56, 0x78]);
#[test] /// Take the `bits` function and assert that remaining bytes are correctly returned, if the /// previous bytes are NOT fully consumed. Partially consumed bytes are supposed to be dropped. /// I.e. if we consume 1.5 bytes of 4 bytes, 2 bytes will be returned, bits 13-16 will be /// dropped. fn test_partial_byte_consumption_bits() { let input = &[0x12, 0x34, 0x56, 0x78][..];
// Take bit slices with sizes [4, 8]. let result: ModalResult<(&[u8], (u8, u8)), InputError<_>> =
bits::<_, _, ErrMode<InputError<(&[u8], usize)>>, _, _>((take(4usize), take(8usize)))
.parse_peek(input);
let output = result.expect("We take 1.5 bytes and the input is longer than 2 bytes");
let remaining = output.0;
assert_eq!(remaining, [0x56, 0x78]);
let parsed = output.1;
assert_eq!(parsed.0, 0x01);
assert_eq!(parsed.1, 0x23);
}
#[test] #[cfg(feature = "std")] /// Ensure that in Incomplete error is thrown, if too few bytes are passed for a given parser. fn test_incomplete_bits() { let input = Partial::new(&[0x12][..]);
// Take bit slices with sizes [4, 8]. let result: ModalResult<(_, (u8, u8)), InputError<_>> =
bits::<_, _, ErrMode<InputError<(_, usize)>>, _, _>((take(4usize), take(8usize)))
.parse_peek(input);
assert!(result.is_err()); let error = result.err().unwrap();
assert_eq!("Parsing requires 2 more data", error.to_string());
}
#[test] fn test_take_complete_0() { let input = &[0b00010010][..]; let count = 0usize;
assert_eq!(count, 0usize); let offset = 0usize;
let result: ModalResult<((&[u8], usize), usize), InputError<_>> =
take(count).parse_peek((input, offset));
assert_eq!(result, Ok(((input, offset), 0)));
}
#[test] fn test_take_complete_eof() { let input = &[0b00010010][..];
let result: ModalResult<((&[u8], usize), usize), InputError<_>> =
take(1usize).parse_peek((input, 8));
#[test] fn test_take_partial_0() { let input = Partial::new(&[][..]); let count = 0usize;
assert_eq!(count, 0usize); let offset = 0usize;
let result: ModalResult<((_, usize), usize), InputError<_>> =
take(count).parse_peek((input, offset));
assert_eq!(result, Ok(((input, offset), 0)));
}
#[test] fn test_pattern_partial_ok() { let input = Partial::new(&[0b00011111][..]); let offset = 0usize; let bits_to_take = 4usize; let value_to_pattern = 0b0001;
let result: ModalResult<((_, usize), usize), InputError<_>> =
pattern(value_to_pattern, bits_to_take).parse_peek((input, offset));
#[test] fn test_pattern_partial_err() { let input = Partial::new(&[0b00011111][..]); let offset = 0usize; let bits_to_take = 4usize; let value_to_pattern = 0b1111;
let result: ModalResult<((_, usize), usize), InputError<_>> =
pattern(value_to_pattern, bits_to_take).parse_peek((input, offset));
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.