pub const ROOT_INDEX_ENTRY_SIZE: usize = 12;
pub const NODE_INDEX_OFFSET: usize = 0;
pub const SOURCE_OFFSET_FIELD: usize = 4;
pub const BASE_OFFSET_FIELD: usize = 8;
pub const PARSE_FAILURE_SENTINEL: u32 = 0;
#[inline]
#[must_use]
pub const fn section_size(n: usize) -> usize {
ROOT_INDEX_ENTRY_SIZE * n
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn entry_size_is_12() {
assert_eq!(ROOT_INDEX_ENTRY_SIZE, 12);
}
#[test]
fn entry_field_offsets_partition_12_bytes() {
let layout: &[(usize, usize)] = &[
(NODE_INDEX_OFFSET, 4),
(SOURCE_OFFSET_FIELD, 4),
(BASE_OFFSET_FIELD, 4),
];
let mut cursor = 0usize;
for (offset, size) in layout {
assert_eq!(*offset, cursor);
cursor += size;
}
assert_eq!(cursor, ROOT_INDEX_ENTRY_SIZE);
}
#[test]
fn parse_failure_sentinel_is_zero() {
assert_eq!(PARSE_FAILURE_SENTINEL, 0);
}
#[test]
fn section_size_examples() {
assert_eq!(section_size(2), 24);
assert_eq!(section_size(1), 12);
assert_eq!(section_size(0), 0);
}
}