1#[derive(Clone, Copy, Debug, Eq, PartialEq)]
12pub enum ThreadMode {
13 Sequential,
15
16 #[cfg(feature = "crossbeam-utils")]
17 Parallel,
19}
20
21impl ThreadMode {
22 #[cfg(feature = "crossbeam-utils")]
23 pub fn from_threads(threads: u32) -> ThreadMode {
25 if threads > 1 {
26 ThreadMode::Parallel
27 } else {
28 ThreadMode::Sequential
29 }
30 }
31
32 #[cfg(not(feature = "crossbeam-utils"))]
33 pub fn from_threads(threads: u32) -> ThreadMode {
34 assert_eq!(threads, 1);
35 Self::default()
36 }
37}
38
39impl Default for ThreadMode {
40 fn default() -> ThreadMode {
41 ThreadMode::Sequential
42 }
43}
44
45#[cfg(test)]
46mod tests {
47
48 use crate::thread_mode::ThreadMode;
49
50 #[test]
51 fn default_returns_correct_thread_mode() {
52 assert_eq!(ThreadMode::default(), ThreadMode::Sequential);
53 }
54
55 #[cfg(feature = "crossbeam-utils")]
56 #[test]
57 fn from_threads_returns_correct_thread_mode() {
58 assert_eq!(ThreadMode::from_threads(0), ThreadMode::Sequential);
59 assert_eq!(ThreadMode::from_threads(1), ThreadMode::Sequential);
60 assert_eq!(ThreadMode::from_threads(2), ThreadMode::Parallel);
61 assert_eq!(ThreadMode::from_threads(10), ThreadMode::Parallel);
62 assert_eq!(ThreadMode::from_threads(100), ThreadMode::Parallel);
63 }
64}