diff --git a/simlib/mixnet-sims/src/node/mix/consensus_streams.rs b/simlib/mixnet-sims/src/node/mix/consensus_streams.rs index 33c52f7..ea1edf1 100644 --- a/simlib/mixnet-sims/src/node/mix/consensus_streams.rs +++ b/simlib/mixnet-sims/src/node/mix/consensus_streams.rs @@ -67,16 +67,18 @@ mod tests { let (update_sender, update_receiver) = channel::unbounded(); let mut interval = CounterInterval::new(Duration::from_secs(1), update_receiver); + update_sender.send(Duration::from_secs(0)).unwrap(); + assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Ready(Some(0))); update_sender.send(Duration::from_secs(0)).unwrap(); assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Pending); update_sender.send(Duration::from_millis(999)).unwrap(); assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Pending); update_sender.send(Duration::from_millis(1)).unwrap(); - assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Ready(Some(0))); - update_sender.send(Duration::from_secs(1)).unwrap(); assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Ready(Some(1))); - update_sender.send(Duration::from_secs(3)).unwrap(); + update_sender.send(Duration::from_secs(1)).unwrap(); assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Ready(Some(2))); + update_sender.send(Duration::from_secs(3)).unwrap(); + assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Ready(Some(3))); } #[test] @@ -87,17 +89,19 @@ mod tests { let (update_sender, update_receiver) = channel::unbounded(); let mut slot = Slot::new(3, Duration::from_secs(1), update_receiver); + update_sender.send(Duration::from_secs(0)).unwrap(); + assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Ready(Some(0))); update_sender.send(Duration::from_secs(0)).unwrap(); assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Pending); update_sender.send(Duration::from_millis(999)).unwrap(); assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Pending); update_sender.send(Duration::from_millis(1)).unwrap(); + assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Ready(Some(1))); + update_sender.send(Duration::from_secs(1)).unwrap(); + assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Ready(Some(2))); + update_sender.send(Duration::from_secs(3)).unwrap(); assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Ready(Some(0))); update_sender.send(Duration::from_secs(1)).unwrap(); assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Ready(Some(1))); - update_sender.send(Duration::from_secs(3)).unwrap(); - assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Ready(Some(2))); - update_sender.send(Duration::from_secs(1)).unwrap(); - assert_eq!(slot.poll_next_unpin(&mut cx), Poll::Ready(Some(0))); } } diff --git a/simlib/mixnet-sims/src/node/mix/scheduler.rs b/simlib/mixnet-sims/src/node/mix/scheduler.rs index aef1c57..ac403c8 100644 --- a/simlib/mixnet-sims/src/node/mix/scheduler.rs +++ b/simlib/mixnet-sims/src/node/mix/scheduler.rs @@ -15,7 +15,7 @@ impl Interval { pub fn new(duration: Duration, update_time: channel::Receiver) -> Self { Self { duration, - current_elapsed: Duration::from_secs(0), + current_elapsed: duration, // to immediately release at the interval 0 update_time, } } @@ -104,7 +104,7 @@ mod tests { let (_tx, rx) = channel::unbounded(); let mut interval = Interval::new(Duration::from_secs(2), rx); - assert!(!interval.update(Duration::from_secs(0))); + assert!(interval.update(Duration::from_secs(0))); assert!(!interval.update(Duration::from_secs(1))); assert!(interval.update(Duration::from_secs(1))); assert!(interval.update(Duration::from_secs(3))); @@ -118,6 +118,8 @@ mod tests { let (tx, rx) = channel::unbounded(); let mut interval = Interval::new(Duration::from_secs(2), rx); + tx.send(Duration::from_secs(0)).unwrap(); + assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Ready(Some(()))); tx.send(Duration::from_secs(0)).unwrap(); assert_eq!(interval.poll_next_unpin(&mut cx), Poll::Pending); tx.send(Duration::from_secs(1)).unwrap(); @@ -132,7 +134,7 @@ mod tests { fn temporal_release_update() { let (_tx, rx) = channel::unbounded(); let mut temporal_release = - TemporalRelease::new(rand_chacha::ChaCha8Rng::from_entropy(), rx, (1, 2)); + TemporalRelease::new(rand_chacha::ChaCha8Rng::from_entropy(), rx, (1, 1)); assert!(!temporal_release.update(Duration::from_secs(0))); assert!(!temporal_release.update(Duration::from_millis(999))); @@ -147,7 +149,7 @@ mod tests { let (tx, rx) = channel::unbounded(); let mut temporal_release = - TemporalRelease::new(rand_chacha::ChaCha8Rng::from_entropy(), rx, (1, 2)); + TemporalRelease::new(rand_chacha::ChaCha8Rng::from_entropy(), rx, (1, 1)); tx.send(Duration::from_secs(0)).unwrap(); assert_eq!(temporal_release.poll_next_unpin(&mut cx), Poll::Pending);