math_rs/matrix/float/
display.rs

1//! This crate just works for displaying matrices in a "beautiful way". Hence, it is just for debugging
2
3use std::fmt::Display;
4
5use crate::matrix::traits::Matrix;
6
7use super::MatrixF32;
8
9impl Display for MatrixF32 {
10    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11        let mut prec = self.tolerance();
12        let mut decimal_points: usize = 0;
13        while prec.abs() < 1.0 {
14            prec *= 10.0;
15            decimal_points += 1;
16        }
17        Ok(for i in 0..self.rows() {
18            for j in 0..self.columns() {
19                write!(f, "{:+.decimal_points$} ", self.get(i, j)?)?
20            }
21            write!(f, "\n")?
22        })
23    }
24}
25
26#[cfg(test)]
27mod test {
28    use crate::matrix::float::MatrixF32;
29    const TOLERANCE: f32 = 1e-12;
30
31    #[test]
32    #[ignore]
33    fn debug() {
34        let matrix = vec![
35            vec![11111.1, 2.2, 3.3],
36            vec![4.4, 5.5, 6.6],
37            vec![7.7, 8.8, 9.9],
38        ];
39        let matrix = MatrixF32::new(matrix, TOLERANCE).unwrap();
40        println!("{matrix}")
41    }
42
43    #[test]
44    fn print_float() {
45        let matrix = MatrixF32::new(
46            vec![
47                vec![1.1, 2.2, 3.3],
48                vec![4.4, 5.5, 6.6],
49                vec![7.7, 8.8, 9.9],
50            ],
51            1e-4,
52        )
53        .unwrap();
54        let expected = "+1.10000 +2.20000 +3.30000 
55+4.40000 +5.50000 +6.60000 
56+7.70000 +8.80000 +9.90000 
57";
58        pretty_assertions::assert_eq!(matrix.to_string(), expected)
59    }
60}