graph.rs
2.4 kB · rust · 67 lines
1pub use crate::dim::graph::{core_graph, edge_graph, tunnel_graph};23#[cfg(test)]4mod tests {5 use super::*;6 use crate::two::designs;7 use mrlynum::graph::census;8 #[test]9 fn carpet_graphs() {10 let cell = designs::carpet(3, 1).unwrap();11 let core = core_graph(&cell).unwrap();12 assert_eq!(core.nodes.len(), 8);13 assert_eq!(core.branches.len(), 8);14 assert_eq!(census(&core).components, 1);15 assert_eq!(tunnel_graph(&cell).unwrap().nodes.len(), 1);16 assert!(edge_graph(&cell).unwrap().nodes.len() > 8);17 }18}1920#[cfg(test)]21mod spectra {22 use super::*;23 use crate::two::designs;24 use mrlynum::graph::census;25 use mrlynum::spectrum::{clusters, laplacian_spectrum, multiplicity};2627 #[test]28 fn the_sierpinski_normalised_spectrum_holds_its_degeneracy_table() {29 let root = 30f64.sqrt() / 6.0;30 let rows = [31 (1usize, 3usize, 3usize, 0usize, 0.0000, 1usize, 0usize),32 (2, 9, 7, 1, 0.3333, 3, 1),33 (3, 27, 17, 3, 0.4815, 9, 2),34 (4, 81, 43, 9, 0.5802, 27, 4),35 (5, 243, 111, 25, 0.6461, 81, 10),36 (6, 729, 289, 67, 0.6955, 243, 28),37 ];38 for (level, nodes, distinct, classes, fraction, one, pair) in rows {39 let cell = designs::create(7, 2, level, 0, 2).unwrap();40 let graph = core_graph(&cell).unwrap();41 assert_eq!(graph.nodes.len(), nodes, "l={level}");42 assert_eq!(census(&graph).components, 1, "l={level}");43 let spectrum = laplacian_spectrum(&graph, true).unwrap();44 let groups = clusters(&spectrum, 1e-9);45 let repeated: usize = groups.iter().filter(|g| g.1 > 1).map(|g| g.1).sum();46 assert_eq!(groups.len(), distinct, "l={level}");47 assert_eq!(48 groups.iter().filter(|g| g.1 > 1).count(),49 classes,50 "l={level}"51 );52 let got = (repeated as f64 / nodes as f64 * 10000.0).round() / 10000.0;53 assert!((got - fraction).abs() < 1e-9, "l={level} {got}");54 assert_eq!(multiplicity(&spectrum, 1.0, 1e-12), one, "l={level}");55 assert_eq!(56 multiplicity(&spectrum, 1.0 - root, 1e-12),57 pair,58 "l={level}"59 );60 assert_eq!(61 multiplicity(&spectrum, 1.0 + root, 1e-12),62 pair,63 "l={level}"64 );65 }66 }67}