use labrador_ldpc::decoder::DecodeFrom; // Less than zero = 1 bit // Greater than zero = 0 bit pub trait SoftBit { fn from_hard_bit(bit: bool) -> Self; fn hard_bit(&self) -> bool; } impl<T: DecodeFrom> SoftBit for T { fn from_hard_bit(bit: bool) -> Self { if bit { -Self::one() } else { Self::one() } } fn hard_bit(&self) -> bool { self < &T::zero() } } #[cfg(test)] mod tests { use super::*; #[test] fn e2e() { assert!(f32::from_hard_bit(true).hard_bit()); assert!(!f32::from_hard_bit(false).hard_bit()); assert!(f64::from_hard_bit(true).hard_bit()); assert!(!f64::from_hard_bit(false).hard_bit()); assert!(i8::from_hard_bit(true).hard_bit()); assert!(!i8::from_hard_bit(false).hard_bit()); assert!(i16::from_hard_bit(true).hard_bit()); assert!(!i16::from_hard_bit(false).hard_bit()); assert!(i32::from_hard_bit(true).hard_bit()); assert!(!i32::from_hard_bit(false).hard_bit()); } }