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