From bbfb4c7e63dc59a4e8afbb8d2a10b35414782256 Mon Sep 17 00:00:00 2001 From: Bert Apperlo <91734527+b-apperlo@users.noreply.github.com> Date: Thu, 8 Jun 2023 15:49:07 +0200 Subject: feat: added test function to hashmaps2.rs The existing test functions only check if a kind of fruit exists in the hashmap, but not if the amount of fruits is higher than zero. This new test function solves this. --- exercises/hashmaps/hashmaps2.rs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'exercises') diff --git a/exercises/hashmaps/hashmaps2.rs b/exercises/hashmaps/hashmaps2.rs index a4f069a..852c076 100644 --- a/exercises/hashmaps/hashmaps2.rs +++ b/exercises/hashmaps/hashmaps2.rs @@ -80,4 +80,13 @@ mod tests { let count = basket.values().sum::(); assert!(count > 11); } + + #[test] + fn all_fruit_types_in_basket() { + let mut basket = get_fruit_basket(); + fruit_basket(&mut basket); + for amount in basket.values() { + assert_ne!(amount, &0); + } + } } -- cgit v1.2.3 From 8974e33f697abf55d322b7de051e8b41c219523d Mon Sep 17 00:00:00 2001 From: Bert Apperlo <91734527+b-apperlo@users.noreply.github.com> Date: Thu, 8 Jun 2023 16:44:39 +0200 Subject: fix: update hashmaps3.rs --- exercises/hashmaps/hashmaps3.rs | 1 - 1 file changed, 1 deletion(-) (limited to 'exercises') diff --git a/exercises/hashmaps/hashmaps3.rs b/exercises/hashmaps/hashmaps3.rs index ad3baa6..982976c 100644 --- a/exercises/hashmaps/hashmaps3.rs +++ b/exercises/hashmaps/hashmaps3.rs @@ -20,7 +20,6 @@ use std::collections::HashMap; // A structure to store team name and its goal details. struct Team { - name: String, goals_scored: u8, goals_conceded: u8, } -- cgit v1.2.3 From a4fe3602b238f38e9fd245874c863852791129fb Mon Sep 17 00:00:00 2001 From: Bert Apperlo <91734527+b-apperlo@users.noreply.github.com> Date: Thu, 8 Jun 2023 16:46:45 +0200 Subject: fix: updated comment for struct --- exercises/hashmaps/hashmaps3.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'exercises') diff --git a/exercises/hashmaps/hashmaps3.rs b/exercises/hashmaps/hashmaps3.rs index 982976c..0d0a43a 100644 --- a/exercises/hashmaps/hashmaps3.rs +++ b/exercises/hashmaps/hashmaps3.rs @@ -18,7 +18,7 @@ use std::collections::HashMap; -// A structure to store team name and its goal details. +// A structure to store the goal details of a team. struct Team { goals_scored: u8, goals_conceded: u8, -- cgit v1.2.3 From d0a17830831121fcdbc27a1833ccbbc17bc0c02d Mon Sep 17 00:00:00 2001 From: IVIURARY Date: Thu, 8 Jun 2023 22:14:25 +0100 Subject: fix(enums3): add test for message closes #1548 --- exercises/enums/enums3.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'exercises') diff --git a/exercises/enums/enums3.rs b/exercises/enums/enums3.rs index a2a9d58..e75d443 100644 --- a/exercises/enums/enums3.rs +++ b/exercises/enums/enums3.rs @@ -17,6 +17,7 @@ struct State { color: (u8, u8, u8), position: Point, quit: bool, + message: String } impl State { @@ -28,9 +29,7 @@ impl State { self.quit = true; } - fn echo(&self, s: String) { - println!("{}", s); - } + fn echo(&mut self, s: String) { self.message = s } fn move_position(&mut self, p: Point) { self.position = p; @@ -52,6 +51,7 @@ mod tests { quit: false, position: Point { x: 0, y: 0 }, color: (0, 0, 0), + message: "hello world".to_string(), }; state.process(Message::ChangeColor(255, 0, 255)); state.process(Message::Echo(String::from("hello world"))); @@ -62,5 +62,6 @@ mod tests { assert_eq!(state.position.x, 10); assert_eq!(state.position.y, 15); assert_eq!(state.quit, true); + assert_eq!(state.message, "hello world"); } } -- cgit v1.2.3 From 369ae2e63d06de6fee36aeebfd1ff3e8bcdfa25a Mon Sep 17 00:00:00 2001 From: liv Date: Mon, 12 Jun 2023 12:07:18 +0200 Subject: feat(move_semantics2): rewrite hint --- exercises/move_semantics/move_semantics2.rs | 10 ++++------ info.toml | 29 +++++++++++++++-------------- 2 files changed, 19 insertions(+), 20 deletions(-) (limited to 'exercises') diff --git a/exercises/move_semantics/move_semantics2.rs b/exercises/move_semantics/move_semantics2.rs index 93bb82e..66ddb4c 100644 --- a/exercises/move_semantics/move_semantics2.rs +++ b/exercises/move_semantics/move_semantics2.rs @@ -2,23 +2,21 @@ // Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand for a hint. // Expected output: -// vec0 has length 3 content `[22, 44, 66]` -// vec1 has length 4 content `[22, 44, 66, 88]` +// vec0 has length 3, with contents `[22, 44, 66]` +// vec1 has length 4, with contents `[22, 44, 66, 88]` // I AM NOT DONE fn main() { let vec0 = Vec::new(); - // Do not move the following line! let mut vec1 = fill_vec(vec0); - // Do not change the following line! - println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0); + println!("{} has length {}, with contents: `{:?}`", "vec0", vec0.len(), vec0); vec1.push(88); - println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1); + println!("{} has length {}, with contents `{:?}`", "vec1", vec1.len(), vec1); } fn fill_vec(vec: Vec) -> Vec { diff --git a/info.toml b/info.toml index 2add5f0..8febf41 100644 --- a/info.toml +++ b/info.toml @@ -287,23 +287,24 @@ Also: Try accessing `vec0` after having called `fill_vec()`. See what happens!"" [[exercises]] name = "move_semantics2" path = "exercises/move_semantics/move_semantics2.rs" -mode = "compile" +mode = "test" hint = """ -So, `vec0` is passed into the `fill_vec` function as an argument. In Rust, -when an argument is passed to a function and it's not explicitly returned, -you can't use the original variable anymore. We call this "moving" a variable. -Variables that are moved into a function (or block scope) and aren't explicitly -returned get "dropped" at the end of that function. This is also what happens here. -There's a few ways to fix this, try them all if you want: -1. Make another, separate version of the data that's in `vec0` and pass that +When running this exercise for the first time, you'll notice an error about +"borrow of moved value". In Rust, when an argument is passed to a function and +it's not explicitly returned, you can't use the original variable anymore. +We call this "moving" a variable. When we pass `vec0` into `fill_vec`, it's being +"moved" into `vec1`, meaning we can't access `vec0` anymore after the fact. +Rust provides a couple of different ways to mitigate this issue, feel free to try them all: +1. You could make another, separate version of the data that's in `vec0` and pass that to `fill_vec` instead. 2. Make `fill_vec` borrow its argument instead of taking ownership of it, - and then copy the data within the function in order to return an owned - `Vec` -3. Make `fill_vec` *mutably* borrow a reference to its argument (which will need to be - mutable), modify it directly, then not return anything. Then you can get rid - of `vec1` entirely -- note that this will change what gets printed by the - first `println!`""" + and then copy the data within the function (`vec.clone()`) in order to return an owned + `Vec`. +3. Or, you could make `fill_vec` *mutably* borrow a reference to its argument (which will need to be + mutable), modify it directly, then not return anything. This means that `vec0` will change over the + course of the function, and makes `vec1` redundant (make sure to change the parameters of the `println!` + statements if you go this route) +""" [[exercises]] name = "move_semantics3" -- cgit v1.2.3