use std::sync::atomic::{AtomicBool, Ordering};
static PENDING_WORLD: AtomicBool = AtomicBool::new(false);
static PENDING_SHADER_STAGES: AtomicBool = AtomicBool::new(false);
pub(crate) fn set_pending_world() {
PENDING_WORLD.store(true, Ordering::SeqCst);
}
pub(crate) fn take_pending_world() -> bool {
PENDING_WORLD.swap(false, Ordering::SeqCst)
}
static PENDING_STORIES: AtomicBool = AtomicBool::new(false);
pub(crate) fn set_pending_shader_stages() {
PENDING_SHADER_STAGES.store(true, Ordering::SeqCst);
}
pub(crate) fn take_pending_shader_stages() -> bool {
PENDING_SHADER_STAGES.swap(false, Ordering::SeqCst)
}
pub(crate) fn set_pending_stories() {
PENDING_STORIES.store(true, Ordering::SeqCst);
}
pub(crate) fn take_pending_stories() -> bool {
PENDING_STORIES.swap(false, Ordering::SeqCst)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn world_flag_round_trips() {
let _guard = crate::test_support::lock();
let prior = take_pending_world();
assert!(!take_pending_world());
set_pending_world();
assert!(take_pending_world());
assert!(!take_pending_world());
if prior {
set_pending_world();
}
}
#[test]
fn stories_flag_round_trips() {
let _guard = crate::test_support::lock();
let prior = take_pending_stories();
assert!(!take_pending_stories());
set_pending_stories();
assert!(take_pending_stories());
assert!(!take_pending_stories());
if prior {
set_pending_stories();
}
}
#[test]
fn shader_stages_flag_round_trips() {
let _guard = crate::test_support::lock();
let prior = take_pending_shader_stages();
assert!(!take_pending_shader_stages());
set_pending_shader_stages();
assert!(take_pending_shader_stages());
assert!(!take_pending_shader_stages());
if prior {
set_pending_shader_stages();
}
}
}