#![feature(trait_alias)]
#![warn(missing_docs)]
#![warn(non_ascii_idents)]
#![warn(unnameable_types)]
#![warn(unreachable_pub)]
#![allow(clippy::tabs_in_doc_comments)]
mod edge;
pub mod forces;
mod layout;
mod node;
pub mod trees;
mod util;
pub use edge::{EdgeBTreeMap, EdgeHashMap, EdgeVec, Edges};
pub use layout::{Layout, Settings};
pub use node::{AbstractNode, BuildableNodes, Node, NodeHashMap, NodeVec, Nodes};
#[cfg(feature = "rand")]
pub use util::sample_unit_cube;
pub use util::{Coord, Vec2, Vec3, VecN};
#[cfg(test)]
mod tests {
use super::*;
#[cfg(feature = "rand")]
#[test]
fn test_global() {
let mut rng = rand::thread_rng();
let mut layout = Layout::<f64, 2>::from_abstract(
Settings::default(),
(0..5).map(|i| {
(
i,
AbstractNode {
mass: 1.0,
size: 1.0,
},
)
}),
vec![
((0, 1), 1.0),
((0, 2), 1.0),
((0, 3), 1.0),
((1, 2), 1.0),
((1, 4), 1.0),
],
&mut rng,
);
for _ in 0..10 {
layout.iteration();
}
layout
.nodes
.iter()
.for_each(|node| println!("{:?}", node.pos));
}
type Id = i32;
#[test]
fn test_types() {
Layout::<f32, 2, EdgeVec<f32, usize>, NodeVec<f32, 2>, usize>::default();
Layout::<f32, 2, EdgeVec<f32, Id>, NodeHashMap<f32, 2, Id>, Id>::default();
Layout::<f32, 2, EdgeBTreeMap<f32, usize>, NodeVec<f32, 2>, usize>::default();
Layout::<f32, 2, EdgeBTreeMap<f32, Id>, NodeHashMap<f32, 2, Id>, Id>::default();
Layout::<f32, 2, EdgeHashMap<f32, usize>, NodeVec<f32, 2>, usize>::default();
Layout::<f32, 2, EdgeHashMap<f32, Id>, NodeHashMap<f32, 2, Id>, Id>::default();
Layout::<f32, 3, EdgeVec<f32, usize>, NodeVec<f32, 3>, usize>::default();
Layout::<f32, 3, EdgeVec<f32, Id>, NodeHashMap<f32, 3, Id>, Id>::default();
Layout::<f32, 3, EdgeBTreeMap<f32, usize>, NodeVec<f32, 3>, usize>::default();
Layout::<f32, 3, EdgeBTreeMap<f32, Id>, NodeHashMap<f32, 3, Id>, Id>::default();
Layout::<f32, 3, EdgeHashMap<f32, usize>, NodeVec<f32, 3>, usize>::default();
Layout::<f32, 3, EdgeHashMap<f32, Id>, NodeHashMap<f32, 3, Id>, Id>::default();
}
}