identity.rs

1.1 kB · rust · 30 lines

1use crate::rules::{output, RULES};2use mrlymath::bang::code_to_corners;34pub fn report() {5    println!("IDENTITY");6    let mut checked = 0usize;7    for rule in 0..RULES {8        let corners = code_to_corners(rule as u128, 3, 2).expect("the code fits three axes");9        let mut from_design = [false; 8];10        for corner in &corners {11            from_design[4 * corner[0] as usize + 2 * corner[1] as usize + corner[2] as usize] =12                true;13        }14        for l in 0..2u8 {15            for c in 0..2u8 {16                for r in 0..2u8 {17                    let index = 4 * l as usize + 2 * c as usize + r as usize;18                    assert_eq!(19                        from_design[index],20                        output(rule, l, c, r) == 1,21                        "rule {rule} disagrees with bang dim 3, code {rule} at ({l},{c},{r})"22                    );23                    checked += 1;24                }25            }26        }27    }28    println!("rule N and bang dim 3, code N agree on all {checked} rule cells over {RULES} codes");29    println!("the dictionary is (x0,x1,x2) = (l,c,r) and corner index i = 4 x0 + 2 x1 + x2");30}