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