pub const NAMES_FILE_V1: &str = "names-v1.tsv.zst";
pub const DESCRIPTIONS_FILE_V1: &str = "descriptions-v1.tsv.zst";
#[cfg(feature = "build")]
pub(crate) const ZSTD_LEVEL: i32 = 19;
pub fn rank_from_downloads(downloads: u64) -> u8 {
let rank = (8.0 * (downloads.saturating_add(1) as f64).log2()).floor();
if rank >= 255.0 { 255 } else { rank as u8 }
}
#[cfg(feature = "build")]
pub(crate) fn flatten_whitespace(s: &str) -> String {
s.split_whitespace().collect::<Vec<_>>().join(" ")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rank_is_monotonic_and_bounded() {
assert_eq!(rank_from_downloads(0), 0);
let mut prev = 0;
for downloads in [1, 5, 100, 1_000, 1_000_000, 500_000_000, u64::MAX] {
let rank = rank_from_downloads(downloads);
assert!(rank >= prev, "rank must not decrease");
prev = rank;
}
assert_eq!(rank_from_downloads(u64::MAX), 255);
assert!(rank_from_downloads(500_000_000) < 255);
}
}