From d75b9adfbc038d25cd1629f51c527ff243bab6a8 Mon Sep 17 00:00:00 2001 From: ZapAnton Date: Tue, 3 Jul 2018 02:03:58 +0300 Subject: [PATCH 1/3] nucleotide-count: Added template to stub file --- exercises/nucleotide-count/src/lib.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/exercises/nucleotide-count/src/lib.rs b/exercises/nucleotide-count/src/lib.rs index 8b1378917..0d85171d6 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 + ); +} From 8536390822a7f111d8e015aad51d0b2777d86ece Mon Sep 17 00:00:00 2001 From: ZapAnton Date: Tue, 3 Jul 2018 15:33:02 +0300 Subject: [PATCH 2/3] nucleotide-count: count function now returns Result --- exercises/nucleotide-count/src/lib.rs | 2 +- exercises/nucleotide-count/tests/nucleotide-count.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/nucleotide-count/src/lib.rs b/exercises/nucleotide-count/src/lib.rs index 0d85171d6..341c5f145 100644 --- a/exercises/nucleotide-count/src/lib.rs +++ b/exercises/nucleotide-count/src/lib.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -pub fn count(nucleotide: char, dna: &str) -> Result { +pub fn count(nucleotide: char, dna: &str) -> Result { unimplemented!( "How much of nucleotide type '{}' is contained inside DNA string '{}'?", nucleotide, 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')); } From 2ee4d611aa6e504101540efcb8c86852cfa071b6 Mon Sep 17 00:00:00 2001 From: ZapAnton Date: Tue, 3 Jul 2018 16:49:34 +0300 Subject: [PATCH 3/3] nucleotide-count: Rewritten example to match updated test suite --- exercises/nucleotide-count/example.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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()), + } } }