#![cfg(feature = "test")]
use zenoh_shm::shm::Segment;
#[test]
fn create() {
let id = (line!() as u64) + ((std::process::id() as u64) << 32);
let len = 1024.try_into().unwrap();
let created_segment = Segment::create(id, len).unwrap();
assert!(created_segment.len() >= len);
}
#[test]
fn create_concurrent() {
let id = (line!() as u64) + ((std::process::id() as u64) << 32);
let len = 1024.try_into().unwrap();
let created_segment = Segment::create(id, len).unwrap();
assert!(created_segment.len() >= len);
assert!(Segment::create(id, len).is_err());
}
#[test]
fn create_and_open() {
let id = (line!() as u64) + ((std::process::id() as u64) << 32);
let len = 1024.try_into().unwrap();
let created_segment = Segment::create(id, len).unwrap();
let opened_segment = Segment::open(id).unwrap();
assert!(created_segment.len() >= len);
assert!(opened_segment.len() >= len);
}
#[test]
fn create_and_open_and_reopen() {
let id = (line!() as u64) + ((std::process::id() as u64) << 32);
let len = 1024.try_into().unwrap();
let created_segment = Segment::create(id, len).unwrap();
let opened_segment = Segment::open(id).unwrap();
let opened_segment2 = Segment::open(id).unwrap();
assert!(created_segment.len() >= len);
assert!(opened_segment.len() >= len);
assert!(opened_segment2.len() >= len);
}
#[test]
fn create_and_open_and_reopen_and_open_closed() {
let id = (line!() as u64) + ((std::process::id() as u64) << 32);
let len = 1024.try_into().unwrap();
let created_segment = Segment::create(id, len).unwrap();
let opened_segment = Segment::open(id).unwrap();
assert!(created_segment.len() >= len);
assert!(opened_segment.len() >= len);
drop(created_segment);
let opened_segment2 = Segment::open(id).unwrap();
assert!(opened_segment2.len() >= len);
}
#[test]
fn no_persistency() {
let id = (line!() as u64) + ((std::process::id() as u64) << 32);
let len = 1024.try_into().unwrap();
let created_segment = Segment::create(id, len).unwrap();
assert!(created_segment.len() >= len);
drop(created_segment);
assert!(Segment::open(id).is_err());
}
#[test]
fn recreate_many_times() {
let id = (line!() as u64) + ((std::process::id() as u64) << 32);
let len = 1024.try_into().unwrap();
for _ in 0..100 {
let created_segment = Segment::create(id, len).unwrap();
let opened_segment = Segment::open(id).unwrap();
assert!(created_segment.len() >= len);
assert!(opened_segment.len() >= len);
}
assert!(Segment::open(id).is_err());
}