ftp_core/common/
func_stock_instal.rs1use 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 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 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 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); }
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 let stock_instal = ftp_result.stock_instal.unwrap();
71 assert_eq!(stock_instal[[0, 0]], 0.0);
72 }
73}