From 0cdeee37ddc9f5c5feefd1e10634331abd78c8d6 Mon Sep 17 00:00:00 2001 From: jojimanos Date: Mon, 19 Sep 2022 22:55:22 +0300 Subject: [PATCH] Structs --- exercises/structs/structs1.rs | 40 +++++++++++++++++------------------ exercises/structs/structs2.rs | 6 +++++- exercises/structs/structs3.rs | 12 +++++------ 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/exercises/structs/structs1.rs b/exercises/structs/structs1.rs index 0d91c469..ad25b0a8 100644 --- a/exercises/structs/structs1.rs +++ b/exercises/structs/structs1.rs @@ -2,16 +2,15 @@ // Address all the TODOs to make the tests pass! // Execute `rustlings hint structs1` or use the `hint` watch subcommand for a hint. -// I AM NOT DONE - struct ColorClassicStruct { - // TODO: Something goes here + name: String, + hex: String, } -struct ColorTupleStruct(/* TODO: Something goes here */); +struct ColorTupleStruct(String, String); #[derive(Debug)] -struct UnitLikeStruct; +struct UnitStruct; #[cfg(test)] mod tests { @@ -19,30 +18,31 @@ mod tests { #[test] fn classic_c_structs() { - // TODO: Instantiate a classic c struct! - // let green = + let green = ColorClassicStruct { + name: String::from("green"), + hex: String::from("#00FF00"), + }; - assert_eq!(green.red, 0); - assert_eq!(green.green, 255); - assert_eq!(green.blue, 0); + assert_eq!(green.name, "green"); + assert_eq!(green.hex, "#00FF00"); } #[test] fn tuple_structs() { - // TODO: Instantiate a tuple struct! - // let green = + let green = ColorTupleStruct( + String::from("green"), + String::from("#00FF00"), + ); - assert_eq!(green.0, 0); - assert_eq!(green.1, 255); - assert_eq!(green.2, 0); + assert_eq!(green.0, "green"); + assert_eq!(green.1, "#00FF00"); } #[test] fn unit_structs() { - // TODO: Instantiate a unit-like struct! - // let unit_like_struct = - let message = format!("{:?}s are fun!", unit_like_struct); + let unit_struct = UnitStruct; + let message = format!("{:?}s are fun!", unit_struct); - assert_eq!(message, "UnitLikeStructs are fun!"); + assert_eq!(message, "UnitStructs are fun!"); } -} +} \ No newline at end of file diff --git a/exercises/structs/structs2.rs b/exercises/structs/structs2.rs index 32e311fa..a96d0a9d 100644 --- a/exercises/structs/structs2.rs +++ b/exercises/structs/structs2.rs @@ -35,7 +35,11 @@ mod tests { fn your_order() { let order_template = create_order_template(); // TODO: Create your own order using the update syntax and template above! - // let your_order = + let your_order = Order { + name: String::from("Hacker in Rust"), + count: 1, + ..order_template + }; assert_eq!(your_order.name, "Hacker in Rust"); assert_eq!(your_order.year, order_template.year); assert_eq!(your_order.made_by_phone, order_template.made_by_phone); diff --git a/exercises/structs/structs3.rs b/exercises/structs/structs3.rs index 0b3615f4..b50fbc3b 100644 --- a/exercises/structs/structs3.rs +++ b/exercises/structs/structs3.rs @@ -4,8 +4,6 @@ // Make the code compile and the tests pass! // Execute `rustlings hint structs3` or use the `hint` watch subcommand for a hint. -// I AM NOT DONE - #[derive(Debug)] struct Package { sender_country: String, @@ -26,12 +24,12 @@ impl Package { } } - fn is_international(&self) -> ??? { - // Something goes here... + fn is_international(&self) -> bool { + self.sender_country != self.recipient_country } - fn get_fees(&self, cents_per_gram: i32) -> ??? { - // Something goes here... + fn get_fees(&self, cents_per_gram: i32) -> i32 { + (self.weight_in_grams * cents_per_gram + (1000 / 2)) / 1000 } } @@ -73,7 +71,7 @@ mod tests { let sender_country = String::from("Spain"); let recipient_country = String::from("Spain"); - let cents_per_gram = 3; + let cents_per_gram = 3000; let package = Package::new(sender_country, recipient_country, 1500);