1 #![cfg_attr(not(io_safety_is_in_std), allow(unused_imports))]
2 #![cfg_attr(target_os = "wasi", feature(wasi_ext))]
3 
4 use std::mem::size_of;
5 
6 #[cfg(any(unix, target_os = "wasi"))]
7 use io_lifetimes::{BorrowedFd, OwnedFd};
8 #[cfg(windows)]
9 use io_lifetimes::{BorrowedSocket, OwnedSocket};
10 
11 #[cfg(unix)]
12 use std::os::unix::io::{FromRawFd, IntoRawFd, RawFd};
13 #[cfg(target_os = "wasi")]
14 use std::os::wasi::io::{FromRawFd, IntoRawFd, RawFd};
15 #[cfg(windows)]
16 use std::os::windows::io::{FromRawSocket, IntoRawSocket, RawSocket};
17 
18 #[cfg(all(io_safety_is_in_std, any(unix, target_os = "wasi")))]
19 #[test]
test_niche_optimizationsnull20 fn test_niche_optimizations() {
21     assert_eq!(size_of::<Option<OwnedFd>>(), size_of::<RawFd>());
22     assert_eq!(size_of::<Option<BorrowedFd<'static>>>(), size_of::<RawFd>());
23     unsafe {
24         assert_eq!(OwnedFd::from_raw_fd(RawFd::MIN).into_raw_fd(), RawFd::MIN);
25         assert_eq!(OwnedFd::from_raw_fd(RawFd::MAX).into_raw_fd(), RawFd::MAX);
26         assert_eq!(
27             Some(OwnedFd::from_raw_fd(RawFd::MIN))
28                 .unwrap()
29                 .into_raw_fd(),
30             RawFd::MIN
31         );
32         assert_eq!(
33             Some(OwnedFd::from_raw_fd(RawFd::MAX))
34                 .unwrap()
35                 .into_raw_fd(),
36             RawFd::MAX
37         );
38     }
39 }
40 
41 #[cfg(all(io_safety_is_in_std, windows))]
42 #[test]
test_niche_optimizations_socketnull43 fn test_niche_optimizations_socket() {
44     assert_eq!(size_of::<Option<OwnedSocket>>(), size_of::<RawSocket>());
45     assert_eq!(
46         size_of::<Option<BorrowedSocket<'static>>>(),
47         size_of::<RawSocket>(),
48     );
49     unsafe {
50         #[cfg(target_pointer_width = "32")]
51         let (min, max) = (i32::MIN as u32, i32::MAX as u32);
52         #[cfg(target_pointer_width = "64")]
53         let (min, max) = (i64::MIN as u64, i64::MAX as u64);
54 
55         assert_eq!(OwnedSocket::from_raw_socket(min).into_raw_socket(), min);
56         assert_eq!(OwnedSocket::from_raw_socket(max).into_raw_socket(), max);
57         assert_eq!(
58             Some(OwnedSocket::from_raw_socket(min))
59                 .unwrap()
60                 .into_raw_socket(),
61             min
62         );
63         assert_eq!(
64             Some(OwnedSocket::from_raw_socket(max))
65                 .unwrap()
66                 .into_raw_socket(),
67             max
68         );
69     }
70 }
71