From acc6bae9ca71d5f8ddda89658d8b1a653f077334 Mon Sep 17 00:00:00 2001 From: pantonshire Date: Tue, 29 Aug 2023 09:06:21 +0100 Subject: [PATCH] tests for multiple tx and rx --- src/lib.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 29a279d..1c6863c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -736,7 +736,7 @@ struct CountOverflowError; #[cfg(test)] mod tests { - use std::{time::Duration, thread}; + use std::{time::{Duration, Instant}, thread}; use super::{debouncer, fold}; @@ -773,4 +773,58 @@ mod tests { assert_eq!(rx.recv().unwrap(), &[1, 2, 3]); assert!(rx.recv().is_err()); } + + #[test] + fn test_multi_tx() { + let (tx1, rx) = debouncer(Duration::from_millis(100), fold::fold_vec_push::); + + let tx2 = tx1.clone(); + + tx1.send(1).unwrap(); + tx2.send(2).unwrap(); + assert_eq!(rx.recv().unwrap(), &[1, 2]); + + drop(tx1); + + tx2.send(3).unwrap(); + tx2.send(4).unwrap(); + assert_eq!(rx.recv().unwrap(), &[3, 4]); + + let start_time = Instant::now(); + tx2.send(5).unwrap(); + tx2.send(6).unwrap(); + assert_eq!(rx.recv().unwrap(), &[5, 6]); + assert!(Instant::now().duration_since(start_time) >= Duration::from_millis(100)); + + tx2.send(7).unwrap(); + tx2.send(8).unwrap(); + drop(tx2); + assert_eq!(rx.recv().unwrap(), &[7, 8]); + assert!(rx.recv().is_err()); + } + + #[test] + fn test_multi_rx() { + let (tx, rx1) = debouncer(Duration::from_millis(100), fold::fold_vec_push::); + + let rx2 = rx1.clone(); + + tx.send(1).unwrap(); + tx.send(2).unwrap(); + assert_eq!(rx1.recv().unwrap(), &[1, 2]); + + tx.send(3).unwrap(); + tx.send(4).unwrap(); + assert_eq!(rx2.recv().unwrap(), &[3, 4]); + + drop(rx1); + + tx.send(5).unwrap(); + tx.send(6).unwrap(); + assert_eq!(rx2.recv().unwrap(), &[5, 6]); + + drop(rx2); + + assert!(tx.send(7).is_err()); + } }