mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-25 00:00:05 +03:00
feat: move generics3 to be quiz3
This commit is contained in:
parent
d61f79595a
commit
5979d408a9
|
@ -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+"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +1,32 @@
|
||||||
// quiz3.rs
|
// quiz3.rs
|
||||||
// This is a quiz for the following sections:
|
// This quiz tests:
|
||||||
// - 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
|
// Make the necessary code changes in the struct ReportCard and the impl block
|
||||||
// the test passes. Then write a second test that tests that we get the result
|
// to support alphabetical report cards. Change the Grade in the second test to "A+"
|
||||||
// we expect to get when we call `times_two` with a negative number.
|
// to show that your changes allow alphabetical grades.
|
||||||
// No hints, you can do this :)
|
|
||||||
|
// Execute `rustlings hint quiz3` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
|
||||||
pub fn times_two(num: i32) -> i32 {
|
pub struct ReportCard {
|
||||||
num * 2
|
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)]
|
#[cfg(test)]
|
||||||
|
@ -18,13 +34,29 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn returns_twice_of_positive_numbers() {
|
fn generate_numeric_report_card() {
|
||||||
assert_eq!(times_two(4), ???);
|
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]
|
#[test]
|
||||||
fn returns_twice_of_negative_numbers() {
|
fn generate_alphabetic_report_card() {
|
||||||
// TODO replace unimplemented!() with an assert for `times_two(-4)`
|
// TODO: Make sure to change the grade here after you finish the exercise.
|
||||||
unimplemented!()
|
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+"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
31
info.toml
31
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
|
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
|
# TRAITS
|
||||||
|
|
||||||
[[exercises]]
|
[[exercises]]
|
||||||
|
@ -716,6 +703,16 @@ Try mutating the incoming string vector.
|
||||||
Vectors provide suitable methods for adding an element at the end. See
|
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"""
|
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
|
# TESTS
|
||||||
|
|
||||||
[[exercises]]
|
[[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
|
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())`."""
|
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
|
# STANDARD LIBRARY TYPES
|
||||||
|
|
||||||
[[exercises]]
|
[[exercises]]
|
||||||
|
|
Loading…
Reference in a new issue