1use rustix::process::nice; 2#[cfg(not(target_os = "redox"))] 3use rustix::process::{getpriority_process, setpriority_process}; 4 5#[cfg(not(target_os = "freebsd"))] // FreeBSD's nice(3) doesn't return the old value. 6#[test] 7fn test_priorities() { 8 let old = nice(0).unwrap(); 9 10 #[cfg(not(target_os = "redox"))] 11 { 12 let get_prio = getpriority_process(None).unwrap(); 13 assert_eq!(get_prio, old); 14 } 15 16 // Lower the priority by one. 17 let new = nice(1).unwrap(); 18 19 // If the test wasn't running with the lowest priority initially, test that 20 // we were able to lower the priority. 21 if old < 19 { 22 assert_eq!(old + 1, new); 23 } 24 25 let get = nice(0).unwrap(); 26 assert_eq!(new, get); 27 28 #[cfg(not(target_os = "redox"))] 29 { 30 let get_prio = getpriority_process(None).unwrap(); 31 assert_eq!(get_prio, new); 32 33 setpriority_process(None, get + 1).unwrap(); 34 let now = getpriority_process(None).unwrap(); 35 36 // If the test wasn't running with the lowest priority initially, test 37 // that we were able to lower the priority. 38 if get < 19 { 39 assert_eq!(get + 1, now); 40 } 41 setpriority_process(None, get + 10000).unwrap(); 42 let now = getpriority_process(None).unwrap(); 43 // Linux's max is 19; Darwin's max is 20. 44 assert!(now >= 19 && now <= 20); 45 // Darwin appears to return `EPERM` on an out of range `nice`. 46 if let Ok(again) = nice(1) { 47 assert_eq!(now, again); 48 } 49 } 50} 51 52/// FreeBSD's `nice` doesn't return the new nice value, so use a specialized 53/// test. 54#[cfg(target_os = "freebsd")] 55#[test] 56fn test_priorities() { 57 let start = getpriority_process(None).unwrap(); 58 59 let _ = nice(0).unwrap(); 60 61 let now = getpriority_process(None).unwrap(); 62 assert_eq!(start, now); 63 64 let _ = nice(1).unwrap(); 65 66 let now = getpriority_process(None).unwrap(); 67 assert_eq!(start + 1, now); 68 69 setpriority_process(None, start + 2).unwrap(); 70 71 let now = getpriority_process(None).unwrap(); 72 assert_eq!(start + 2, now); 73 74 setpriority_process(None, 10000).unwrap(); 75 76 let now = getpriority_process(None).unwrap(); 77 assert_eq!(now, 20); 78 79 let _ = nice(1).unwrap(); 80 81 let now = getpriority_process(None).unwrap(); 82 assert_eq!(now, 20); 83} 84