summaryrefslogtreecommitdiff
path: root/rust/rustlings/exercises/17_tests
diff options
context:
space:
mode:
Diffstat (limited to 'rust/rustlings/exercises/17_tests')
-rw-r--r--rust/rustlings/exercises/17_tests/README.md7
-rw-r--r--rust/rustlings/exercises/17_tests/tests1.rs24
-rw-r--r--rust/rustlings/exercises/17_tests/tests2.rs23
-rw-r--r--rust/rustlings/exercises/17_tests/tests3.rs51
4 files changed, 105 insertions, 0 deletions
diff --git a/rust/rustlings/exercises/17_tests/README.md b/rust/rustlings/exercises/17_tests/README.md
new file mode 100644
index 0000000..27c6818
--- /dev/null
+++ b/rust/rustlings/exercises/17_tests/README.md
@@ -0,0 +1,7 @@
+# Tests
+
+Going out of order from the book to cover tests -- many of the following exercises will ask you to make tests pass!
+
+## Further information
+
+- [Writing Tests](https://doc.rust-lang.org/book/ch11-01-writing-tests.html)
diff --git a/rust/rustlings/exercises/17_tests/tests1.rs b/rust/rustlings/exercises/17_tests/tests1.rs
new file mode 100644
index 0000000..7fd7e10
--- /dev/null
+++ b/rust/rustlings/exercises/17_tests/tests1.rs
@@ -0,0 +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() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+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!(is_even(2));
+ assert!(!is_even(3));
+ }
+}
diff --git a/rust/rustlings/exercises/17_tests/tests2.rs b/rust/rustlings/exercises/17_tests/tests2.rs
new file mode 100644
index 0000000..16bf0fa
--- /dev/null
+++ b/rust/rustlings/exercises/17_tests/tests2.rs
@@ -0,0 +1,23 @@
+// 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() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn you_can_assert_eq() {
+ // TODO: Test the function `power_of_2` with some values.
+ 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/rust/rustlings/exercises/17_tests/tests3.rs b/rust/rustlings/exercises/17_tests/tests3.rs
new file mode 100644
index 0000000..085bb62
--- /dev/null
+++ b/rust/rustlings/exercises/17_tests/tests3.rs
@@ -0,0 +1,51 @@
+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() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn correct_width_and_height() {
+ // 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!(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);
+ }
+
+ // 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);
+ }
+}