diff options
Diffstat (limited to 'embassy-executor/tests/test.rs')
| -rw-r--r-- | embassy-executor/tests/test.rs | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/embassy-executor/tests/test.rs b/embassy-executor/tests/test.rs index b84d3785a..6baf3dc21 100644 --- a/embassy-executor/tests/test.rs +++ b/embassy-executor/tests/test.rs | |||
| @@ -65,7 +65,7 @@ fn executor_task() { | |||
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | let (executor, trace) = setup(); | 67 | let (executor, trace) = setup(); |
| 68 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 68 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 69 | 69 | ||
| 70 | unsafe { executor.poll() }; | 70 | unsafe { executor.poll() }; |
| 71 | unsafe { executor.poll() }; | 71 | unsafe { executor.poll() }; |
| @@ -93,7 +93,7 @@ fn executor_task_rpit() { | |||
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | let (executor, trace) = setup(); | 95 | let (executor, trace) = setup(); |
| 96 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 96 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 97 | 97 | ||
| 98 | unsafe { executor.poll() }; | 98 | unsafe { executor.poll() }; |
| 99 | unsafe { executor.poll() }; | 99 | unsafe { executor.poll() }; |
| @@ -120,7 +120,7 @@ fn executor_task_self_wake() { | |||
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | let (executor, trace) = setup(); | 122 | let (executor, trace) = setup(); |
| 123 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 123 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 124 | 124 | ||
| 125 | unsafe { executor.poll() }; | 125 | unsafe { executor.poll() }; |
| 126 | unsafe { executor.poll() }; | 126 | unsafe { executor.poll() }; |
| @@ -152,7 +152,7 @@ fn executor_task_self_wake_twice() { | |||
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | let (executor, trace) = setup(); | 154 | let (executor, trace) = setup(); |
| 155 | executor.spawner().spawn(task1(trace.clone())).unwrap(); | 155 | executor.spawner().spawn(task1(trace.clone()).unwrap()); |
| 156 | 156 | ||
| 157 | unsafe { executor.poll() }; | 157 | unsafe { executor.poll() }; |
| 158 | unsafe { executor.poll() }; | 158 | unsafe { executor.poll() }; |
| @@ -188,7 +188,7 @@ fn waking_after_completion_does_not_poll() { | |||
| 188 | let waker = Box::leak(Box::new(AtomicWaker::new())); | 188 | let waker = Box::leak(Box::new(AtomicWaker::new())); |
| 189 | 189 | ||
| 190 | let (executor, trace) = setup(); | 190 | let (executor, trace) = setup(); |
| 191 | executor.spawner().spawn(task1(trace.clone(), waker)).unwrap(); | 191 | executor.spawner().spawn(task1(trace.clone(), waker).unwrap()); |
| 192 | 192 | ||
| 193 | unsafe { executor.poll() }; | 193 | unsafe { executor.poll() }; |
| 194 | waker.wake(); | 194 | waker.wake(); |
| @@ -200,7 +200,7 @@ fn waking_after_completion_does_not_poll() { | |||
| 200 | unsafe { executor.poll() }; // Clears running status | 200 | unsafe { executor.poll() }; // Clears running status |
| 201 | 201 | ||
| 202 | // Can respawn waken-but-dead task | 202 | // Can respawn waken-but-dead task |
| 203 | executor.spawner().spawn(task1(trace.clone(), waker)).unwrap(); | 203 | executor.spawner().spawn(task1(trace.clone(), waker).unwrap()); |
| 204 | 204 | ||
| 205 | unsafe { executor.poll() }; | 205 | unsafe { executor.poll() }; |
| 206 | 206 | ||
| @@ -250,7 +250,7 @@ fn waking_with_old_waker_after_respawn() { | |||
| 250 | let waker = Box::leak(Box::new(AtomicWaker::new())); | 250 | let waker = Box::leak(Box::new(AtomicWaker::new())); |
| 251 | 251 | ||
| 252 | let (executor, trace) = setup(); | 252 | let (executor, trace) = setup(); |
| 253 | executor.spawner().spawn(task1(trace.clone(), waker)).unwrap(); | 253 | executor.spawner().spawn(task1(trace.clone(), waker).unwrap()); |
| 254 | 254 | ||
| 255 | unsafe { executor.poll() }; | 255 | unsafe { executor.poll() }; |
| 256 | unsafe { executor.poll() }; // progress to registering the waker | 256 | unsafe { executor.poll() }; // progress to registering the waker |
| @@ -273,8 +273,7 @@ fn waking_with_old_waker_after_respawn() { | |||
| 273 | let (other_executor, other_trace) = setup(); | 273 | let (other_executor, other_trace) = setup(); |
| 274 | other_executor | 274 | other_executor |
| 275 | .spawner() | 275 | .spawner() |
| 276 | .spawn(task1(other_trace.clone(), waker)) | 276 | .spawn(task1(other_trace.clone(), waker).unwrap()); |
| 277 | .unwrap(); | ||
| 278 | 277 | ||
| 279 | unsafe { other_executor.poll() }; // just run to the yield_now | 278 | unsafe { other_executor.poll() }; // just run to the yield_now |
| 280 | waker.wake(); // trigger old waker registration | 279 | waker.wake(); // trigger old waker registration |
| @@ -323,6 +322,37 @@ fn recursive_task() { | |||
| 323 | #[embassy_executor::task(pool_size = 2)] | 322 | #[embassy_executor::task(pool_size = 2)] |
| 324 | async fn task1() { | 323 | async fn task1() { |
| 325 | let spawner = unsafe { Spawner::for_current_executor().await }; | 324 | let spawner = unsafe { Spawner::for_current_executor().await }; |
| 326 | spawner.spawn(task1()); | 325 | spawner.spawn(task1().unwrap()); |
| 327 | } | 326 | } |
| 328 | } | 327 | } |
| 328 | |||
| 329 | #[cfg(feature = "metadata-name")] | ||
| 330 | #[test] | ||
| 331 | fn task_metadata() { | ||
| 332 | #[task] | ||
| 333 | async fn task1(expected_name: Option<&'static str>) { | ||
| 334 | use embassy_executor::Metadata; | ||
| 335 | assert_eq!(Metadata::for_current_task().await.name(), expected_name); | ||
| 336 | } | ||
| 337 | |||
| 338 | // check no task name | ||
| 339 | let (executor, _) = setup(); | ||
| 340 | executor.spawner().spawn(task1(None).unwrap()); | ||
| 341 | unsafe { executor.poll() }; | ||
| 342 | |||
| 343 | // check setting task name | ||
| 344 | let token = task1(Some("foo")).unwrap(); | ||
| 345 | token.metadata().set_name("foo"); | ||
| 346 | executor.spawner().spawn(token); | ||
| 347 | unsafe { executor.poll() }; | ||
| 348 | |||
| 349 | let token = task1(Some("bar")).unwrap(); | ||
| 350 | token.metadata().set_name("bar"); | ||
| 351 | executor.spawner().spawn(token); | ||
| 352 | unsafe { executor.poll() }; | ||
| 353 | |||
| 354 | // check name is cleared if the task pool slot is recycled. | ||
| 355 | let (executor, _) = setup(); | ||
| 356 | executor.spawner().spawn(task1(None).unwrap()); | ||
| 357 | unsafe { executor.poll() }; | ||
| 358 | } | ||
