Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion exercises/saddle-points/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "saddle-points"
version = "1.1.0"
version = "1.3.0"

[dependencies]
2 changes: 2 additions & 0 deletions exercises/saddle-points/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ A matrix may have zero or more saddle points.
Your code should be able to provide the (possibly empty) list of all the
saddle points for any given matrix.

The matrix can have a different number of rows and columns (Non square).

Note that you may find other definitions of matrix saddle points online,
but the tests for this exercise follow the above unambiguous definition.

Expand Down
102 changes: 83 additions & 19 deletions exercises/saddle-points/tests/saddle-points.rs
Original file line number Diff line number Diff line change
@@ -1,60 +1,124 @@
extern crate saddle_points;

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 test_identify_single_saddle_point() {
let input = vec![vec![9, 8, 7], vec![5, 3, 2], vec![6, 6, 7]];
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]
#[ignore]
fn test_identify_empty_matrix() {
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]
#[ignore]
fn test_identify_lack_of_saddle_point() {
let input = vec![vec![1, 2, 3], vec![3, 1, 2], vec![2, 3, 1]];
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]
#[ignore]
fn test_multiple_saddle_point() {
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_saddle_points(&input));
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]
#[ignore]
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]
#[ignore]
fn test_identify_bottom_right_saddle_point() {
let input = vec![vec![8, 7, 9], vec![6, 7, 6], vec![3, 2, 5]];
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]
#[ignore]
fn test_non_square_matrix_high() {
let input = vec![vec![1, 5], vec![3, 6], vec![2, 7], vec![3, 8]];
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]
#[ignore]
fn test_non_square_matrix_wide() {
let input = vec![vec![8, 7, 10, 7, 9], vec![8, 7, 13, 7, 9]];
assert_eq!(vec![(0, 2)], find_saddle_points(&input));
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]
#[ignore]
fn test_vector_matrix() {
let input = vec![vec![1], vec![3], vec![2], vec![3]];
assert_eq!(vec![(0, 0)], find_saddle_points(&input));
fn single_column_matrix() {
let input = vec![
vec![2],
vec![1],
vec![4],
vec![1],
];
assert_eq!(vec![(1, 0), (3, 0)], find_saddle_points(&input));
}

#[test]
#[ignore]
fn single_row_matrix() {
let input = vec![
vec![2, 5, 3, 5],
];
assert_eq!(vec![(0, 1), (0, 3)], find_saddle_points(&input));
}