yttria-coding 0.1.1

A mathematical coding library tailored for use with the yttria set of libraries
Documentation
pub fn generate_gray_code(n_bits: u8) -> Vec<u8> {
    assert!(n_bits > 0);

    if n_bits == 1 {
        vec![0u8, 1]
    } else {
        let last_code = generate_gray_code(n_bits - 1);

        let mut last_code_reversed = last_code.clone();
        last_code_reversed.reverse();

        for i in last_code_reversed.iter_mut() {
            *i |= 1 << (n_bits - 1);
        }

        [last_code, last_code_reversed].concat()
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_gray_codes() {
        let code = generate_gray_code(1);
        println!("{code:?}");

        let code = generate_gray_code(2);
        println!("{code:?}");

        let code = generate_gray_code(3);
        println!("{code:?}");
    }
}