summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormokou <mokou@fastmail.com>2022-07-14 18:11:18 +0200
committermokou <mokou@fastmail.com>2022-07-14 18:11:18 +0200
commit5979d408a9d3f174bf748b82d1a031a25b548af6 (patch)
tree40d9b2cd1f07b668041269abe7a4bb50d6eef0bd
parentd61f79595a8929c118e76f78c6ec26ca49219062 (diff)
feat: move generics3 to be quiz3
-rw-r--r--exercises/generics/generics3.rs58
-rw-r--r--exercises/quiz3.rs58
-rw-r--r--info.toml31
3 files changed, 55 insertions, 92 deletions
diff --git a/exercises/generics/generics3.rs b/exercises/generics/generics3.rs
deleted file mode 100644
index 64dd9bc..0000000
--- a/exercises/generics/generics3.rs
+++ /dev/null
@@ -1,58 +0,0 @@
-// 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 in the struct ReportCard and the impl block
-// to support alphabetical report cards. Change the Grade in the second test to "A+"
-// to show that your changes allow alphabetical grades.
-
-// Execute 'rustlings hint generics3' for hints!
-
-// 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+"
- );
- }
-}
diff --git a/exercises/quiz3.rs b/exercises/quiz3.rs
index fae0eed..15dc469 100644
--- a/exercises/quiz3.rs
+++ b/exercises/quiz3.rs
@@ -1,16 +1,32 @@
// quiz3.rs
-// This is a quiz for the following sections:
-// - Tests
+// This quiz tests:
+// - Generics
+// - Traits
+// 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!
-// This quiz isn't testing our function -- make it do that in such a way that
-// the test passes. Then write a second test that tests that we get the result
-// we expect to get when we call `times_two` with a negative number.
-// No hints, you can do this :)
+// Make the necessary code changes in the struct ReportCard and the impl block
+// to support alphabetical report cards. Change the Grade in the second test to "A+"
+// to show that your changes allow alphabetical grades.
+
+// Execute `rustlings hint quiz3` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
-pub fn times_two(num: i32) -> i32 {
- num * 2
+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)]
@@ -18,13 +34,29 @@ mod tests {
use super::*;
#[test]
- fn returns_twice_of_positive_numbers() {
- assert_eq!(times_two(4), ???);
+ 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 returns_twice_of_negative_numbers() {
- // TODO replace unimplemented!() with an assert for `times_two(-4)`
- unimplemented!()
+ 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+"
+ );
}
}
diff --git a/info.toml b/info.toml
index cb49a97..70f66e0 100644
--- a/info.toml
+++ b/info.toml
@@ -681,19 +681,6 @@ Maybe we could update the explicit references to this data type somehow?
If you are still stuck https://doc.rust-lang.org/stable/book/ch10-01-syntax.html#in-method-definitions
"""
-[[exercises]]
-name = "generics3"
-path = "exercises/generics/generics3.rs"
-mode = "test"
-hint = """
-To find the best solution to this challenge you're going to need to think back to your
-knowledge of traits, specifically Trait Bound Syntax - you may also need this: "use std::fmt::Display;"
-
-This is definitely harder than the last two exercises! You need to think about not only making the
-ReportCard struct generic, but also the correct property - you will need to change the implementation
-of the struct slightly too...you can do it!
-"""
-
# TRAITS
[[exercises]]
@@ -716,6 +703,16 @@ Try mutating the incoming string vector.
Vectors provide suitable methods for adding an element at the end. See
the documentation at: https://doc.rust-lang.org/std/vec/struct.Vec.html"""
+# QUIZ 3
+
+[[exercises]]
+name = "quiz3"
+path = "exercises/quiz3.rs"
+mode = "test"
+hint = """
+To find the best solution to this challenge you're going to need to think back to your
+knowledge of traits, specifically Trait Bound Syntax - you may also need this: "use std::fmt::Display;""""
+
# TESTS
[[exercises]]
@@ -748,14 +745,6 @@ You can call a function right where you're passing arguments to `assert!` -- so
something like `assert!(having_fun())`. If you want to check that you indeed get false, you
can negate the result of what you're doing using `!`, like `assert!(!having_fun())`."""
-# TEST 3
-
-[[exercises]]
-name = "quiz3"
-path = "exercises/quiz3.rs"
-mode = "test"
-hint = "No hints this time ;)"
-
# STANDARD LIBRARY TYPES
[[exercises]]