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}