pub const DEFAULT_TEST_BLOCK_SIZE: usize = 4;
pub const DEFAULT_TEST_BLOCK_COUNT: usize = 10;
pub const TEST_BLOCK_SIZES: &[usize] = &[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024];
pub const COMMON_TEST_BLOCK_SIZES: &[usize] = &[1, 4, 16, 64];
pub mod constants {
pub const TINY: usize = 1;
pub const SMALL: usize = 4;
pub const MEDIUM: usize = 16;
pub const LARGE: usize = 64;
pub const MAX: usize = 1024;
}
pub fn validate_test_block_size(size: usize) -> bool {
size.is_power_of_two() && (1..=1024).contains(&size)
}
pub fn generate_test_tokens(base: u32, block_size: usize) -> Vec<u32> {
(base..base + block_size as u32).collect()
}
pub fn generate_unique_token_sequences(count: usize, block_size: usize) -> Vec<Vec<u32>> {
(0..count)
.map(|i| generate_test_tokens(i as u32 * 1000, block_size))
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_validate_test_block_size() {
assert!(validate_test_block_size(1));
assert!(validate_test_block_size(4));
assert!(validate_test_block_size(16));
assert!(validate_test_block_size(1024));
assert!(!validate_test_block_size(0));
assert!(!validate_test_block_size(3)); assert!(!validate_test_block_size(5)); assert!(!validate_test_block_size(2048)); }
#[test]
fn test_generate_test_tokens() {
let tokens = generate_test_tokens(100, 4);
assert_eq!(tokens, vec![100, 101, 102, 103]);
let tokens = generate_test_tokens(0, 1);
assert_eq!(tokens, vec![0]);
}
#[test]
fn test_generate_unique_token_sequences() {
let sequences = generate_unique_token_sequences(3, 2);
assert_eq!(sequences.len(), 3);
assert_eq!(sequences[0], vec![0, 1]);
assert_eq!(sequences[1], vec![1000, 1001]);
assert_eq!(sequences[2], vec![2000, 2001]);
for i in 0..sequences.len() {
for j in (i + 1)..sequences.len() {
assert_ne!(sequences[i], sequences[j]);
}
}
}
#[test]
fn test_constants_are_valid() {
assert!(validate_test_block_size(constants::TINY));
assert!(validate_test_block_size(constants::SMALL));
assert!(validate_test_block_size(constants::MEDIUM));
assert!(validate_test_block_size(constants::LARGE));
assert!(validate_test_block_size(constants::MAX));
}
#[test]
fn test_block_sizes_arrays_are_valid() {
for &size in TEST_BLOCK_SIZES {
assert!(
validate_test_block_size(size),
"Invalid test block size: {}",
size
);
}
for &size in COMMON_TEST_BLOCK_SIZES {
assert!(
validate_test_block_size(size),
"Invalid common test block size: {}",
size
);
}
}
#[test]
fn test_default_constants() {
assert_eq!(DEFAULT_TEST_BLOCK_SIZE, 4);
assert_eq!(DEFAULT_TEST_BLOCK_COUNT, 10);
assert!(validate_test_block_size(DEFAULT_TEST_BLOCK_SIZE));
}
}