logisheets_controller 1.16.1

Core spreadsheet engine for LogiSheets: formula evaluation, dependency tracking, and undo/redo.
Documentation
use num_bigint::BigUint;
use num_traits::One;

pub fn fact(n: u64) -> BigUint {
    let mut f1: BigUint = One::one();
    for n in 2..n + 1 {
        f1 *= n;
    }
    f1
}

pub fn factdouble(num: u64) -> u64 {
    if num <= 1 {
        1_u64
    } else {
        factdouble(num - 2) * num
    }
}

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

    #[test]
    fn fact_test() {
        let n = 0;
        assert_eq!(fact(n), 1u64.into());
        let n = 4;
        assert_eq!(fact(n), 24u64.into());
    }

    #[test]
    fn factdouble_test() {
        let n = 6;
        assert_eq!(factdouble(n), 48);
        let n = 7;
        assert_eq!(factdouble(n), 105);
    }
}