mnemosyne-memory-core 0.3.0

Core allocator types, policies, and validation for Mnemosyne
Documentation
use super::*;

#[test]
fn standard_policy_has_no_mitigations() {
    assert_eq!(StandardPolicy::MITIGATION_FLAGS, mitigations::NONE);
    assert_eq!(StandardPolicy::POLICY_NAME, "standard");
    assert_eq!(StandardPolicy::POLICY_FINGERPRINT & 0x1F, 0);
}

#[test]
fn hardened_policy_has_all_implemented_mitigations() {
    assert_eq!(HardenedPolicy::POLICY_NAME, "hardened");
    assert_ne!(HardenedPolicy::MITIGATION_FLAGS, mitigations::NONE);
    const _: () = assert!(HardenedPolicy::ENABLE_POISONING);
    const _: () = assert!(HardenedPolicy::ENABLE_FREE_LIST_ENCRYPTION);
}

#[test]
fn policy_fingerprints_are_distinct() {
    assert_ne!(
        StandardPolicy::POLICY_FINGERPRINT,
        SecurePolicy::POLICY_FINGERPRINT
    );
    assert_ne!(
        StandardPolicy::POLICY_FINGERPRINT,
        HardenedPolicy::POLICY_FINGERPRINT
    );
    assert_ne!(
        SecurePolicy::POLICY_FINGERPRINT,
        HardenedPolicy::POLICY_FINGERPRINT
    );
}

#[test]
fn policy_fingerprint_encodes_key_flags() {
    assert_eq!(
        StandardPolicy::POLICY_FINGERPRINT & 1,
        StandardPolicy::ENABLE_POISONING as u64
    );
    assert_eq!(
        HardenedPolicy::POLICY_FINGERPRINT & 1,
        HardenedPolicy::ENABLE_POISONING as u64
    );
}

#[test]
fn policy_marker_is_zero_sized() {
    assert_eq!(core::mem::size_of::<PolicyMarker<StandardPolicy>>(), 0);
    assert_eq!(core::mem::size_of::<PolicyMarker<HardenedPolicy>>(), 0);
}