diff options
Diffstat (limited to 'rust/rustlings/exercises/quizzes/quiz2.rs')
| -rw-r--r-- | rust/rustlings/exercises/quizzes/quiz2.rs | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/rust/rustlings/exercises/quizzes/quiz2.rs b/rust/rustlings/exercises/quizzes/quiz2.rs new file mode 100644 index 0000000..fd32810 --- /dev/null +++ b/rust/rustlings/exercises/quizzes/quiz2.rs @@ -0,0 +1,81 @@ +// This is a quiz for the following sections: +// - Strings +// - Vecs +// - Move semantics +// - Modules +// - Enums +// +// Let's build a little machine in the form of a function. As input, we're going +// to give a list of strings and commands. These commands determine what action +// is going to be applied to the string. It can either be: +// - Uppercase the string +// - Trim the string +// - Append "bar" to the string a specified amount of times +// +// The exact form of this will be: +// - The input is going to be a Vector of 2-length tuples, +// the first element is the string, the second one is the command. +// - The output element is going to be a vector of strings. + +enum Command { + Uppercase, + Trim, + Append(usize), +} + +mod my_module { + use super::Command; + + // TODO: Complete the function as described above. + // pub fn transformer(input: ???) -> ??? { ??? } + pub fn transformer(input: Vec<(String, Command)>) -> Vec<String> { + let mut out = Vec::new(); + for inp in input { + out.push(match inp.1 { + Command::Uppercase => inp.0.to_uppercase(), + Command::Trim => String::from(inp.0.trim()), + Command::Append(n) => { + let mut r = inp.0; + for _ in 0..n { + r += "bar"; + } + r + } + }); + } + out + } +} + +fn main() { + // You can optionally experiment here. +} + +#[cfg(test)] +mod tests { + // TODO: What do we need to import to have `transformer` in scope? + // use ???; + use super::Command; + use super::my_module::transformer; + + #[test] + fn it_works() { + let input = vec![ + ("hello".to_string(), Command::Uppercase), + (" all roads lead to rome! ".to_string(), Command::Trim), + ("foo".to_string(), Command::Append(1)), + ("bar".to_string(), Command::Append(5)), + ]; + let output = transformer(input); + + assert_eq!( + output, + [ + "HELLO", + "all roads lead to rome!", + "foobar", + "barbarbarbarbarbar", + ] + ); + } +} |