summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-09-27 16:34:25 -0500
committerHunter Kvalevog <hunter@kvog.sh>2026-09-27 16:34:25 -0500
commit54731f0fc0b0fde18438853c0a8abaa968edb57a (patch)
treec367be80facbea14421d6bfbabd498faf9446a94
parentb4f5f3bc39fb2187c042ad2fa514e51d1261b4d1 (diff)
rustlings: complete 17
-rw-r--r--rustlings/.rustlings-state.txt6
-rw-r--r--rustlings/exercises/17_tests/tests1.rs5
-rw-r--r--rustlings/exercises/17_tests/tests2.rs8
-rw-r--r--rustlings/exercises/17_tests/tests3.rs6
-rw-r--r--rustlings/solutions/17_tests/tests1.rs24
-rw-r--r--rustlings/solutions/17_tests/tests2.rs22
-rw-r--r--rustlings/solutions/17_tests/tests3.rs45
7 files changed, 100 insertions, 16 deletions
diff --git a/rustlings/.rustlings-state.txt b/rustlings/.rustlings-state.txt
index e366df4..4d58c9f 100644
--- a/rustlings/.rustlings-state.txt
+++ b/rustlings/.rustlings-state.txt
@@ -1,6 +1,6 @@
DON'T EDIT THIS FILE!
-tests1
+tests3
intro1
intro2
@@ -68,4 +68,6 @@ traits5
quiz3
lifetimes1
lifetimes2
-lifetimes3 \ No newline at end of file
+lifetimes3
+tests1
+tests2 \ No newline at end of file
diff --git a/rustlings/exercises/17_tests/tests1.rs b/rustlings/exercises/17_tests/tests1.rs
index 7529f9f..7fd7e10 100644
--- a/rustlings/exercises/17_tests/tests1.rs
+++ b/rustlings/exercises/17_tests/tests1.rs
@@ -13,11 +13,12 @@ fn main() {
mod tests {
// TODO: Import `is_even`. You can use a wildcard to import everything in
// the outer module.
+ use super::*;
#[test]
fn you_can_assert() {
// TODO: Test the function `is_even` with some values.
- assert!();
- assert!();
+ assert!(is_even(2));
+ assert!(!is_even(3));
}
}
diff --git a/rustlings/exercises/17_tests/tests2.rs b/rustlings/exercises/17_tests/tests2.rs
index 0c6573e..16bf0fa 100644
--- a/rustlings/exercises/17_tests/tests2.rs
+++ b/rustlings/exercises/17_tests/tests2.rs
@@ -15,9 +15,9 @@ mod tests {
#[test]
fn you_can_assert_eq() {
// TODO: Test the function `power_of_2` with some values.
- assert_eq!();
- assert_eq!();
- assert_eq!();
- assert_eq!();
+ assert_eq!(power_of_2(1), 2);
+ assert_eq!(power_of_2(2), 4);
+ assert_eq!(power_of_2(3), 8);
+ assert_eq!(power_of_2(4), 16);
}
}
diff --git a/rustlings/exercises/17_tests/tests3.rs b/rustlings/exercises/17_tests/tests3.rs
index 822184e..085bb62 100644
--- a/rustlings/exercises/17_tests/tests3.rs
+++ b/rustlings/exercises/17_tests/tests3.rs
@@ -29,13 +29,14 @@ mod tests {
// TODO: This test should check if the rectangle has the size that we
// pass to its constructor.
let rect = Rectangle::new(10, 20);
- assert_eq!(todo!(), 10); // Check width
- assert_eq!(todo!(), 20); // Check height
+ assert_eq!(rect.width, 10); // Check width
+ assert_eq!(rect.height, 20); // Check height
}
// TODO: This test should check if the program panics when we try to create
// a rectangle with negative width.
#[test]
+ #[should_panic]
fn negative_width() {
let _rect = Rectangle::new(-10, 10);
}
@@ -43,6 +44,7 @@ mod tests {
// TODO: This test should check if the program panics when we try to create
// a rectangle with negative height.
#[test]
+ #[should_panic]
fn negative_height() {
let _rect = Rectangle::new(10, -10);
}
diff --git a/rustlings/solutions/17_tests/tests1.rs b/rustlings/solutions/17_tests/tests1.rs
index dcf2377..c52b8b1 100644
--- a/rustlings/solutions/17_tests/tests1.rs
+++ b/rustlings/solutions/17_tests/tests1.rs
@@ -1,4 +1,24 @@
+// Tests are important to ensure that your code does what you think it should
+// do.
+
+fn is_even(n: i64) -> bool {
+ n % 2 == 0
+}
+
fn main() {
- // DON'T EDIT THIS SOLUTION FILE!
- // It will be automatically filled after you finish the exercise.
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ // When writing unit tests, it is common to import everything from the outer
+ // module (`super`) using a wildcard.
+ use super::*;
+
+ #[test]
+ fn you_can_assert() {
+ assert!(is_even(0));
+ assert!(!is_even(-1));
+ // ^ You can assert `false` using the negation operator `!`.
+ }
}
diff --git a/rustlings/solutions/17_tests/tests2.rs b/rustlings/solutions/17_tests/tests2.rs
index dcf2377..39a0005 100644
--- a/rustlings/solutions/17_tests/tests2.rs
+++ b/rustlings/solutions/17_tests/tests2.rs
@@ -1,4 +1,22 @@
+// Calculates the power of 2 using a bit shift.
+// `1 << n` is equivalent to "2 to the power of n".
+fn power_of_2(n: u8) -> u64 {
+ 1 << n
+}
+
fn main() {
- // DON'T EDIT THIS SOLUTION FILE!
- // It will be automatically filled after you finish the exercise.
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn you_can_assert_eq() {
+ assert_eq!(power_of_2(0), 1);
+ assert_eq!(power_of_2(1), 2);
+ assert_eq!(power_of_2(2), 4);
+ assert_eq!(power_of_2(3), 8);
+ }
}
diff --git a/rustlings/solutions/17_tests/tests3.rs b/rustlings/solutions/17_tests/tests3.rs
index dcf2377..487fdc6 100644
--- a/rustlings/solutions/17_tests/tests3.rs
+++ b/rustlings/solutions/17_tests/tests3.rs
@@ -1,4 +1,45 @@
+struct Rectangle {
+ width: i32,
+ height: i32,
+}
+
+impl Rectangle {
+ // Don't change this function.
+ fn new(width: i32, height: i32) -> Self {
+ if width <= 0 || height <= 0 {
+ // Returning a `Result` would be better here. But we want to learn
+ // how to test functions that can panic.
+ panic!("Rectangle width and height must be positive");
+ }
+
+ Rectangle { width, height }
+ }
+}
+
fn main() {
- // DON'T EDIT THIS SOLUTION FILE!
- // It will be automatically filled after you finish the exercise.
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn correct_width_and_height() {
+ let rect = Rectangle::new(10, 20);
+ assert_eq!(rect.width, 10); // Check width
+ assert_eq!(rect.height, 20); // Check height
+ }
+
+ #[test]
+ #[should_panic] // Added this attribute to check that the test panics.
+ fn negative_width() {
+ let _rect = Rectangle::new(-10, 10);
+ }
+
+ #[test]
+ #[should_panic] // Added this attribute to check that the test panics.
+ fn negative_height() {
+ let _rect = Rectangle::new(10, -10);
+ }
}