diff options
| author | fmoko <mokou@posteo.de> | 2020-04-05 14:40:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-05 14:40:34 +0200 |
| commit | b135b589e0ffa479b7f6071d89a0a185d262a84f (patch) | |
| tree | fc1b8dddb3f9db90114efb202aeb8558b82d7759 /exercises | |
| parent | 9dc404077a4d20e8c737246f27287f7a13d6aac9 (diff) | |
| parent | 0f8001ea449c278faea0e731b49a5eb3dcd28634 (diff) | |
Merge pull request #280 from sjmann/generics-exercises
feat: added generics exercises
Diffstat (limited to 'exercises')
| -rw-r--r-- | exercises/generics/README.md | 7 | ||||
| -rw-r--r-- | exercises/generics/generics1.rs | 10 | ||||
| -rw-r--r-- | exercises/generics/generics2.rs | 30 | ||||
| -rw-r--r-- | exercises/generics/generics3.rs | 46 |
4 files changed, 93 insertions, 0 deletions
diff --git a/exercises/generics/README.md b/exercises/generics/README.md new file mode 100644 index 0000000..7105f06 --- /dev/null +++ b/exercises/generics/README.md @@ -0,0 +1,7 @@ +### Generics + +In this section you'll learn about saving yourself many lines of code with generics! + +### Book Sections + +- [Generic Data Types](https://doc.rust-lang.org/stable/book/ch10-01-syntax.html)
\ No newline at end of file diff --git a/exercises/generics/generics1.rs b/exercises/generics/generics1.rs new file mode 100644 index 0000000..d075a4d --- /dev/null +++ b/exercises/generics/generics1.rs @@ -0,0 +1,10 @@ +// This shopping list program isn't compiling! +// Use your knowledge of generics to fix it. + +// I AM NOT DONE + +fn main() { + let mut shopping_list: Vec<?> = Vec::new(); + shopping_list.push("milk"); +} + diff --git a/exercises/generics/generics2.rs b/exercises/generics/generics2.rs new file mode 100644 index 0000000..1fe5041 --- /dev/null +++ b/exercises/generics/generics2.rs @@ -0,0 +1,30 @@ +// This powerful wrapper provides the ability to store a positive integer value. +// Rewrite it using generics so that it supports wrapping ANY type. + +// I AM NOT DONE +struct Wrapper<u32> { + value: u32 +} + +impl<u32> Wrapper<u32> { + pub fn new(value: u32) -> Self { + Wrapper { value } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn store_u32_in_wrapper() { + assert_eq!(Wrapper::new(42).value, 42); + } + + #[test] + fn store_str_in_wrapper() { + // TODO: Delete this assert and uncomment the one below once you have finished the exercise. + assert!(false); + // assert_eq!(Wrapper::new("Foo").value, "Foo"); + } +}
\ No newline at end of file diff --git a/exercises/generics/generics3.rs b/exercises/generics/generics3.rs new file mode 100644 index 0000000..cd3232a --- /dev/null +++ b/exercises/generics/generics3.rs @@ -0,0 +1,46 @@ +// An imaginary magical school has a new report card generation system written in rust! +// Currently the system only supports creating report cards where the student's grade +// is represented numerically (e.g. 1.0 -> 5.5). However, the school also issues alphabetical grades +// (A+ -> F-) and needs to be able to print both types of report card! + +// Make the necessary code changes to support alphabetical report cards, thereby making the second +// test pass. + +// I AM NOT DONE +pub struct ReportCard { + pub grade: f32, + pub student_name: String, + pub student_age: u8, +} + +impl ReportCard { + pub fn print(&self) -> String { + format!("{} ({}) - achieved a grade of {}", &self.student_name, &self.student_age, &self.grade) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn generate_numeric_report_card() { + let report_card = ReportCard { + grade: 2.1, + student_name: "Tom Wriggle".to_string(), + student_age: 12, + }; + assert_eq!(report_card.print(), "Tom Wriggle (12) - achieved a grade of 2.1"); + } + + #[test] + fn generate_alphabetic_report_card() { + // TODO: Make sure to change the grade here after you finish the exercise. + let report_card = ReportCard { + grade: 2.1, + student_name: "Gary Plotter".to_string(), + student_age: 11, + }; + assert_eq!(report_card.print(), "Gary Plotter (11) - achieved a grade of A+"); + } +}
\ No newline at end of file |
