1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
use saddle_points;
use saddle_points::find_saddle_points;
// We don't care about order
fn find_sorted_saddle_points(input: &[Vec<u64>]) -> Vec<(usize, usize)> {
let mut result = saddle_points::find_saddle_points(input);
result.sort();
result
}
#[test]
fn identify_single_saddle_point() {
let input = vec![vec![9, 8, 7], vec![5, 3, 2], vec![6, 6, 7]];
assert_eq!(vec![(1, 0)], find_saddle_points(&input));
}
#[test]
fn identify_empty_matrix() {
let input = vec![vec![], vec![], vec![]];
let expected: Vec<(usize, usize)> = Vec::new();
assert_eq!(expected, find_saddle_points(&input));
}
#[test]
fn identify_lack_of_saddle_point() {
let input = vec![vec![1, 2, 3], vec![3, 1, 2], vec![2, 3, 1]];
let expected: Vec<(usize, usize)> = Vec::new();
assert_eq!(expected, find_saddle_points(&input));
}
#[test]
fn multiple_saddle_points_in_col() {
let input = vec![vec![4, 5, 4], vec![3, 5, 5], vec![1, 5, 4]];
assert_eq!(
vec![(0, 1), (1, 1), (2, 1)],
find_sorted_saddle_points(&input)
);
}
#[test]
fn multiple_saddle_points_in_row() {
let input = vec![vec![6, 7, 8], vec![5, 5, 5], vec![7, 5, 6]];
assert_eq!(
vec![(1, 0), (1, 1), (1, 2)],
find_sorted_saddle_points(&input)
);
}
#[test]
fn identify_bottom_right_saddle_point() {
let input = vec![vec![8, 7, 9], vec![6, 7, 6], vec![3, 2, 5]];
assert_eq!(vec![(2, 2)], find_saddle_points(&input));
}
// track specific as of v1.3
#[test]
fn non_square_matrix_high() {
let input = vec![vec![1, 5], vec![3, 6], vec![2, 7], vec![3, 8]];
assert_eq!(vec![(0, 1)], find_saddle_points(&input));
}
#[test]
fn non_square_matrix_wide() {
let input = vec![vec![3, 1, 3], vec![3, 2, 4]];
assert_eq!(vec![(0, 0), (0, 2)], find_sorted_saddle_points(&input));
}
#[test]
fn single_column_matrix() {
let input = vec![vec![2], vec![1], vec![4], vec![1]];
assert_eq!(vec![(1, 0), (3, 0)], find_sorted_saddle_points(&input));
}
#[test]
fn single_row_matrix() {
let input = vec![vec![2, 5, 3, 5]];
assert_eq!(vec![(0, 1), (0, 3)], find_sorted_saddle_points(&input));
}
#[test]
fn identify_all_saddle_points() {
let input = vec![vec![5, 5, 5], vec![5, 5, 5], vec![5, 5, 5]];
assert_eq!(
vec![
(0, 0),
(0, 1),
(0, 2),
(1, 0),
(1, 1),
(1, 2),
(2, 0),
(2, 1),
(2, 2)
],
find_sorted_saddle_points(&input)
);
}
|