logisheets_controller 1.16.1

Core spreadsheet engine for LogiSheets: formula evaluation, dependency tracking, and undo/redo.
Documentation
pub fn calc_npv(rate: f64, values: &[f64]) -> f64 {
    if rate == 0.0 {
        return values.iter().sum();
    }
    let result = values.iter().enumerate().fold(0_f64, |prev, (idx, value)| {
        let r = (1. + rate).powi(1 + idx as i32);
        value / r + prev
    });
    result
}

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

    #[test]
    fn npv_test() {
        let cf = [-1000., 500., 500., 500.];
        let rate = 0.1;
        assert_eq!(calc_npv(rate, &cf), 221.29635953828273)
    }

    #[test]
    fn npv_test2() {
        let cf = [-1000., 500., 500., 500.];
        let rate = 0_f64;
        assert_eq!(calc_npv(rate, &cf), 500.)
    }
}