1 #![cfg(feature = "ndarray")]
2 
3 use ndarray::{arr2, Array, Array2};
4 use rand::SeedableRng;
5 use rand_chacha::ChaCha20Rng;
6 use smawk::monge::is_monge;
7 
8 mod random_monge;
9 use random_monge::{random_monge_matrix, MongePrim};
10 
11 #[test]
random_monge()12 fn random_monge() {
13     let mut rng = ChaCha20Rng::seed_from_u64(0);
14     let matrix: Array2<u8> = random_monge_matrix(5, 5, &mut rng);
15 
16     assert!(is_monge(&matrix));
17     assert_eq!(
18         matrix,
19         arr2(&[
20             [2, 3, 4, 4, 5],
21             [5, 5, 6, 6, 7],
22             [3, 3, 4, 4, 5],
23             [5, 2, 3, 3, 4],
24             [5, 2, 3, 3, 4]
25         ])
26     );
27 }
28 
29 #[test]
monge_constant_rows()30 fn monge_constant_rows() {
31     let mut rng = ChaCha20Rng::seed_from_u64(0);
32     let matrix: Array2<u8> = MongePrim::ConstantRows.to_matrix(5, 4, &mut rng);
33     assert!(is_monge(&matrix));
34     for row in matrix.genrows() {
35         let elem = row[0];
36         assert_eq!(row, Array::from_elem(matrix.ncols(), elem));
37     }
38 }
39 
40 #[test]
monge_constant_cols()41 fn monge_constant_cols() {
42     let mut rng = ChaCha20Rng::seed_from_u64(0);
43     let matrix: Array2<u8> = MongePrim::ConstantCols.to_matrix(5, 4, &mut rng);
44     assert!(is_monge(&matrix));
45     for column in matrix.gencolumns() {
46         let elem = column[0];
47         assert_eq!(column, Array::from_elem(matrix.nrows(), elem));
48     }
49 }
50 
51 #[test]
monge_upper_right_ones()52 fn monge_upper_right_ones() {
53     let mut rng = ChaCha20Rng::seed_from_u64(1);
54     let matrix: Array2<u8> = MongePrim::UpperRightOnes.to_matrix(5, 4, &mut rng);
55     assert!(is_monge(&matrix));
56     assert_eq!(
57         matrix,
58         arr2(&[
59             [0, 0, 1, 1],
60             [0, 0, 1, 1],
61             [0, 0, 1, 1],
62             [0, 0, 0, 0],
63             [0, 0, 0, 0]
64         ])
65     );
66 }
67 
68 #[test]
monge_lower_left_ones()69 fn monge_lower_left_ones() {
70     let mut rng = ChaCha20Rng::seed_from_u64(1);
71     let matrix: Array2<u8> = MongePrim::LowerLeftOnes.to_matrix(5, 4, &mut rng);
72     assert!(is_monge(&matrix));
73     assert_eq!(
74         matrix,
75         arr2(&[
76             [0, 0, 0, 0],
77             [0, 0, 0, 0],
78             [1, 1, 0, 0],
79             [1, 1, 0, 0],
80             [1, 1, 0, 0]
81         ])
82     );
83 }
84