ftp_core/common/
func_stock_instal.rs

1use crate::holding_struct::FtpResult;
2
3pub fn func_stock_instal(ftp_result: &mut FtpResult, rownum: usize, colnum: usize) {
4    let m = match &ftp_result.stock_amort {
5        Some(stock_amort) => stock_amort,
6        None => {
7            eprintln!("stock_amort is None, cannot read value.");
8            return;
9        }
10    };
11    // println!("ok");
12    // Check if stock_amort is Some and mutate it
13    if let Some(stock_instal) = &mut ftp_result.stock_instal {
14        if colnum > 0 {
15            stock_instal[[rownum, colnum]] = m[[rownum, colnum - 1]] - m[[rownum, colnum]];
16        }
17    } else {
18        // Handle the case where stock_amort is None, if necessary
19        eprintln!("stock_instal is None, cannot update value.");
20    }
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26    use crate::holding_struct::FtpResult;
27    use ndarray::{array, Array2};
28
29    #[test]
30    fn test_func_stock_instal_calculation() {
31        let mut ftp_result = FtpResult::new(
32            array![[1000.0]],
33            array![[1.0, 0.5, 0.2]],
34            array![[0.01, 0.02]],
35        );
36
37        let (nrows, ncols) = ftp_result.input_profiles.dim();
38
39        // Créer une matrice stock_amort avec des valeurs connues
40        let mut stock_amort = Array2::<f64>::zeros((nrows, ncols));
41        stock_amort[[0, 0]] = 1000.0;
42        stock_amort[[0, 1]] = 500.0;
43        stock_amort[[0, 2]] = 200.0;
44
45        ftp_result.stock_amort = Some(stock_amort);
46        ftp_result.stock_instal = Some(Array2::<f64>::zeros((nrows, ncols)));
47
48        func_stock_instal(&mut ftp_result, 0, 1);
49
50        assert!(ftp_result.stock_instal.is_some());
51        let stock_instal = ftp_result.stock_instal.unwrap();
52        assert_eq!(stock_instal[[0, 1]], 500.0); // 1000 - 500
53    }
54
55    #[test]
56    fn test_func_stock_instal_first_column() {
57        let mut ftp_result = FtpResult::new(
58            array![[1000.0]],
59            array![[1.0, 0.5, 0.2]],
60            array![[0.01, 0.02]],
61        );
62
63        let (nrows, ncols) = ftp_result.input_profiles.dim();
64        ftp_result.stock_amort = Some(Array2::<f64>::ones((nrows, ncols)));
65        ftp_result.stock_instal = Some(Array2::<f64>::zeros((nrows, ncols)));
66
67        func_stock_instal(&mut ftp_result, 0, 0);
68
69        // Pour colnum = 0, la valeur ne devrait pas changer
70        let stock_instal = ftp_result.stock_instal.unwrap();
71        assert_eq!(stock_instal[[0, 0]], 0.0);
72    }
73}