aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/tests/test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-executor/tests/test.rs')
-rw-r--r--embassy-executor/tests/test.rs50
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]
331fn 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}