aboutsummaryrefslogtreecommitdiff
path: root/crates/fparkan-terrain-format/src
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-18 10:48:08 +0300
committerValentin Popov <valentin@popov.link>2026-10-18 10:48:08 +0300
commite98876e4c36ce3a5c95d83e0b0e5385b17e43349 (patch)
tree72925e3a45b910b6191adf8b203146d7ad9e4905 /crates/fparkan-terrain-format/src
parentec62f4f2e2c8d64107d17e54908c1c28a52fa1b0 (diff)
downloadfparkan-e98876e4c36ce3a5c95d83e0b0e5385b17e43349.tar.xz
fparkan-e98876e4c36ce3a5c95d83e0b0e5385b17e43349.zip
Test terrain LOD mapping and queries
Diffstat (limited to 'crates/fparkan-terrain-format/src')
-rw-r--r--crates/fparkan-terrain-format/src/lib.rs34
1 files changed, 33 insertions, 1 deletions
diff --git a/crates/fparkan-terrain-format/src/lib.rs b/crates/fparkan-terrain-format/src/lib.rs
index 88bd325..e4028f9 100644
--- a/crates/fparkan-terrain-format/src/lib.rs
+++ b/crates/fparkan-terrain-format/src/lib.rs
@@ -1853,12 +1853,44 @@ mod tests {
missing_nodes.faces.clear();
assert_eq!(missing_nodes.face_lod_assignments(), Ok(Vec::new()));
- let mut overlapping = mesh;
+ let mut overlapping = mesh.clone();
overlapping.slots.slots_raw[3][..2].copy_from_slice(&2_u16.to_le_bytes());
assert_eq!(
overlapping.face_lod_assignments(),
Err(TerrainLodError::DuplicateFaceAssignment { face: 2 })
);
+
+ let mut uncovered = mesh.clone();
+ uncovered.slots.slots_raw[1][2..4].copy_from_slice(&0_u16.to_le_bytes());
+ assert_eq!(
+ uncovered.face_lod_assignments(),
+ Err(TerrainLodError::MissingFaceAssignment { face: 1 })
+ );
+
+ let mut out_of_bounds = mesh.clone();
+ out_of_bounds.slots.slots_raw[3][..2].copy_from_slice(&4_u16.to_le_bytes());
+ assert_eq!(
+ out_of_bounds.face_lod_assignments(),
+ Err(TerrainLodError::FaceRangeOutOfBounds {
+ node: 1,
+ lod: TerrainLod::Lod1,
+ slot: 3,
+ start: 4,
+ count: 1,
+ face_count: 4,
+ })
+ );
+
+ let mut unsupported = mesh;
+ unsupported.nodes_raw[12..14].copy_from_slice(&0_u16.to_le_bytes());
+ assert_eq!(
+ unsupported.face_lod_assignments(),
+ Err(TerrainLodError::UnsupportedNodeSlot {
+ node: 0,
+ slot_index: 2,
+ slot: 0,
+ })
+ );
}
#[test]