Created
May 1, 2023 03:09
-
-
Save tallpeak/feb89bd16d34fbb6df0420bd3b62dcb5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// quiz3.rs | |
// 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! | |
// 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 | |
// use std::fmt::Display; | |
use std::fmt; | |
#[derive(Debug)] | |
pub enum Grade { | |
Float(f32), | |
String(String) | |
} | |
impl fmt::Display for Grade { | |
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> fmt::Result { | |
match self { | |
Grade::Float(n) => write!(f, "{}",n), | |
Grade::String(s) => write!(f, "{}",s) | |
} | |
} | |
} | |
pub struct ReportCard { | |
pub grade: Grade, | |
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: Grade::Float(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: Grade::String("A+".to_string()), | |
student_name: "Gary Plotter".to_string(), | |
student_age: 11, | |
}; | |
assert_eq!( | |
report_card.print(), | |
"Gary Plotter (11) - achieved a grade of A+" | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment