pub const COUNT_HEADER_SIZE: usize = 4;
pub const DIAGNOSTIC_ENTRY_SIZE: usize = 8;
pub const ROOT_INDEX_OFFSET: usize = 0;
pub const MESSAGE_INDEX_OFFSET: usize = 4;
#[inline]
#[must_use]
pub const fn section_size(m: usize) -> usize {
COUNT_HEADER_SIZE + DIAGNOSTIC_ENTRY_SIZE * m
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn entry_size_is_8() {
assert_eq!(DIAGNOSTIC_ENTRY_SIZE, 8);
}
#[test]
fn entry_field_offsets_partition_8_bytes() {
let layout: &[(usize, usize)] = &[(ROOT_INDEX_OFFSET, 4), (MESSAGE_INDEX_OFFSET, 4)];
let mut cursor = 0usize;
for (offset, size) in layout {
assert_eq!(*offset, cursor);
cursor += size;
}
assert_eq!(cursor, DIAGNOSTIC_ENTRY_SIZE);
}
#[test]
fn section_size_for_zero_entries_is_just_count_header() {
assert_eq!(section_size(0), COUNT_HEADER_SIZE);
}
#[test]
fn section_size_examples() {
assert_eq!(section_size(2), 20);
assert_eq!(section_size(10), 84);
assert_eq!(section_size(100), 804);
}
}