use crate::*;
#[test]
fn bucket_index() {
let ttl_buckets = TtlBuckets::new();
assert_eq!(ttl_buckets.get_bucket_index(Duration::from_secs(0)), 1023);
assert_eq!(
ttl_buckets.get_bucket_index(Duration::from_secs(u32::MAX)),
1023
);
assert_eq!(ttl_buckets.get_bucket_index(Duration::from_secs(1)), 0);
assert_eq!(ttl_buckets.get_bucket_index(Duration::from_secs(7)), 0);
for bucket in 1..256 {
let start = Duration::from_secs(8 * bucket);
let end = Duration::from_secs(8 * bucket + 7);
assert_eq!(
ttl_buckets.get_bucket_index(start) as u32,
bucket,
"ttl: {start:?}"
);
assert_eq!(
ttl_buckets.get_bucket_index(end) as u32,
bucket,
"ttl: {end:?}"
);
}
for bucket in 16..256 {
let start = Duration::from_secs(128 * bucket);
let end = Duration::from_secs(128 * bucket + 127);
assert_eq!(
ttl_buckets.get_bucket_index(start) as u32,
bucket + 256,
"ttl: {start:?}"
);
assert_eq!(
ttl_buckets.get_bucket_index(end) as u32,
bucket + 256,
"ttl: {end:?}"
);
}
for bucket in 16..256 {
let start = Duration::from_secs(2048 * bucket);
let end = Duration::from_secs(2048 * bucket + 2047);
assert_eq!(
ttl_buckets.get_bucket_index(start) as u32,
bucket + 512,
"ttl: {start:?}"
);
assert_eq!(
ttl_buckets.get_bucket_index(end) as u32,
bucket + 512,
"ttl: {end:?}"
);
}
for bucket in 16..256 {
let start = Duration::from_secs(32_768 * bucket);
let end = Duration::from_secs(32_768 * bucket + 32_767);
assert_eq!(
ttl_buckets.get_bucket_index(start) as u32,
bucket + 768,
"ttl: {start:?}"
);
assert_eq!(
ttl_buckets.get_bucket_index(end) as u32,
bucket + 768,
"ttl: {end:?}"
);
}
assert_eq!(
ttl_buckets.get_bucket_index(Duration::from_secs(8_388_608)) as u32,
1023
);
}