diff --git a/exercises/luhn/example.rs b/exercises/luhn/example.rs index da6c35021..e2eb42421 100644 --- a/exercises/luhn/example.rs +++ b/exercises/luhn/example.rs @@ -1,5 +1,6 @@ pub fn is_valid(candidate: &str) -> bool { - if candidate.chars().any(|c| c.is_alphabetic()) || candidate.chars().count() == 1 { + if candidate.chars().filter(|c| c.is_digit(10)).take(2).count() <= 1 || + candidate.chars().any(|c| !c.is_digit(10) && c != ' ') { return false; } diff --git a/exercises/luhn/tests/luhn.rs b/exercises/luhn/tests/luhn.rs index bcf809e5e..7a400f3e5 100644 --- a/exercises/luhn/tests/luhn.rs +++ b/exercises/luhn/tests/luhn.rs @@ -13,6 +13,12 @@ fn single_zero_string_is_invalid() { assert!(!is_valid("0")); } +#[test] +#[ignore] +fn simple_valid_sin() { + assert!(is_valid(" 5 9 ")); +} + #[test] #[ignore] fn valid_canadian_sin_is_valid() { @@ -36,3 +42,39 @@ fn invalid_credit_card_is_invalid() { fn strings_that_contain_non_digits_are_invalid() { assert!(!is_valid("046a 454 286")); } + +#[test] +#[ignore] +fn punctuation_is_invalid() { + assert!(!is_valid("055-444-285")); +} + +#[test] +#[ignore] +fn symbols_are_invalid() { + assert!(!is_valid("055£ 444$ 285")); +} + +#[test] +#[ignore] +fn single_digit_with_space_is_invalid() { + assert!(!is_valid(" 0")); +} + +#[test] +#[ignore] +fn lots_of_zeros_are_valid() { + assert!(is_valid(" 00000")); +} + +#[test] +#[ignore] +fn another_valid_sin() { + assert!(is_valid("055 444 285")); +} + +#[test] +#[ignore] +fn nine_doubled_is_nine() { + assert!(is_valid("091")); +}