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}