diff --git a/isbn-verifier/src/lib.rs b/isbn-verifier/src/lib.rs index f2f9502..0672051 100644 --- a/isbn-verifier/src/lib.rs +++ b/isbn-verifier/src/lib.rs @@ -1,4 +1,20 @@ /// Determines whether the supplied string is a valid ISBN number pub fn is_valid_isbn(isbn: &str) -> bool { - unimplemented!("Is {:?} a valid ISBN number?", isbn); + if isbn.len() < 10 { return false; } + let mut multiplier:i8 = 10; + let mut output = 0; + for char in isbn.chars(){ + match char.to_digit(10){ + Some(value) =>{ + output += value * multiplier as u32; + multiplier -= 1; + }, + None =>{ + if char.to_ascii_lowercase() == 'x' && multiplier == 1{ + output += 10; + } + } + } + } + output % 11 == 0 && multiplier >= 0 } diff --git a/isbn-verifier/tests/isbn-verifier.rs b/isbn-verifier/tests/isbn-verifier.rs index ea381c0..8f227e4 100644 --- a/isbn-verifier/tests/isbn-verifier.rs +++ b/isbn-verifier/tests/isbn-verifier.rs @@ -6,112 +6,94 @@ fn test_valid() { } #[test] -#[ignore] fn test_invalid_check_digit() { assert!(!is_valid_isbn("3-598-21508-9")); } #[test] -#[ignore] fn test_valid_check_digit_of_10() { assert!(is_valid_isbn("3-598-21507-X")); } #[test] -#[ignore] fn test_invalid_character_as_check_digit() { assert!(!is_valid_isbn("3-598-21507-A")); } #[test] -#[ignore] fn test_invalid_character_in_isbn() { assert!(!is_valid_isbn("3-598-P1581-X")); } #[test] -#[ignore] #[allow(non_snake_case)] fn test_invalid_isbn_with_invalid_X() { assert!(!is_valid_isbn("3-598-2X507-9")); } #[test] -#[ignore] fn test_valid_isbn_without_dashes() { assert!(is_valid_isbn("3598215088")); } #[test] -#[ignore] #[allow(non_snake_case)] fn test_valid_isbn_without_dashes_and_X_as_check() { assert!(is_valid_isbn("359821507X")); } #[test] -#[ignore] fn test_invalid_isbn_without_dashes_and_no_check_digit() { assert!(!is_valid_isbn("359821507")); } #[test] -#[ignore] fn test_invalid_isbn_without_dashes_and_too_long() { assert!(!is_valid_isbn("3598215078X")); } #[test] -#[ignore] fn too_short_isbn() { assert!(!is_valid_isbn("00")); } #[test] -#[ignore] fn test_invalid_isbn_without_check_digit() { assert!(!is_valid_isbn("3-598-21507")); } #[test] -#[ignore] fn test_valid_digits_invalid_length() { assert!(!is_valid_isbn("35982150881")); } #[test] -#[ignore] fn test_special_characters() { assert!(!is_valid_isbn("!@#%!@")); } #[test] -#[ignore] #[allow(non_snake_case)] fn test_invalid_isbn_with_check_digit_X_instead_of_0() { assert!(!is_valid_isbn("3-598-21515-X")); } #[test] -#[ignore] fn empty_isbn() { assert!(!is_valid_isbn("")); } #[test] -#[ignore] fn input_is_9_characters() { assert!(!is_valid_isbn("134456729")); } #[test] -#[ignore] fn invalid_characters_are_not_ignored() { assert!(!is_valid_isbn("3132P34035")); } #[test] -#[ignore] fn too_long_but_contains_a_valid_isbn() { assert!(!is_valid_isbn("98245726788")); }