35 lines
593 B
Rust
35 lines
593 B
Rust
#![no_main]
|
|
|
|
use core::sync::atomic::{AtomicUsize, Ordering};
|
|
|
|
const ITERATIONS: usize = 100;
|
|
|
|
rt::once!(ONCE);
|
|
rt::semaphore!(SEM);
|
|
|
|
static X: AtomicUsize = AtomicUsize::new(0);
|
|
|
|
fn f() {
|
|
X.fetch_add(1, Ordering::Relaxed);
|
|
}
|
|
|
|
fn oncer() {
|
|
rt::task::drop_privilege();
|
|
for _ in 0..ITERATIONS {
|
|
ONCE.call_once(f);
|
|
}
|
|
}
|
|
|
|
fn oncer_trap() {
|
|
oncer();
|
|
assert_eq!(
|
|
X.load(Ordering::Relaxed),
|
|
1,
|
|
"X did not have the expected value"
|
|
);
|
|
rt::trap();
|
|
}
|
|
|
|
rt::task!(oncer, rt::task::STACK_MIN, 0);
|
|
rt::task!(oncer_trap, rt::task::STACK_MIN, 0);
|