diff options
| author | Glyn Normington <glyn.normington@gmail.com> | 2025-04-15 02:34:32 +0100 |
|---|---|---|
| committer | Glyn Normington <glyn.normington@gmail.com> | 2025-04-15 02:37:57 +0100 |
| commit | 1376810d44d62dc7e8146f988e41aa2a9f641cf8 (patch) | |
| tree | e3f8a296ccd832ee58755b7220c87223610f401c /library/std/tests | |
| parent | 2da29dbe8fe23df1c7c4ab1d8740ca3c32b15526 (diff) | |
Basic tests of MPMC receiver cloning
Ref: https://github.com/rust-lang/rust/issues/126840#issuecomment-2802321146
Diffstat (limited to 'library/std/tests')
| -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>(); |
