evering 0.1.0

Typed shared-memory communication across processes
#![cfg(all(feature = "map", windows))]

use evering::{
    Session,
    layout::RegionId,
    mapping::{Access, Request, Source},
    os::windows::Section,
};

#[test]
fn anonymous_section_is_a_safe_session_source() {
    const SIZE: usize = 4 * 1024 * 1024;
    let section = Section::anonymous(SIZE, Access::READ | Access::WRITE).unwrap();
    let session = Session::create(
        section,
        Request::new(SIZE, Access::READ | Access::WRITE),
        RegionId::new(0x5749_4e44_4f57_534d, 1),
    )
    .unwrap();
    assert_ne!(session.base_addr(), 0);
}

#[test]
fn section_rejects_empty_unreadable_and_escalated_mappings() {
    assert!(Section::anonymous(0, Access::READ).is_err());
    assert!(Section::anonymous(4096, Access::WRITE).is_err());

    let section = Section::anonymous(4096, Access::READ).unwrap();
    assert!(
        <Section<_> as Source>::map(section, Request::new(4096, Access::READ | Access::WRITE),)
            .is_err()
    );
}