pub const EMPTY_DATA: &[u8] = b"";
pub const SMALL_DATA: &[u8] = b"hello world";
pub const UNICODE_DATA: &[u8] = "Hello δΈη π Rust".as_bytes();
pub const LARGE_DATA_SIZE: usize = 10_000_000;
pub const TEST_MASTER_KEY: &[u8; 32] = &[
0x3e, 0x5a, 0x89, 0x7f, 0x2c, 0x1d, 0x4b, 0x91, 0xa2, 0x6f, 0x3c, 0xd4, 0x8e, 0x5b, 0x72, 0x19,
0xf6, 0x4a, 0x21, 0x98, 0xc7, 0x65, 0x3d, 0xb0, 0x84, 0x59, 0x2e, 0xd1, 0xa6, 0x7b, 0x30, 0xe5,
];
pub const TEST_TENANT_A: &[u8] = b"tenant_alice";
pub const TEST_TENANT_B: &[u8] = b"tenant_bob";
pub fn generate_large_data(size: usize, pattern: u8) -> Vec<u8> {
vec![pattern; size]
}
pub fn generate_incompressible_data(size: usize, seed: u64) -> Vec<u8> {
let mut rng = SimplePcg::new(seed);
(0..size).map(|_| rng.next_byte()).collect()
}
struct SimplePcg {
state: u64,
}
impl SimplePcg {
fn new(seed: u64) -> Self {
Self { state: seed }
}
fn next_byte(&mut self) -> u8 {
let old_state = self.state;
self.state = old_state
.wrapping_mul(6364136223846793005)
.wrapping_add(1442695040888963407);
let xor_shifted = (((old_state >> 18) ^ old_state) >> 27) as u32;
let rot = (old_state >> 59) as u32;
(xor_shifted.rotate_right(rot) & 0xff) as u8
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_fixture_constants() {
assert_eq!(EMPTY_DATA, b"");
assert_eq!(SMALL_DATA, b"hello world");
assert!(UNICODE_DATA.len() > SMALL_DATA.len());
assert_eq!(LARGE_DATA_SIZE, 10_000_000);
assert_eq!(TEST_MASTER_KEY.len(), 32);
assert_eq!(TEST_TENANT_A, b"tenant_alice");
assert_eq!(TEST_TENANT_B, b"tenant_bob");
assert_ne!(TEST_TENANT_A, TEST_TENANT_B);
}
#[test]
fn test_generate_large_data() {
let data = generate_large_data(1000, 0x42);
assert_eq!(data.len(), 1000);
assert!(data.iter().all(|&b| b == 0x42));
}
#[test]
fn test_generate_incompressible_data() {
let data1 = generate_incompressible_data(1000, 12345);
let data2 = generate_incompressible_data(1000, 12345);
let data3 = generate_incompressible_data(1000, 54321);
assert_eq!(data1, data2);
assert_ne!(data1, data3);
let unique_bytes: std::collections::HashSet<u8> = data1.iter().copied().collect();
assert!(
unique_bytes.len() > 10,
"Incompressible data should have variety"
);
}
}