summaryrefslogtreecommitdiff
path: root/solutions/17_tests
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-07-05 13:39:50 +0200
committermo8it <mo8it@proton.me>2024-07-05 13:39:50 +0200
commit7123c7ae3a9605fbe962e4ef0a0f1424cd16fef8 (patch)
treec67f7e62bb9a179ae4fdbab492501cb6847e64c7 /solutions/17_tests
parent77b687d501771c24bd83294d97b8e6f9ffa92d6b (diff)
parent4d9c346a173bb722b929f3ea3c00f84954483e24 (diff)
Merge remote-tracking branch 'upstream/main' into fix-enum-variant-inconsistency
Diffstat (limited to 'solutions/17_tests')
-rw-r--r--solutions/17_tests/tests1.rs24
-rw-r--r--solutions/17_tests/tests2.rs22
-rw-r--r--solutions/17_tests/tests3.rs45
3 files changed, 91 insertions, 0 deletions
diff --git a/solutions/17_tests/tests1.rs b/solutions/17_tests/tests1.rs
new file mode 100644
index 0000000..c52b8b1
--- /dev/null
+++ b/solutions/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 {
+ // 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/solutions/17_tests/tests2.rs b/solutions/17_tests/tests2.rs
new file mode 100644
index 0000000..39a0005
--- /dev/null
+++ b/solutions/17_tests/tests2.rs
@@ -0,0 +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() {
+ // 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/solutions/17_tests/tests3.rs b/solutions/17_tests/tests3.rs
new file mode 100644
index 0000000..503f9bc
--- /dev/null
+++ b/solutions/17_tests/tests3.rs
@@ -0,0 +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 can't be negative");
+ }
+
+ Rectangle { width, height }
+ }
+}
+
+fn main() {
+ // 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);
+ }
+}