From 40e2330e8dd0ea3bde6cee0e8861ed81f8c9e7a6 Mon Sep 17 00:00:00 2001 From: Silvestre Abruzzo <1209694+SAbruzzo@users.noreply.github.com> Date: Mon, 25 Jul 2022 08:57:07 +0200 Subject: [PATCH] feat: add structs4.rs exercise --- exercises/structs/structs4.rs | 62 +++++++++++++++++++++++++++++++++++ info.toml | 10 ++++++ 2 files changed, 72 insertions(+) create mode 100644 exercises/structs/structs4.rs diff --git a/exercises/structs/structs4.rs b/exercises/structs/structs4.rs new file mode 100644 index 00000000..202997a5 --- /dev/null +++ b/exercises/structs/structs4.rs @@ -0,0 +1,62 @@ +// structs4.rs +// Structs can have methods and the first parameter is always self. In this exercise +// we have defined the Planet struct and we want to test some logic attached to it, +// make the code compile and the tests pass! If you have issues execute `rustlings hint structs4` + +// I AM NOT DONE + +#[derive(Debug)] +struct Planet { + has_life: bool, + radius : u32 +} + +impl Planet { + fn new(radius: u32) -> Planet { + // Something goes here... + } + + fn has_life(???) -> bool { + // Something goes here... + } + + fn change_radius(???) { + // Something goes here... + } + + fn create_life(???) { + // Something goes here... + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn create_planet() { + + let planet = Planet::new(1000); + + assert_eq!(planet.radius, 1000); + assert_eq!(planet.has_life(), false); + } + + #[test] + fn add_life_to_planet() { + let planet = Planet::new(1000); + + planet.create_life(); + + assert_eq!(planet.has_life(), true); + } + + #[test] + fn change_radius_of_planet() { + let mut planet = Planet::new(1000); + + planet.change_radius(2000); + + assert_eq!(planet.radius, 2000); + } +} diff --git a/info.toml b/info.toml index f07b9267..b72b2c8c 100644 --- a/info.toml +++ b/info.toml @@ -394,6 +394,16 @@ For calculate_transport_fees: Bigger is more expensive usually, we don't have si Have a look in The Book, to find out more about method implementations: https://doc.rust-lang.org/book/ch05-03-method-syntax.html""" +[[exercises]] +name = "structs4" +path = "exercises/structs/structs4.rs" +mode = "test" +hint = """ +The signature of methods must be different depending on the fact that attributes of an instance are +read or written. How do we do that in Rust? + +Have a look in The Book, to find out more about method implementations: https://doc.rust-lang.org/book/ch05-03-method-syntax.html""" + # ENUMS [[exercises]]