diff options
Diffstat (limited to 'library/std/tests/sync/mpmc.rs')
| -rw-r--r-- | library/std/tests/sync/mpmc.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/library/std/tests/sync/mpmc.rs b/library/std/tests/sync/mpmc.rs index 81b92297f76..78abcb3bcbe 100644 --- a/library/std/tests/sync/mpmc.rs +++ b/library/std/tests/sync/mpmc.rs @@ -64,6 +64,24 @@ fn smoke_port_gone() { } #[test] +fn smoke_receiver_clone() { + let (tx, rx) = channel::<i32>(); + let rx2 = rx.clone(); + drop(rx); + tx.send(1).unwrap(); + assert_eq!(rx2.recv().unwrap(), 1); +} + +#[test] +fn smoke_receiver_clone_port_gone() { + let (tx, rx) = channel::<i32>(); + let rx2 = rx.clone(); + drop(rx); + drop(rx2); + assert!(tx.send(1).is_err()); +} + +#[test] fn smoke_shared_port_gone() { let (tx, rx) = channel::<i32>(); drop(rx); @@ -125,6 +143,18 @@ fn chan_gone_concurrent() { } #[test] +fn receiver_cloning() { + let (tx, rx) = channel::<i32>(); + let rx2 = rx.clone(); + + tx.send(1).unwrap(); + tx.send(2).unwrap(); + + assert_eq!(rx2.recv(), Ok(1)); + assert_eq!(rx.recv(), Ok(2)); +} + +#[test] fn stress() { let count = if cfg!(miri) { 100 } else { 10000 }; let (tx, rx) = channel::<i32>(); |
