use std::sync::atomic::{AtomicU64, Ordering};
#[derive(Default)]
pub struct Coverage(AtomicU64);
impl Coverage {
pub fn command(&self) {
let previous = self.0.load(Ordering::Relaxed);
if previous == u64::MAX {
return;
}
let epoch = super::epoch();
let next = if epoch == 0 || (previous != 0 && previous != epoch) {
u64::MAX
} else {
epoch
};
if next != previous {
self.0.store(next, Ordering::Relaxed);
}
}
pub fn finish(&self) -> bool {
let previous = self.0.swap(0, Ordering::Relaxed);
previous == 0 || (previous != u64::MAX && previous == super::epoch())
}
}