molgfx-core 0.3.2

The semantic scene graph: columnar tables, GPU record layouts, the borrowed coordinate seam.
Documentation
use crate::{Ensemble, Scene};
use std::sync::Arc;

#[test]
fn scene_ensembles_validate_members_and_keep_stable_handles() {
    let structure = crate::fixture::structure();
    let mut scene = Scene::new();
    let first = scene
        .add_structure(&structure)
        .unwrap_or_else(|error| panic!("{error}"));
    let second = scene
        .add_structure(&structure)
        .unwrap_or_else(|error| panic!("{error}"));
    let ensemble = Ensemble::new(Arc::from([first, second]), &[0.7, 0.3], "caller:poses")
        .unwrap_or_else(|error| panic!("{error}"));
    let handle = scene
        .add_ensemble(ensemble)
        .unwrap_or_else(|error| panic!("{error}"));
    assert_eq!(
        scene.ensemble(handle).map(|value| value.members().len()),
        Some(2)
    );
    assert_eq!(scene.ensembles().count(), 1);
    assert!(scene.remove_ensemble(handle).is_some());
    assert!(scene.ensemble(handle).is_none());

    let stale = Ensemble::new(Arc::from([first, second]), &[0.5, 0.5], "caller:stale")
        .unwrap_or_else(|error| panic!("{error}"));
    scene.remove_structure(first);
    assert!(matches!(
        scene.add_ensemble(stale),
        Err(crate::CoreError::StaleHandle)
    ));
}