plotlars-core 0.12.1

Core types and traits for plotlars
Documentation
#[doc(hidden)]
pub fn calculate_grid_dimensions(
    n_facets: usize,
    cols: Option<usize>,
    rows: Option<usize>,
) -> (usize, usize) {
    match (cols, rows) {
        (Some(c), Some(r)) => {
            if c * r < n_facets {
                panic!("Grid dimensions {}x{} cannot fit {} facets", c, r, n_facets);
            }
            (c, r)
        }
        (Some(c), None) => {
            let r = n_facets.div_ceil(c);
            (c, r)
        }
        (None, Some(r)) => {
            let c = n_facets.div_ceil(r);
            (c, r)
        }
        (None, None) => {
            let c = (n_facets as f64).sqrt().ceil() as usize;
            let r = n_facets.div_ceil(c);
            (c, r)
        }
    }
}

pub(crate) fn get_axis_reference(subplot_index: usize, axis_type: &str) -> String {
    if subplot_index == 0 {
        axis_type.to_string()
    } else {
        format!("{}{}", axis_type, subplot_index + 1)
    }
}

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

    #[test]
    fn test_grid_both_exact() {
        assert_eq!(calculate_grid_dimensions(4, Some(2), Some(2)), (2, 2));
    }

    #[test]
    fn test_grid_both_extra() {
        assert_eq!(calculate_grid_dimensions(3, Some(2), Some(2)), (2, 2));
    }

    #[test]
    #[should_panic(expected = "cannot fit")]
    fn test_grid_both_too_small() {
        calculate_grid_dimensions(5, Some(2), Some(2));
    }

    #[test]
    fn test_grid_cols_only() {
        assert_eq!(calculate_grid_dimensions(5, Some(3), None), (3, 2));
    }

    #[test]
    fn test_grid_rows_only() {
        assert_eq!(calculate_grid_dimensions(5, None, Some(2)), (3, 2));
    }

    #[test]
    fn test_grid_auto_1() {
        assert_eq!(calculate_grid_dimensions(1, None, None), (1, 1));
    }

    #[test]
    fn test_grid_auto_4() {
        assert_eq!(calculate_grid_dimensions(4, None, None), (2, 2));
    }

    #[test]
    fn test_grid_auto_5() {
        assert_eq!(calculate_grid_dimensions(5, None, None), (3, 2));
    }

    #[test]
    fn test_grid_auto_9() {
        assert_eq!(calculate_grid_dimensions(9, None, None), (3, 3));
    }

    #[test]
    fn test_axis_ref_index_zero() {
        assert_eq!(get_axis_reference(0, "x"), "x");
    }

    #[test]
    fn test_axis_ref_index_one() {
        assert_eq!(get_axis_reference(1, "x"), "x2");
    }

    #[test]
    fn test_axis_ref_index_seven() {
        assert_eq!(get_axis_reference(7, "y"), "y8");
    }
}