From 4ab53d15aa2c4216295cf36a7524d17ee7924b7e Mon Sep 17 00:00:00 2001 From: Emerentius Date: Tue, 14 Aug 2018 13:45:37 +0200 Subject: [PATCH 1/2] saddle-points: update README --- exercises/saddle-points/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/exercises/saddle-points/README.md b/exercises/saddle-points/README.md index a95543601..fc5e057f0 100644 --- a/exercises/saddle-points/README.md +++ b/exercises/saddle-points/README.md @@ -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. From a68d688083c92d40c836a7068a0dcb49627e9416 Mon Sep 17 00:00:00 2001 From: Emerentius Date: Tue, 14 Aug 2018 13:18:00 +0200 Subject: [PATCH 2/2] saddle-points: update test suite to v1.3 adds two new tests: - test_multiple_saddle_points_in_row - test_single_row_matrix some old, additional tests overlap with new tests replaced the following with standard tests: - test_non_square_matrix_wide - test_vector_matrix -> test_single_column_matrix kept one additional track-specific test: - test_non_square_matrix_high --- exercises/saddle-points/Cargo.toml | 2 +- .../saddle-points/tests/saddle-points.rs | 102 ++++++++++++++---- 2 files changed, 84 insertions(+), 20 deletions(-) diff --git a/exercises/saddle-points/Cargo.toml b/exercises/saddle-points/Cargo.toml index 28569f5bf..fc43d00f7 100644 --- a/exercises/saddle-points/Cargo.toml +++ b/exercises/saddle-points/Cargo.toml @@ -1,5 +1,5 @@ [package] name = "saddle-points" -version = "1.1.0" +version = "1.3.0" [dependencies] diff --git a/exercises/saddle-points/tests/saddle-points.rs b/exercises/saddle-points/tests/saddle-points.rs index 8021b79dc..52f06a511 100644 --- a/exercises/saddle-points/tests/saddle-points.rs +++ b/exercises/saddle-points/tests/saddle-points.rs @@ -1,16 +1,27 @@ 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]) -> 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)); @@ -18,43 +29,96 @@ fn test_identify_empty_matrix() { #[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)); +} +