blob: 46aae94956b84864ebd0abab4ba72fe885bdabd0 [file] [log] [blame]
#![cfg(feature = "bitvec")]
use bitvec::prelude::*;
use nom::{
bytes::complete::{tag, take},
combinator::map,
IResult,
};
#[test]
fn parse_bitstream() {
let data = [0xA5u8, 0x69, 0xF0, 0xC3];
let bits = data.view_bits::<Msb0>();
fn parser(bits: &BitSlice<Msb0, u8>) -> IResult<&BitSlice<Msb0, u8>, &BitSlice<Msb0, u8>> {
tag(bits![1, 0, 1, 0])(bits)
}
assert_eq!(parser(bits), Ok((&bits[4..], &bits[..4])));
}
#[test]
fn parse_bitstream_map() {
let data = [0b1000_0000];
let bits = data.view_bits::<Msb0>();
fn parser(bits: &BitSlice<Msb0, u8>) -> IResult<&BitSlice<Msb0, u8>, bool> {
map(take(1_u8), |val: &BitSlice<Msb0, u8>| val[0])(bits)
}
assert_eq!(parser(bits), Ok((&bits[1..], true)));
}