// 一所想象的魔法学院有一个采用 Rust 编写的新版成绩单生成系统!
// 目前该系统仅支持创建以数字表示的成绩单(如 1.0 -> 5.5)。
// 然而,学校也发布用字母表示的成绩(A+ -> F-),所以需要能够打印两种成绩单。

// 在 ReportCard 结构定义和 impl 块中进行必要的代码修改,以支持用字母表示的成绩单。
// 将第二个测试的 grade 改为 "A+",用来表明代码已允许按字母表示成绩。

// 执行 'rustlings hint generics3' 获取提示!

// 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:完成练习后,在这里更改 grade 的值。
        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+"
        );
    }
}