diff --git a/exercises/tests/tests4.rs b/exercises/tests/tests4.rs
new file mode 100644
index 0000000..2d8dd13
--- /dev/null
+++ b/exercises/tests/tests4.rs
@@ -0,0 +1,40 @@
+// tests4.rs
+// Correct the tests to
+// Do not change Rectangle::new body
+// Execute `rustlings hint tests4` or use the `hint` watch subcommand for a hint.
+
+// I AM NOT DONE
+
+struct Rectangle {
+    width: i32,
+    height: i32
+}
+
+impl Rectangle {
+    pub fn new(width: i32, height: i32) -> Self {
+        if width < 0 || height < 0 {
+            panic!("Rectangle width and height cannot be negative!")
+        }
+        Rectangle {width, height}
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn correct_width_and_height() {
+        let _rect = Rectangle::new(10, 10);
+    }
+
+    #[test]
+    fn negative_width() {
+        let _rect = Rectangle::new(-10, 10);
+    }
+
+    #[test]
+    fn negative_height() {
+        let _rect = Rectangle::new(10, -10);
+    }
+}
diff --git a/info.toml b/info.toml
index ef89143..ad06b88 100644
--- a/info.toml
+++ b/info.toml
@@ -807,6 +807,16 @@ You can call a function right where you're passing arguments to `assert!` -- so
 something like `assert!(having_fun())`. If you want to check that you indeed get false, you
 can negate the result of what you're doing using `!`, like `assert!(!having_fun())`."""
 
+[[exercises]]
+name = "tests4"
+path = "exercises/tests/tests4.rs"
+mode = "test"
+hint = """
+We expect method `Rectangle::new()` to panic for negative values.
+To handle that you need to add special attribute to test function.
+You can refer to the docs: https://doc.rust-lang.org/stable/book/ch11-01-writing-tests.html"""
+
+
 # STANDARD LIBRARY TYPES
 
 [[exercises]]