1// Enable dead_code / unreachable_pub here. It has been disabled in lib.rs for
2// other code when running loom tests.
3#![cfg_attr(loom, warn(dead_code, unreachable_pub))]
4
5use self::noop_scheduler::NoopSchedule;
6use self::unowned_wrapper::unowned;
7
8mod noop_scheduler {
9 use crate::runtime::task::{self, Task};
10
11 /// `task::Schedule` implementation that does nothing, for testing.
12 pub(crate) struct NoopSchedule;
13
14 impl task::Schedule for NoopSchedule {
15 fn release(&self, _task: &Task<Self>) -> Option<Task<Self>> {
16 None
17 }
18
19 fn schedule(&self, _task: task::Notified<Self>) {
20 unreachable!();
21 }
22 }
23}
24
25mod unowned_wrapper {
26 use crate::runtime::task::{Id, JoinHandle, Notified};
27 use crate::runtime::tests::NoopSchedule;
28
29 #[cfg(all(tokio_unstable, feature = "tracing"))]
30 pub(crate) fn unowned<T>(task: T) -> (Notified<NoopSchedule>, JoinHandle<T::Output>)
31 where
32 T: std::future::Future + Send + 'static,
33 T::Output: Send + 'static,
34 {
35 use tracing::Instrument;
36 let span = tracing::trace_span!("test_span");
37 let task = task.instrument(span);
38 let (task, handle) = crate::runtime::task::unowned(task, NoopSchedule, Id::next());
39 (task.into_notified(), handle)
40 }
41
42 #[cfg(not(all(tokio_unstable, feature = "tracing")))]
43 pub(crate) fn unowned<T>(task: T) -> (Notified<NoopSchedule>, JoinHandle<T::Output>)
44 where
45 T: std::future::Future + Send + 'static,
46 T::Output: Send + 'static,
47 {
48 let (task, handle) = crate::runtime::task::unowned(task, NoopSchedule, Id::next());
49 (task.into_notified(), handle)
50 }
51}
52
53cfg_loom! {
54 mod loom_blocking;
55 mod loom_current_thread;
56 mod loom_join_set;
57 mod loom_local;
58 mod loom_multi_thread;
59 mod loom_multi_thread_alt;
60 mod loom_oneshot;
61
62 // Make sure debug assertions are enabled
63 #[cfg(not(debug_assertions))]
64 compile_error!("these tests require debug assertions to be enabled");
65}
66
67cfg_not_loom! {
68 mod inject;
69 mod queue;
70
71 #[cfg(not(miri))]
72 mod task_combinations;
73
74 #[cfg(miri)]
75 mod task;
76}
77