summaryrefslogtreecommitdiffstats
path: root/vendor/gix-utils/tests
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gix-utils/tests')
-rw-r--r--vendor/gix-utils/tests/backoff/mod.rs56
-rw-r--r--vendor/gix-utils/tests/utils.rs1
2 files changed, 57 insertions, 0 deletions
diff --git a/vendor/gix-utils/tests/backoff/mod.rs b/vendor/gix-utils/tests/backoff/mod.rs
new file mode 100644
index 000000000..a84ed7543
--- /dev/null
+++ b/vendor/gix-utils/tests/backoff/mod.rs
@@ -0,0 +1,56 @@
+use std::{convert::TryInto, time::Duration};
+
+use gix_utils::backoff::Exponential;
+
+const EXPECTED_TILL_SECOND: &[usize] = &[
+ 1usize, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576,
+ 625, 676, 729, 784, 841, 900, 961, 1000, 1000,
+];
+
+#[test]
+fn random_exponential_produces_values_in_the_correct_range() {
+ let mut num_identities = 0;
+ for (actual, expected) in Exponential::default_with_random().zip(EXPECTED_TILL_SECOND) {
+ let actual: usize = actual.as_millis().try_into().unwrap();
+ if actual == *expected {
+ num_identities += 1;
+ }
+ assert!(
+ actual * 1000 >= (expected - 1) * 750,
+ "value too small: {actual} < {expected}"
+ );
+ assert!(
+ actual * 1000 <= (expected + 1) * 1250,
+ "value too big: {actual} > {expected}"
+ );
+ }
+ assert!(
+ num_identities < EXPECTED_TILL_SECOND.len(),
+ "too many untransformed values: {num_identities}"
+ );
+}
+
+#[test]
+fn how_many_iterations_for_a_second_of_waittime() {
+ let max = Duration::from_millis(1000);
+ assert_eq!(Exponential::default().until_no_remaining(max).count(), 14);
+ assert_eq!(
+ Exponential::default()
+ .until_no_remaining(max)
+ .reduce(|acc, n| acc + n)
+ .unwrap(),
+ Duration::from_millis(1015),
+ "a little overshoot"
+ );
+}
+
+#[test]
+fn output_with_default_settings() {
+ assert_eq!(
+ Exponential::default().take(33).collect::<Vec<_>>(),
+ EXPECTED_TILL_SECOND
+ .iter()
+ .map(|n| Duration::from_millis(*n as u64))
+ .collect::<Vec<_>>()
+ );
+}
diff --git a/vendor/gix-utils/tests/utils.rs b/vendor/gix-utils/tests/utils.rs
new file mode 100644
index 000000000..ed38d3e98
--- /dev/null
+++ b/vendor/gix-utils/tests/utils.rs
@@ -0,0 +1 @@
+mod backoff;