add test for nested scopes (#10026)

# Objective

- When I've tested alternative async executors with bevy a common
problem is that they deadlock when we try to run nested scopes. i.e.
running a multithreaded schedule from inside another multithreaded
schedule. This adds a test to bevy_tasks for that so the issue can be
spotted earlier while developing.

## Changelog

- add a test for nested scopes.
This commit is contained in:
Mike 2023-10-04 23:05:43 -07:00 committed by GitHub
parent 7541bf862c
commit 202b9fce18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -918,4 +918,23 @@ mod tests {
assert!(!thread_check_failed.load(Ordering::Acquire)); assert!(!thread_check_failed.load(Ordering::Acquire));
assert_eq!(count.load(Ordering::Acquire), 200); assert_eq!(count.load(Ordering::Acquire), 200);
} }
// This test will often freeze on other executors.
#[test]
fn test_nested_scopes() {
let pool = TaskPool::new();
let count = Arc::new(AtomicI32::new(0));
pool.scope(|scope| {
scope.spawn(async {
pool.scope(|scope| {
scope.spawn(async {
count.fetch_add(1, Ordering::Relaxed);
});
});
});
});
assert_eq!(count.load(Ordering::Acquire), 1);
}
} }