ham_cats/
soft_bit.rs

1pub use labrador_ldpc::decoder::DecodeFrom;
2
3// Less than zero = 1 bit
4// Greater than zero = 0 bit
5pub trait FromHardBit {
6    fn from_hard_bit(bit: bool) -> Self;
7}
8
9impl<T: DecodeFrom> FromHardBit for T {
10    fn from_hard_bit(bit: bool) -> Self {
11        if bit {
12            -Self::one()
13        } else {
14            Self::one()
15        }
16    }
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    #[test]
24    fn e2e() {
25        assert!(f32::from_hard_bit(true).hard_bit());
26        assert!(!f32::from_hard_bit(false).hard_bit());
27
28        assert!(f64::from_hard_bit(true).hard_bit());
29        assert!(!f64::from_hard_bit(false).hard_bit());
30
31        assert!(i8::from_hard_bit(true).hard_bit());
32        assert!(!i8::from_hard_bit(false).hard_bit());
33
34        assert!(i16::from_hard_bit(true).hard_bit());
35        assert!(!i16::from_hard_bit(false).hard_bit());
36
37        assert!(i32::from_hard_bit(true).hard_bit());
38        assert!(!i32::from_hard_bit(false).hard_bit());
39    }
40}