use moonpool_core::{Providers, TaskProvider};
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
pub(crate) async fn task_contract<P: Providers>(p: &P) {
let ran = Arc::new(AtomicBool::new(false));
let flag = Arc::clone(&ran);
let handle = p.task().spawn_task("conformance-task", async move {
flag.store(true, Ordering::SeqCst);
});
handle.await.expect("spawned task should join cleanly");
assert!(
ran.load(Ordering::SeqCst),
"spawned task's effect must be visible after join"
);
p.task().yield_now().await;
}