use std::fmt;
use asterix_parser::asterix::uap::common::dataitems::{get_bitvec_subset_as_msb0, get_msb_bits};
use bitvec::prelude::*;
#[test]
pub(crate) fn test_bitvec() {
let mut bv: BitVec = BitVec::new();
bv.push(false);
bv.push(true);
bv.push(false);
bv.push(false);
bv.push(false);
bv.push(false);
bv.push(false);
bv.push(false);
assert_eq!(bv.len(), 8);
assert_eq!(bv[0], false);
let mut bv_m = bitvec![u16, Msb0;];
bv_m.push(false);
bv_m.push(true);
bv_m.push(false);
bv_m.push(false);
bv_m.push(false);
bv_m.push(false);
bv_m.push(false);
bv_m.push(false);
let mut bv_l = bitvec![u16, Lsb0;];
bv_l.push(false);
bv_l.push(true);
bv_l.push(false);
bv_l.push(false);
bv_l.push(false);
bv_l.push(false);
bv_l.push(false);
bv_l.push(false);
println!("bv {}, bv_m {}, bv_l {}", bv, bv_m, bv_l);
println!("bv {}, bv_m {}, bv_l {}", bv, bv_m, bv_l);
print!("bv positions: ");
for i in 0..8 {
print!("{}", if bv[i] { "1" } else { "0" });
}
println!();
print!("bv_m positions: ");
for i in 0..8 {
print!("{}", if bv_m[i] { "1" } else { "0" });
}
println!();
print!("bv_l positions: ");
for i in 0..8 {
print!("{}", if bv_l[i] { "1" } else { "0" });
}
println!();
let can_id: &[_] = &[0b10100000 as u8];
let can_id_bits = get_msb_bits(&can_id);
assert_eq!(can_id_bits[0], true, "bit 7 should be true");
assert_eq!(can_id_bits[1], false, "bit 6 should be false");
assert_eq!(can_id_bits[2], true, "bit 5 should be true");
assert_eq!(can_id_bits[7], false, "bit 0 should be false");
}
#[test]
pub(crate) fn test_bitvec_from_u8_vec() {
let source = vec![0b1010_0101_u8, 0b11110000, 0b00001111];
let bv: BitVec<u8, Msb0> = BitVec::<_, Msb0>::from_vec(source);
let mut count = 0;
println!("bv {}", bv);
for bit in bv {
println!("Bit {}: {}", count, bit);
count += 1;
}
}
#[test]
pub(crate) fn test_bitvec_split_off() {
let mut bv = bitvec![0, 1, 0, 0, 1, 0, 0, 0];
let bv2 = bv.split_off(2);
assert_eq!((&*bv, &*bv2), (bits![0, 1], bits![0, 0, 1, 0, 0, 0]));
let mut bv = bitvec![0, 1, 0, 0, 1, 0, 0, 0];
let mut bv2 = bv.split_off(1);
assert_eq!((&*bv, &*bv2), (bits![0], bits![1, 0, 0, 1, 0, 0, 0]));
let bv3 = bv2.split_off(3);
assert_eq!((&*bv2, &*bv3), (bits![1, 0, 0], bits![1, 0, 0, 0]));
println!("Stringyfied {}", stringify!("Test"));
}
#[test]
pub(crate) fn test_bitvec_subset() {
let trim_characters: &[_] = &['[', ']', ' ', ','][..];
let octet_bits = get_expected_bits_from_u8_vec(&vec![0x20 as u8, 0xF5]);
let expected_bits = get_bitvec_subset_as_msb0(&octet_bits, 16, 14);
let expected_bits_as_string = fmt::format(format_args!("{:b}", &expected_bits)).replace(trim_characters, "");
let requested_subset = get_bitvec_subset_as_msb0(&octet_bits, 16, 14);
let requested_subset_as_string = fmt::format(format_args!("{:b}", &requested_subset)).replace(trim_characters, "");
println!("Expected bits: {}", expected_bits_as_string);
println!("Requested bits: {}", requested_subset_as_string);
assert_eq!(expected_bits, requested_subset);
}
fn get_expected_bits_from_u8_vec(vec_u8: &Vec<u8>) -> BitVec<u8, Msb0> {
let bitvec = get_msb_bits(vec_u8.as_slice());
bitvec
}