macro_rules! load {
($var:expr) => {
$var.swap(Default::default(), std::sync::atomic::Ordering::AcqRel)
};
}
macro_rules! store {
($var:expr, $value:expr) => {
cfg_select! {
debug_assertions => assert_eq!($var.swap($value, std::sync::atomic::Ordering::AcqRel), Default::default()),
_ => $var.store($value, std::sync::atomic::Ordering::Release)
}
};
}
pub(crate) use load;
pub(crate) use store;
#[cfg(test)]
mod tests {
use std::sync::atomic::AtomicBool;
#[test]
#[should_panic]
fn double() {
let atomic = AtomicBool::new(false);
store!(atomic, true);
store!(atomic, true);
}
}