summaryrefslogtreecommitdiff
path: root/exercises/06_move_semantics
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-06-21 18:14:19 +0200
committermo8it <mo8it@proton.me>2024-06-21 18:14:19 +0200
commite4dbbbf5f5f5d4ea0ede1ead1f82108968e6cea6 (patch)
treec69d3486b375e4642faac66b57c9eed8e0f249cd /exercises/06_move_semantics
parentfd558065c7f32d38d1b8e34fda1a23fe40d1b3ab (diff)
Remove move_semantics4, add rest of move_semantics solutions
Diffstat (limited to 'exercises/06_move_semantics')
-rw-r--r--exercises/06_move_semantics/move_semantics4.rs31
-rw-r--r--exercises/06_move_semantics/move_semantics5.rs31
-rw-r--r--exercises/06_move_semantics/move_semantics6.rs21
3 files changed, 25 insertions, 58 deletions
diff --git a/exercises/06_move_semantics/move_semantics4.rs b/exercises/06_move_semantics/move_semantics4.rs
index b662224..c225f3b 100644
--- a/exercises/06_move_semantics/move_semantics4.rs
+++ b/exercises/06_move_semantics/move_semantics4.rs
@@ -1,31 +1,18 @@
-// Refactor this code so that instead of passing `vec0` into the `fill_vec`
-// function, the Vector gets created in the function itself and passed back to
-// the test function.
-
-// `fill_vec()` no longer takes `vec: Vec<i32>` as argument - don't change this!
-fn fill_vec() -> Vec<i32> {
- // Instead, let's create and fill the Vec in here - how do you do that?
- let mut vec = vec;
-
- vec.push(88);
-
- vec
-}
-
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
- use super::*;
-
+ // TODO: Fix the compiler errors only by reordering the lines in the test.
+ // Don't add, change or remove any line.
#[test]
- fn move_semantics4() {
- let vec0 = vec![22, 44, 66];
-
- let vec1 = fill_vec(vec0);
-
- assert_eq!(vec1, vec![22, 44, 66, 88]);
+ fn move_semantics5() {
+ let mut x = 100;
+ let y = &mut x;
+ let z = &mut x;
+ *y += 100;
+ *z += 1000;
+ assert_eq!(x, 1200);
}
}
diff --git a/exercises/06_move_semantics/move_semantics5.rs b/exercises/06_move_semantics/move_semantics5.rs
index b34560a..c9edf41 100644
--- a/exercises/06_move_semantics/move_semantics5.rs
+++ b/exercises/06_move_semantics/move_semantics5.rs
@@ -1,21 +1,22 @@
-// Make me compile only by reordering the lines in the test, but without adding,
-// changing or removing any of them.
+// TODO: Fix the compiler erros. Don't change anything except adding or removing
+// references (the character `&`).
fn main() {
- // You can optionally experiment here.
+ let data = "Rust is great!".to_string();
+
+ get_char(data);
+
+ string_uppercase(&data);
+}
+
+// Shouldn't take ownership
+fn get_char(data: String) -> char {
+ data.chars().last().unwrap()
}
-#[cfg(test)]
-mod tests {
- use super::*;
+// Should take ownership
+fn string_uppercase(mut data: &String) {
+ data = &data.to_uppercase();
- #[test]
- fn move_semantics5() {
- let mut x = 100;
- let y = &mut x;
- let z = &mut x;
- *y += 100;
- *z += 1000;
- assert_eq!(x, 1200);
- }
+ println!("{data}");
}
diff --git a/exercises/06_move_semantics/move_semantics6.rs b/exercises/06_move_semantics/move_semantics6.rs
deleted file mode 100644
index 2ad71db..0000000
--- a/exercises/06_move_semantics/move_semantics6.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// You can't change anything except adding or removing references.
-
-fn main() {
- let data = "Rust is great!".to_string();
-
- get_char(data);
-
- string_uppercase(&data);
-}
-
-// Should not take ownership
-fn get_char(data: String) -> char {
- data.chars().last().unwrap()
-}
-
-// Should take ownership
-fn string_uppercase(mut data: &String) {
- data = &data.to_uppercase();
-
- println!("{}", data);
-}