diff --git a/exercises/nucleotide-count/example.rs b/exercises/nucleotide-count/example.rs index 603e1a4bf..e5967218e 100644 --- a/exercises/nucleotide-count/example.rs +++ b/exercises/nucleotide-count/example.rs @@ -3,11 +3,15 @@ use std::collections::HashMap; static VALID_NUCLEOTIDES: &'static str = "ACGT"; pub fn count(nucleotide: char, input: &str) -> Result { - let valid = |x: char| { VALID_NUCLEOTIDES.contains(x) }; - if valid(nucleotide) && input.chars().all(valid) { - Ok(input.chars().filter(|&c| c == nucleotide).count()) - } else { + let valid = |x: char| VALID_NUCLEOTIDES.contains(x); + + if !valid(nucleotide) { Err(nucleotide) + } else { + match input.chars().find(|&c| !valid(c)) { + Some(c) => Err(c), + None => Ok(input.chars().filter(|&c| c == nucleotide).count()), + } } } diff --git a/exercises/nucleotide-count/src/lib.rs b/exercises/nucleotide-count/src/lib.rs index 8b1378917..341c5f145 100644 --- a/exercises/nucleotide-count/src/lib.rs +++ b/exercises/nucleotide-count/src/lib.rs @@ -1 +1,16 @@ +use std::collections::HashMap; +pub fn count(nucleotide: char, dna: &str) -> Result { + unimplemented!( + "How much of nucleotide type '{}' is contained inside DNA string '{}'?", + nucleotide, + dna + ); +} + +pub fn nucleotide_counts(dna: &str) -> Result, char> { + unimplemented!( + "How much of every nucleotide type is contained inside DNA string '{}'?", + dna + ); +} diff --git a/exercises/nucleotide-count/tests/nucleotide-count.rs b/exercises/nucleotide-count/tests/nucleotide-count.rs index 53f75ac23..d6eb47f76 100644 --- a/exercises/nucleotide-count/tests/nucleotide-count.rs +++ b/exercises/nucleotide-count/tests/nucleotide-count.rs @@ -29,13 +29,13 @@ fn test_count_empty() { #[test] #[ignore] fn count_invalid_nucleotide() { - assert!(dna::count('X', "A").is_err()); + assert_eq!(dna::count('X', "A"), Err('X')); } #[test] #[ignore] fn count_invalid_dna() { - assert!(dna::count('A', "AX").is_err()); + assert_eq!(dna::count('A', "AX"), Err('X')); } #[test] @@ -81,5 +81,5 @@ fn test_nucleotide_count_counts_all() { #[test] #[ignore] fn counts_invalid_nucleotide_results_in_err() { - assert!(dna::nucleotide_counts("GGXXX").is_err()); + assert_eq!(dna::nucleotide_counts("GGXXX"), Err('X')); }