1pub const INVALID_UINT64: u64 = u64::MAX;
8
9pub const DEFAULT_SEED: u64 = 1;
11
12pub const DEFAULT_RAM_LIMIT_GIB: usize = 8;
14
15pub const DEFAULT_LAMBDA: f64 = 5.0;
17pub const AVG_PARTITION_SIZE: usize = 3_000_000;
19
20pub const MIN_L: usize = 6;
22pub const MAX_L: usize = 13;
24
25pub const FORWARD_ORIENTATION: i8 = 1;
27pub const BACKWARD_ORIENTATION: i8 = -1;
29
30pub const VERSION: (u8, u8, u8) = (0, 1, 0);
32
33pub const VALID_K_VALUES: &[usize] = &[
36 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49,
37 51, 53, 55, 57, 59, 61, 63,
38];
39
40#[inline]
42pub const fn is_valid_k(k: usize) -> bool {
43 k >= 3 && k <= 63 && k % 2 == 1
44}
45
46pub const MAX_K: usize = 63;
48
49pub const MIN_K: usize = 3;
51
52#[inline]
57pub const fn ceil_log2(x: u64) -> usize {
58 if x <= 1 {
59 0
60 } else {
61 64 - (x - 1).leading_zeros() as usize
62 }
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68
69 #[test]
70 fn test_valid_k_values() {
71 for &k in VALID_K_VALUES {
73 assert!(is_valid_k(k), "k={} should be valid", k);
74 }
75
76 assert_eq!(VALID_K_VALUES.len(), 31);
78
79 let mut sorted = VALID_K_VALUES.to_vec();
81 sorted.sort_unstable();
82 sorted.dedup();
83 assert_eq!(sorted.len(), VALID_K_VALUES.len());
84 }
85
86 #[test]
87 fn test_is_valid_k() {
88 assert!(is_valid_k(3));
90 assert!(is_valid_k(31));
91 assert!(is_valid_k(63));
92 assert!(is_valid_k(21));
93
94 assert!(!is_valid_k(2));
96 assert!(!is_valid_k(4));
97 assert!(!is_valid_k(30));
98 assert!(!is_valid_k(32));
99
100 assert!(!is_valid_k(1));
102 assert!(!is_valid_k(65));
103 assert!(!is_valid_k(100));
104 }
105}