quantized-density-fields 0.2.3

Rust implementation of Quantized Density Fields data structure.
Documentation
#![cfg(test)]

use super::*;

#[test]
fn test_2d() {
    let lod = LOD::new(2, 0, 1);
    let root = lod.root();
    assert!(lod.level_exists(root));
    if let None = lod.try_get_level(root) {
        assert!(false);
    }
    let level = lod.level(root).clone();
    assert_eq!(level.id(), root);
    assert_eq!(level.parent(), None);
    assert_eq!(*level.state(), 1);
    assert!(level.sublevels().is_empty());

    let lod = LOD::new(2, 1, 4);
    let root = lod.root();
    let level = lod.level(root).clone();
    assert_eq!(level.sublevels().len(), 4);
    for root2 in level.sublevels() {
        let level2 = lod.level(*root2).clone();
        assert_eq!(level2.parent().unwrap(), root);
        assert_eq!(*level2.state(), 1);
        assert!(level2.sublevels().is_empty());
    }

    let mut lod = LOD::new(2, 2, 16);
    let root = lod.root();
    let level = lod.level(root).clone();
    assert_eq!(level.sublevels().len(), 4);
    for root2 in level.sublevels() {
        let level2 = lod.level(*root2).clone();
        assert_eq!(level2.parent().unwrap(), root);
        assert_eq!(*level2.state(), 4);
        for root3 in level2.sublevels() {
            let level3 = lod.level(*root3).clone();
            assert_eq!(level3.parent().unwrap(), *root2);
            assert_eq!(*level3.state(), 1);
            assert!(level3.sublevels().is_empty());
        }
    }
    {
        let root2 = level.sublevels()[0];
        let level2 = lod.level(root2).clone();
        let root3 = level2.sublevels()[0];
        lod.set_level_state(root3, 5).unwrap();
        let level3 = lod.level(root3).clone();
        assert_eq!(*level3.state(), 5)
    }
    assert_eq!(*lod.state(), 20);

    {
        let root2a = level.sublevels()[0];
        let level2a = lod.level(root2a).clone();
        let root3a = level2a.sublevels()[0];
        let root2b = level.sublevels()[3];
        let level2b = lod.level(root2b).clone();
        let root3b = level2b.sublevels()[3];
        assert_eq!(lod.find_path(root2a, root2b).unwrap(), vec![root2a, root2b]);
        assert_eq!(
            lod.find_path(root3a, root3b).unwrap(),
            vec![
                root3a,
                level2a.sublevels()[1],
                level2b.sublevels()[1],
                level2b.sublevels()[0],
                root3b,
            ]
        );
    }
}