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