staircase.rs
3.1 kB · rust · 88 lines
1use demos::sieve::*;2use mrlyrs::core::error::parse;34#[test]5fn the_staircase_exports_answer() {6 let seven = parse(&staircase_read("7", 2, 3, false).unwrap()).unwrap();7 assert_eq!(seven["profile"].to_string(), "[1,2,0]");8 assert_eq!(seven["drift"].to_string(), "[1,3]");9 assert_eq!(seven["correction"].to_string(), "[17,36]");10 assert_eq!(seven["closed"], "3 pi/(4 Gamma(1/3))");11 assert_eq!(12 format!("{:.12}", seven["constant"].as_f64().unwrap()),13 "0.879525401448"14 );15 assert!(seven["reflection"].is_null());16 assert_eq!(seven["mirror"]["code"], "14");17 assert_eq!(seven["mirror"]["closed"], "3 pi/(8 Gamma(2/3))");18 assert_eq!(19 format!("{:.12}", seven["mirror"]["product"].as_f64().unwrap()),20 "0.765196606786"21 );22 let fills: Vec<String> = seven["levels"]23 .as_array()24 .unwrap()25 .iter()26 .map(|row| row["fill"].as_str().unwrap().to_string())27 .collect();28 assert_eq!(fills, ["8", "21", "40"]);2930 let diagonal = parse(&staircase_read("9", 2, 2, false).unwrap()).unwrap();31 assert_eq!(diagonal["closed"], "cosh(pi/2)/2");32 assert_eq!(33 format!("{:.12}", diagonal["reflection"].as_f64().unwrap()),34 "1.254589239329"35 );36 assert_eq!(diagonal["parity"]["odd"], false);37 assert_eq!(38 format!("{:.12}", diagonal["parity"]["value"].as_f64().unwrap()),39 "1.254589239329"40 );4142 let solid = parse(&staircase_read("23", 3, 2, false).unwrap()).unwrap();43 assert_eq!(solid["closed"], "pi^(3/2)/(2 Gamma(1/4))");44 assert_eq!(45 format!("{:.12}", solid["constant"].as_f64().unwrap()),46 "0.767916038651"47 );48 assert_eq!(solid["floor"], "7");4950 let even = parse(&staircase_read("7", 2, 4, true).unwrap()).unwrap();51 let flat = even["levels"]52 .as_array()53 .unwrap()54 .iter()55 .all(|row| row["settle"].as_f64() == Some(1.0));56 assert!(flat);5758 assert_eq!(seven["coordinates"].to_string(), "[4,2]");59 assert_eq!(60 format!("{:.12}", seven["mirror"]["both"].as_f64().unwrap()),61 "0.765196606786"62 );63 assert_eq!(64 seven["levels"][2]["word"].to_string(),65 r#"["105","6720","11025"]"#66 );6768 let walk = staircase_walk("6", 2, 1_000_000, 7, false).unwrap();69 assert_eq!(walk.len(), 28);70 assert_eq!(walk[24], 1_000_000.0);71 assert!((walk[25] - std::f64::consts::FRAC_PI_4).abs() < 1e-6);72 assert!((walk[25] - walk[26]).abs() < 1e-11);73 let seven_walk = staircase_walk("7", 2, 100_000, 6, false).unwrap();74 assert_eq!(75 format!("{:.4}", seven_walk[23]),76 format!("{:.4}", 17.0 / 36.0)77 );7879 assert_eq!(staircase_cap(false), 4);80 assert_eq!(staircase_cap(true), 4);81 let grid = staircase_grid("7", 2, 2, false).unwrap();82 assert_eq!((grid.width, grid.height), (15, 15));83 assert_eq!(grid.types.iter().map(|&b| b as usize).sum::<usize>(), 168);84 let line = staircase_grid("1", 1, 3, false).unwrap();85 assert_eq!(line.width, 105);86 assert!(staircase_grid("240", 3, 1, false).is_err());87 assert!(staircase_read("0", 2, 3, false).is_err());88}