molframe-core 0.6.1

Core types, storage and analysis contracts for molframe
Documentation
use super::ExtensionStore;
use std::sync::Arc;

#[test]
fn values_require_both_matching_key_and_type() {
    let mut extensions = ExtensionStore::new();
    extensions.insert("example.count.v1", 7_u32);

    assert_eq!(extensions.get::<u32>("example.count.v1"), Some(&7));
    assert!(extensions.get::<u64>("example.count.v1").is_none());
    assert!(extensions.get::<u32>("example.other.v1").is_none());
}

#[test]
fn clones_share_values_and_keep_sorted_keys() {
    let mut extensions = ExtensionStore::new();
    extensions.insert("z.v1", String::from("shared"));
    extensions.insert("a.v1", 1_u8);
    let clone = extensions.clone();

    assert_eq!(clone.keys().collect::<Vec<_>>(), ["a.v1", "z.v1"]);
    let left = extensions.get_shared::<String>("z.v1");
    let right = clone.get_shared::<String>("z.v1");
    assert!(matches!((left, right), (Some(left), Some(right)) if Arc::ptr_eq(&left, &right)));
}

#[test]
fn clear_removes_every_value() {
    let mut extensions = ExtensionStore::new();
    extensions.insert("example.v1", true);
    assert_eq!(extensions.len(), 1);

    extensions.clear();

    assert!(extensions.is_empty());
}