1 use oneshot::{Receiver, Sender};
2 use std::mem;
3 
4 /// Just sanity check that both channel endpoints stay the size of a single pointer.
5 #[test]
channel_endpoints_single_pointer()6 fn channel_endpoints_single_pointer() {
7     const PTR_SIZE: usize = mem::size_of::<*const ()>();
8 
9     assert_eq!(mem::size_of::<Sender<()>>(), PTR_SIZE);
10     assert_eq!(mem::size_of::<Receiver<()>>(), PTR_SIZE);
11 
12     assert_eq!(mem::size_of::<Sender<u8>>(), PTR_SIZE);
13     assert_eq!(mem::size_of::<Receiver<u8>>(), PTR_SIZE);
14 
15     assert_eq!(mem::size_of::<Sender<[u8; 1024]>>(), PTR_SIZE);
16     assert_eq!(mem::size_of::<Receiver<[u8; 1024]>>(), PTR_SIZE);
17 
18     assert_eq!(mem::size_of::<Option<Sender<[u8; 1024]>>>(), PTR_SIZE);
19     assert_eq!(mem::size_of::<Option<Receiver<[u8; 1024]>>>(), PTR_SIZE);
20 }
21 
22 /// Check that the `SendError` stays small. Useful to automatically detect if it is refactored
23 /// to become large. We do not want the stack requirement for calling `Sender::send` to grow.
24 #[test]
error_sizes()25 fn error_sizes() {
26     const PTR_SIZE: usize = mem::size_of::<usize>();
27 
28     assert_eq!(mem::size_of::<oneshot::SendError<()>>(), PTR_SIZE);
29     assert_eq!(mem::size_of::<oneshot::SendError<u8>>(), PTR_SIZE);
30     assert_eq!(mem::size_of::<oneshot::SendError<[u8; 1024]>>(), PTR_SIZE);
31 
32     // The type returned from `Sender::send` is also just pointer sized
33     assert_eq!(
34         mem::size_of::<Result<(), oneshot::SendError<[u8; 1024]>>>(),
35         PTR_SIZE
36     );
37 }
38