triblespace 0.41.2

The Triblespace: A lightweight knowledge base for rust.
Documentation
use triblespace::core::metadata;
use triblespace::prelude::*;

fn entity_id(set: &TribleSet) -> triblespace::core::id::Id {
    *set.iter().next().expect("non-empty set").e()
}

#[test]
fn entity_repeated_order_and_duplicates_are_ignored() {
    let tags_ab = entity! { _ @
        metadata::tag*: [metadata::KIND_MULTI, metadata::KIND_INLINE_ENCODING],
    };

    let tags_ba = entity! { _ @
        metadata::tag*: [metadata::KIND_INLINE_ENCODING, metadata::KIND_MULTI],
    };

    let tags_dup = entity! { _ @
        metadata::tag*: [
            metadata::KIND_MULTI,
            metadata::KIND_INLINE_ENCODING,
            metadata::KIND_MULTI,
        ],
    };

    assert_eq!(tags_ab, tags_ba);
    assert_eq!(entity_id(&tags_ab), entity_id(&tags_ba));
    assert_eq!(tags_ab, tags_dup);
    assert_eq!(entity_id(&tags_ab), entity_id(&tags_dup));
}

#[test]
fn entity_repeated_empty_is_ignored() {
    let json_kinds: Vec<&'static str> = Vec::new();

    let base = entity! { _ @
        metadata::tag: metadata::KIND_MULTI,
    };

    let with_empty = entity! { _ @
        metadata::tag: metadata::KIND_MULTI,
        metadata::json_kind*: json_kinds,
    };

    assert_eq!(base, with_empty);
    assert_eq!(entity_id(&base), entity_id(&with_empty));
}

#[test]
fn entity_repeated_affects_id_and_insertions() {
    let base = entity! { _ @
        metadata::tag: metadata::KIND_MULTI,
    };

    let with_tags = entity! { _ @
        metadata::tag*: [metadata::KIND_MULTI, metadata::KIND_INLINE_ENCODING],
    };

    assert_ne!(entity_id(&base), entity_id(&with_tags));
    assert_eq!(base.len() + 1, with_tags.len());
}