Skip to content

Commit 5d83318

Browse files
committed
Parametrize tests
1 parent 9286012 commit 5d83318

1 file changed

Lines changed: 54 additions & 53 deletions

File tree

  • crates/charon/src/expbackoff

crates/charon/src/expbackoff/mod.rs

Lines changed: 54 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ impl<R> ExponentialBackoffBuilder<R> {
187187

188188
#[cfg(test)]
189189
mod tests {
190-
use crate::expbackoff::{ExponentialBackoff, ExponentialBackoffBuilder};
190+
use crate::expbackoff::ExponentialBackoffBuilder;
191191
use core::time::Duration;
192-
use tower::util::rng::Rng;
192+
use tower::util::rng::{HasherRng, Rng};
193193

194194
struct Const(f64);
195195

@@ -203,63 +203,64 @@ mod tests {
203203
}
204204
}
205205

206+
struct TestCase {
207+
config: ExponentialBackoffBuilder<HasherRng>,
208+
rng: f64,
209+
backoffs: Vec<Duration>,
210+
}
211+
206212
#[test]
207213
fn default_config() {
208-
let backoffs: Vec<Duration> = vec![
209-
Duration::from_secs(1),
210-
Duration::from_secs(1) + Duration::from_millis(600),
211-
Duration::from_secs(2) + Duration::from_millis(560),
212-
Duration::from_secs(4) + Duration::from_millis(090),
213-
Duration::from_secs(6) + Duration::from_millis(550),
214-
Duration::from_secs(10) + Duration::from_millis(480),
215-
Duration::from_secs(16) + Duration::from_millis(770),
216-
Duration::from_secs(26) + Duration::from_millis(840),
217-
Duration::from_secs(42) + Duration::from_millis(940),
218-
Duration::from_mins(1) + Duration::from_millis(8710),
219-
Duration::from_mins(1) + Duration::from_millis(49950),
220-
Duration::from_mins(2),
221-
Duration::from_mins(2),
222-
];
223-
224-
let mut backoff = ExponentialBackoffBuilder::<Const>::default()
225-
.with_rng(Const(0.5))
226-
.build()
227-
.unwrap();
228-
229-
for expected in backoffs {
230-
let duration = backoff.backoff();
231-
backoff.tried();
232-
233-
assert!(duration - expected <= Duration::from_millis(10));
234-
}
214+
assert_test_case(TestCase {
215+
config: ExponentialBackoffBuilder::<HasherRng>::default(),
216+
rng: 0.5,
217+
backoffs: vec![
218+
Duration::from_secs(1),
219+
Duration::from_secs(1) + Duration::from_millis(600),
220+
Duration::from_secs(2) + Duration::from_millis(560),
221+
Duration::from_secs(4) + Duration::from_millis(090),
222+
Duration::from_secs(6) + Duration::from_millis(550),
223+
Duration::from_secs(10) + Duration::from_millis(480),
224+
Duration::from_secs(16) + Duration::from_millis(770),
225+
Duration::from_secs(26) + Duration::from_millis(840),
226+
Duration::from_secs(42) + Duration::from_millis(940),
227+
Duration::from_mins(1) + Duration::from_millis(8710),
228+
Duration::from_mins(1) + Duration::from_millis(49950),
229+
Duration::from_mins(2),
230+
Duration::from_mins(2),
231+
],
232+
});
235233
}
236234

237235
#[test]
238236
fn default_config_max_jitter() {
239-
let backoffs: Vec<Duration> = vec![
240-
Duration::from_secs(1),
241-
Duration::from_secs(1) + Duration::from_millis(920),
242-
Duration::from_secs(3) + Duration::from_millis(70),
243-
Duration::from_secs(4) + Duration::from_millis(910),
244-
Duration::from_secs(7) + Duration::from_millis(860),
245-
Duration::from_secs(12) + Duration::from_millis(580),
246-
Duration::from_secs(20) + Duration::from_millis(130),
247-
Duration::from_secs(32) + Duration::from_millis(210),
248-
Duration::from_secs(51) + Duration::from_millis(530),
249-
Duration::from_mins(1) + Duration::from_secs(22) + Duration::from_millis(460),
250-
Duration::from_mins(2) + Duration::from_secs(11) + Duration::from_millis(940),
251-
Duration::from_mins(2) + Duration::from_secs(24),
252-
Duration::from_mins(2) + Duration::from_secs(24),
253-
];
254-
255-
let mut backoff: ExponentialBackoff<Const> = ExponentialBackoffBuilder::<Const>::default()
256-
.with_rng(Const(1.0))
257-
.build()
258-
.unwrap();
259-
260-
for expected in backoffs {
261-
let duration = backoff.backoff();
262-
backoff.tried();
237+
assert_test_case(TestCase {
238+
config: ExponentialBackoffBuilder::<HasherRng>::default(),
239+
rng: 1.0,
240+
backoffs: vec![
241+
Duration::from_secs(1),
242+
Duration::from_secs(1) + Duration::from_millis(920),
243+
Duration::from_secs(3) + Duration::from_millis(70),
244+
Duration::from_secs(4) + Duration::from_millis(910),
245+
Duration::from_secs(7) + Duration::from_millis(860),
246+
Duration::from_secs(12) + Duration::from_millis(580),
247+
Duration::from_secs(20) + Duration::from_millis(130),
248+
Duration::from_secs(32) + Duration::from_millis(210),
249+
Duration::from_secs(51) + Duration::from_millis(530),
250+
Duration::from_mins(1) + Duration::from_secs(22) + Duration::from_millis(460),
251+
Duration::from_mins(2) + Duration::from_secs(11) + Duration::from_millis(940),
252+
Duration::from_mins(2) + Duration::from_secs(24),
253+
Duration::from_mins(2) + Duration::from_secs(24),
254+
],
255+
});
256+
}
257+
258+
fn assert_test_case(tc: TestCase) {
259+
let mut instance = tc.config.with_rng(Const(tc.rng)).build().unwrap();
260+
261+
for expected in tc.backoffs {
262+
let duration = instance.backoff();
263+
instance.tried();
263264

264265
assert!(duration - expected <= Duration::from_millis(10));
265266
}

0 commit comments

Comments
 (0)