generate-sample-pdf 0.1.1

Distinguishable sample PDF generator
use std::vec::Vec;

pub fn divide(size: usize, pages: usize) -> Vec<usize> {
    let mut result: Vec<usize> = Vec::new();
    result.reserve_exact(pages);

    let divider = size / pages;
    for _ in 0..pages - 1 {
        result.push(divider)
    }
    result.push(size - ((pages - 1) * divider));

    result
}

pub fn divide_at(size: usize, pages: usize, at: usize) -> usize {
    divide(size, pages)[at]
}

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

    #[test]
    fn basic() {
        assert_eq!(divide(10, 1), vec![10])
    }

    #[test]
    fn basic2() {
        assert_eq!(divide(33, 3), vec![11, 11, 11])
    }

    #[test]
    fn basic3() {
        assert_eq!(divide(34, 3), vec![11, 11, 12])
    }

    #[test]
    fn basic4() {
        assert_eq!(divide(10, 3), vec![3, 3, 4])
    }

    #[test]
    fn basic5() {
        assert_eq!(divide(555, 1), vec![555])
    }

    #[test]
    fn divider_smaller_than_size() {
        assert_eq!(divide(1, 3), vec![0, 0, 1])
    }

    #[test]
    fn dumps_value_when_divider_is_1() {
        assert_eq!(divide(1, 1), vec![1]);
    }

    #[test]
    #[should_panic]
    fn panics_when_divider_is_0() {
        divide(1, 0);
    }
}