selene-db-core 1.3.0

Foundation types for the selene-db ISO/IEC 39075:2024 GQL property graph engine.
Documentation
use proptest::prelude::*;

use super::*;
use crate::{Value, db_string};

proptest! {
    #[test]
    fn random_label_diff_preserves_sorted_deduped(
        raw_added in proptest::collection::vec(0_u8..32, 0..32),
        raw_removed in proptest::collection::vec(33_u8..64, 0..32),
    ) {
        let added = raw_added.into_iter().map(|value| {
            let name = format!("change.diff.{value}");
            db_string(&name).unwrap()
        });
        let removed = raw_removed.into_iter().map(|value| {
            let name = format!("change.diff.{value}");
            db_string(&name).unwrap()
        });
        let diff = LabelDiff::new(added, removed).unwrap();
        prop_assert!(diff.added.windows(2).all(|pair| pair[0] < pair[1]));
        prop_assert!(diff.removed.windows(2).all(|pair| pair[0] < pair[1]));
        prop_assert!(diff.added.iter().all(|label| !diff.removed.contains(label)));
    }

    #[test]
    fn random_property_diff_preserves_sorted_sets(
        raw_set in proptest::collection::vec(0_u8..32, 0..32),
        raw_removed in proptest::collection::vec(33_u8..64, 0..32),
    ) {
        let set = raw_set.into_iter().map(|value| {
            let name = format!("change.prop.{value}");
            (db_string(&name).unwrap(), Value::Uint(u64::from(value)))
        });
        let removed = raw_removed.into_iter().map(|value| {
            let name = format!("change.prop.{value}");
            db_string(&name).unwrap()
        });
        let diff = PropertyDiff::new(set, removed).unwrap();
        prop_assert!(diff.set.windows(2).all(|pair| pair[0].0 < pair[1].0));
        prop_assert!(diff.removed.windows(2).all(|pair| pair[0] < pair[1]));
    }
}