autofoam 0.2.9

autofoam and related tools
Documentation
pub fn update_coordinate_bounds(vertex: [f32; 3], min: &mut [f32; 3], max: &mut [f32; 3]) {
    min[0] = min[0].min(vertex[0]);
    min[1] = min[1].min(vertex[1]);
    min[2] = min[2].min(vertex[2]);

    max[0] = max[0].max(vertex[0]);
    max[1] = max[1].max(vertex[1]);
    max[2] = max[2].max(vertex[2]);
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_update_bounds_basic() {
        let mut min = [0.0, 0.0, 0.0];
        let mut max = [0.0, 0.0, 0.0];
        let vertex = [1.0, 2.0, 3.0];

        update_coordinate_bounds(vertex, &mut min, &mut max);

        assert_eq!(min, [0.0, 0.0, 0.0]);
        assert_eq!(max, [1.0, 2.0, 3.0]);
    }

    #[test]
    fn test_update_bounds_negative_vertex() {
        let mut min = [0.0, 0.0, 0.0];
        let mut max = [0.0, 0.0, 0.0];
        let vertex = [-1.0, -2.0, -3.0];

        update_coordinate_bounds(vertex, &mut min, &mut max);

        assert_eq!(min, [-1.0, -2.0, -3.0]);
        assert_eq!(max, [0.0, 0.0, 0.0]);
    }

    #[test]
    fn test_update_bounds_mixed_coordinates() {
        let mut min = [1.0, -1.0, 0.0];
        let mut max = [2.0, 1.0, 3.0];
        let vertex = [0.5, 2.0, -1.0];

        update_coordinate_bounds(vertex, &mut min, &mut max);

        assert_eq!(min, [0.5, -1.0, -1.0]);
        assert_eq!(max, [2.0, 2.0, 3.0]);
    }

    #[test]
    fn test_update_bounds_no_change() {
        let mut min = [-5.0, -5.0, -5.0];
        let mut max = [5.0, 5.0, 5.0];
        let vertex = [0.0, 0.0, 0.0];

        update_coordinate_bounds(vertex, &mut min, &mut max);

        assert_eq!(min, [-5.0, -5.0, -5.0]);
        assert_eq!(max, [5.0, 5.0, 5.0]);
    }

    #[test]
    fn test_update_bounds_sequential_vertices() {
        let mut min = [f32::INFINITY; 3];
        let mut max = [f32::NEG_INFINITY; 3];

        let vertices = [[1.0, 2.0, 3.0], [-1.0, 4.0, 1.0], [3.0, -2.0, 5.0]];

        for vertex in vertices {
            update_coordinate_bounds(vertex, &mut min, &mut max);
        }

        assert_eq!(min, [-1.0, -2.0, 1.0]);
        assert_eq!(max, [3.0, 4.0, 5.0]);
    }

    #[test]
    fn test_update_bounds_edge_values() {
        let mut min = [0.0, 0.0, 0.0];
        let mut max = [0.0, 0.0, 0.0];
        let vertex = [f32::MAX, f32::MIN, 0.0];

        update_coordinate_bounds(vertex, &mut min, &mut max);

        assert_eq!(min, [0.0, f32::MIN, 0.0]);
        assert_eq!(max, [f32::MAX, 0.0, 0.0]);
    }
}