blackbox_log/parser/decode/
negative_14_bit.rs1use super::variable;
2use crate::parser::InternalResult;
3use crate::Reader;
4
5pub(crate) fn negative_14_bit(data: &mut Reader) -> InternalResult<i32> {
6 let result = variable(data)? as u16;
7 let result: i32 = if (result & 0x2000) > 0 {
8 (result | 0xC000).cast_signed().into()
9 } else {
10 result.into()
11 };
12
13 Ok(-result)
14}
15
16#[cfg(test)]
17mod tests {
18 use test_case::case;
19
20 use super::*;
21
22 #[case(0, &[0]; "zero")]
23 #[case(-0x1FFF, &[0xFF, 0x3F]; "min")]
24 #[case(0x2000, &[0x80, 0x40]; "max")]
25 #[case(1, &[0xFF, 0x7F]; "all bits set")]
26 #[case(1, &[0xFF, 0xFF, 0xFF, 0xFF, 0x7F]; "extra bits ignored")]
27 fn decode(expected: i32, bytes: &[u8]) {
28 let mut b = Reader::new(bytes);
29 assert_eq!(expected, negative_14_bit(&mut b).unwrap());
30 }
31}