use super::header::FileHeader;
use crate::hnsw::HnswConfig;
#[must_use]
pub fn write_empty_index(config: &HnswConfig) -> Vec<u8> {
let mut header = FileHeader::new(config.dimensions);
header.hnsw_m = config.m;
header.hnsw_m0 = config.m0;
header.vector_count = 0;
header.index_offset = 64;
header.update_checksum();
header.as_bytes().to_vec()
}
#[cfg(test)]
mod tests {
use super::*;
use crate::persistence::MAGIC;
#[test]
fn test_write_empty_index() {
let config = HnswConfig::new(128);
let bytes = write_empty_index(&config);
assert_eq!(bytes.len(), 64);
assert_eq!(&bytes[0..4], &MAGIC);
let dims = u32::from_le_bytes(bytes[40..44].try_into().unwrap());
assert_eq!(dims, 128);
let crc = u32::from_le_bytes(bytes[44..48].try_into().unwrap());
assert_ne!(crc, 0);
let header = FileHeader::from_bytes(&bytes).expect("Should parse valid header");
assert_eq!(header.dimensions, 128);
assert_eq!(header.hnsw_m, 12);
}
}