summaryrefslogtreecommitdiff
path: root/exercises/06_move_semantics
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/06_move_semantics')
-rw-r--r--exercises/06_move_semantics/move_semantics1.rs30
-rw-r--r--exercises/06_move_semantics/move_semantics2.rs34
-rw-r--r--exercises/06_move_semantics/move_semantics3.rs30
-rw-r--r--exercises/06_move_semantics/move_semantics4.rs34
-rw-r--r--exercises/06_move_semantics/move_semantics5.rs30
-rw-r--r--exercises/06_move_semantics/move_semantics6.rs5
6 files changed, 89 insertions, 74 deletions
diff --git a/exercises/06_move_semantics/move_semantics1.rs b/exercises/06_move_semantics/move_semantics1.rs
index c612ba9..8c3fe3a 100644
--- a/exercises/06_move_semantics/move_semantics1.rs
+++ b/exercises/06_move_semantics/move_semantics1.rs
@@ -1,21 +1,25 @@
-// move_semantics1.rs
-//
-// Execute `rustlings hint move_semantics1` or use the `hint` watch subcommand
-// for a hint.
+fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
+ let vec = vec;
-#[test]
-fn main() {
- let vec0 = vec![22, 44, 66];
+ vec.push(88);
- let vec1 = fill_vec(vec0);
+ vec
+}
- assert_eq!(vec1, vec![22, 44, 66, 88]);
+fn main() {
+ // You can optionally experiment here.
}
-fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
- let vec = vec;
+#[cfg(test)]
+mod tests {
+ use super::*;
- vec.push(88);
+ #[test]
+ fn move_semantics1() {
+ let vec0 = vec![22, 44, 66];
- vec
+ let vec1 = fill_vec(vec0);
+
+ assert_eq!(vec1, vec![22, 44, 66, 88]);
+ }
}
diff --git a/exercises/06_move_semantics/move_semantics2.rs b/exercises/06_move_semantics/move_semantics2.rs
index 3457d11..d087911 100644
--- a/exercises/06_move_semantics/move_semantics2.rs
+++ b/exercises/06_move_semantics/move_semantics2.rs
@@ -1,19 +1,4 @@
-// move_semantics2.rs
-//
// Make the test pass by finding a way to keep both Vecs separate!
-//
-// Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand
-// for a hint.
-
-#[test]
-fn main() {
- let vec0 = vec![22, 44, 66];
-
- let vec1 = fill_vec(vec0);
-
- assert_eq!(vec0, vec![22, 44, 66]);
- assert_eq!(vec1, vec![22, 44, 66, 88]);
-}
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
let mut vec = vec;
@@ -22,3 +7,22 @@ fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
vec
}
+
+fn main() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn move_semantics2() {
+ let vec0 = vec![22, 44, 66];
+
+ let vec1 = fill_vec(vec0);
+
+ assert_eq!(vec0, vec![22, 44, 66]);
+ assert_eq!(vec1, vec![22, 44, 66, 88]);
+ }
+}
diff --git a/exercises/06_move_semantics/move_semantics3.rs b/exercises/06_move_semantics/move_semantics3.rs
index 9415eb1..24e3597 100644
--- a/exercises/06_move_semantics/move_semantics3.rs
+++ b/exercises/06_move_semantics/move_semantics3.rs
@@ -1,22 +1,26 @@
-// move_semantics3.rs
-//
// Make me compile without adding new lines -- just changing existing lines! (no
// lines with multiple semicolons necessary!)
-//
-// Execute `rustlings hint move_semantics3` or use the `hint` watch subcommand
-// for a hint.
-#[test]
-fn main() {
- let vec0 = vec![22, 44, 66];
+fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
+ vec.push(88);
- let vec1 = fill_vec(vec0);
+ vec
+}
- assert_eq!(vec1, vec![22, 44, 66, 88]);
+fn main() {
+ // You can optionally experiment here.
}
-fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
- vec.push(88);
+#[cfg(test)]
+mod tests {
+ use super::*;
- vec
+ #[test]
+ fn move_semantics3() {
+ let vec0 = vec![22, 44, 66];
+
+ let vec1 = fill_vec(vec0);
+
+ assert_eq!(vec1, vec![22, 44, 66, 88]);
+ }
}
diff --git a/exercises/06_move_semantics/move_semantics4.rs b/exercises/06_move_semantics/move_semantics4.rs
index 1509f5d..b662224 100644
--- a/exercises/06_move_semantics/move_semantics4.rs
+++ b/exercises/06_move_semantics/move_semantics4.rs
@@ -1,20 +1,6 @@
-// move_semantics4.rs
-//
// 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 main function.
-//
-// Execute `rustlings hint move_semantics4` or use the `hint` watch subcommand
-// for a hint.
-
-#[test]
-fn main() {
- let vec0 = vec![22, 44, 66];
-
- let vec1 = fill_vec(vec0);
-
- assert_eq!(vec1, vec![22, 44, 66, 88]);
-}
+// the test function.
// `fill_vec()` no longer takes `vec: Vec<i32>` as argument - don't change this!
fn fill_vec() -> Vec<i32> {
@@ -25,3 +11,21 @@ fn fill_vec() -> Vec<i32> {
vec
}
+
+fn main() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn move_semantics4() {
+ let vec0 = vec![22, 44, 66];
+
+ let vec1 = fill_vec(vec0);
+
+ assert_eq!(vec1, vec![22, 44, 66, 88]);
+ }
+}
diff --git a/exercises/06_move_semantics/move_semantics5.rs b/exercises/06_move_semantics/move_semantics5.rs
index c84d2fe..b34560a 100644
--- a/exercises/06_move_semantics/move_semantics5.rs
+++ b/exercises/06_move_semantics/move_semantics5.rs
@@ -1,17 +1,21 @@
-// move_semantics5.rs
-//
-// Make me compile only by reordering the lines in `main()`, but without adding,
+// Make me compile only by reordering the lines in the test, but without adding,
// changing or removing any of them.
-//
-// Execute `rustlings hint move_semantics5` or use the `hint` watch subcommand
-// for a hint.
-#[test]
fn main() {
- let mut x = 100;
- let y = &mut x;
- let z = &mut x;
- *y += 100;
- *z += 1000;
- assert_eq!(x, 1200);
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ 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_semantics6.rs b/exercises/06_move_semantics/move_semantics6.rs
index 6059e61..2ad71db 100644
--- a/exercises/06_move_semantics/move_semantics6.rs
+++ b/exercises/06_move_semantics/move_semantics6.rs
@@ -1,9 +1,4 @@
-// move_semantics6.rs
-//
// You can't change anything except adding or removing references.
-//
-// Execute `rustlings hint move_semantics6` or use the `hint` watch subcommand
-// for a hint.
fn main() {
let data = "Rust is great!".to_string();