mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +03:00
Remove tests3 and add solution to tests4
This commit is contained in:
parent
803e32dad2
commit
746cf6863d
|
@ -140,8 +140,6 @@ bin = [
|
||||||
{ name = "tests2_sol", path = "../solutions/17_tests/tests2.rs" },
|
{ name = "tests2_sol", path = "../solutions/17_tests/tests2.rs" },
|
||||||
{ name = "tests3", path = "../exercises/17_tests/tests3.rs" },
|
{ name = "tests3", path = "../exercises/17_tests/tests3.rs" },
|
||||||
{ name = "tests3_sol", path = "../solutions/17_tests/tests3.rs" },
|
{ name = "tests3_sol", path = "../solutions/17_tests/tests3.rs" },
|
||||||
{ name = "tests4", path = "../exercises/17_tests/tests4.rs" },
|
|
||||||
{ name = "tests4_sol", path = "../solutions/17_tests/tests4.rs" },
|
|
||||||
{ name = "iterators1", path = "../exercises/18_iterators/iterators1.rs" },
|
{ name = "iterators1", path = "../exercises/18_iterators/iterators1.rs" },
|
||||||
{ name = "iterators1_sol", path = "../solutions/18_iterators/iterators1.rs" },
|
{ name = "iterators1_sol", path = "../solutions/18_iterators/iterators1.rs" },
|
||||||
{ name = "iterators2", path = "../exercises/18_iterators/iterators2.rs" },
|
{ name = "iterators2", path = "../exercises/18_iterators/iterators2.rs" },
|
||||||
|
|
|
@ -1,9 +1,19 @@
|
||||||
// This test isn't testing our function -- make it do that in such a way that
|
struct Rectangle {
|
||||||
// the test passes. Then write a second test that tests whether we get the
|
width: i32,
|
||||||
// result we expect to get when we call `is_even(5)`.
|
height: i32,
|
||||||
|
}
|
||||||
|
|
||||||
fn is_even(num: i32) -> bool {
|
impl Rectangle {
|
||||||
num % 2 == 0
|
// 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() {
|
fn main() {
|
||||||
|
@ -15,12 +25,25 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn is_true_when_even() {
|
fn correct_width_and_height() {
|
||||||
assert!();
|
// 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!(???, 10); // Check width
|
||||||
|
assert_eq!(???, 20); // Check height
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: This test should check if the program panics when we try to create
|
||||||
|
// a rectangle with negative width.
|
||||||
#[test]
|
#[test]
|
||||||
fn is_false_when_odd() {
|
fn negative_width() {
|
||||||
assert!();
|
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]
|
||||||
|
fn negative_height() {
|
||||||
|
let _rect = Rectangle::new(10, -10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
// Make sure that we're testing for the correct conditions!
|
|
||||||
|
|
||||||
struct Rectangle {
|
|
||||||
width: i32,
|
|
||||||
height: i32,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Rectangle {
|
|
||||||
// Only change the test functions themselves
|
|
||||||
fn new(width: i32, height: i32) -> Self {
|
|
||||||
if width <= 0 || height <= 0 {
|
|
||||||
panic!("Rectangle width and height cannot be negative!")
|
|
||||||
}
|
|
||||||
Rectangle { width, height }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
// You can optionally experiment here.
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn correct_width_and_height() {
|
|
||||||
// This test should check if the rectangle is the size that we pass into its constructor
|
|
||||||
let rect = Rectangle::new(10, 20);
|
|
||||||
assert_eq!(???, 10); // check width
|
|
||||||
assert_eq!(???, 20); // check height
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn negative_width() {
|
|
||||||
// This test should check if program panics when we try to create rectangle with negative width
|
|
||||||
let _rect = Rectangle::new(-10, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn negative_height() {
|
|
||||||
// This test should check if program panics when we try to create rectangle with negative height
|
|
||||||
let _rect = Rectangle::new(10, -10);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -856,7 +856,10 @@ argument, `assert!` will do nothing (in which case the test will pass) or
|
||||||
`assert!` will panic (in which case the test will fail).
|
`assert!` will panic (in which case the test will fail).
|
||||||
|
|
||||||
So try giving different values to `assert!` and see which ones compile, which
|
So try giving different values to `assert!` and see which ones compile, which
|
||||||
ones pass, and which ones fail :)"""
|
ones pass, and which ones fail :)
|
||||||
|
|
||||||
|
If you want to check for `false`, you can negate the result of what you're
|
||||||
|
checking using `!`, like `assert!(!…)`."""
|
||||||
|
|
||||||
[[exercises]]
|
[[exercises]]
|
||||||
name = "tests2"
|
name = "tests2"
|
||||||
|
@ -870,19 +873,9 @@ Try switching which argument comes first and which comes second!"""
|
||||||
name = "tests3"
|
name = "tests3"
|
||||||
dir = "17_tests"
|
dir = "17_tests"
|
||||||
hint = """
|
hint = """
|
||||||
You can call a function right where you're passing arguments to `assert!`. So
|
We expect the method `Rectangle::new` to panic for negative values.
|
||||||
you could do something like `assert!(having_fun())`.
|
|
||||||
|
|
||||||
If you want to check that you indeed get `false`, you can negate the result of
|
To handle that, you need to add a special attribute to the test function.
|
||||||
what you're doing using `!`, like `assert!(!having_fun())`."""
|
|
||||||
|
|
||||||
[[exercises]]
|
|
||||||
name = "tests4"
|
|
||||||
dir = "17_tests"
|
|
||||||
hint = """
|
|
||||||
We expect method `Rectangle::new()` to panic for negative values.
|
|
||||||
|
|
||||||
To handle that you need to add a special attribute to the test function.
|
|
||||||
|
|
||||||
You can refer to the docs:
|
You can refer to the docs:
|
||||||
https://doc.rust-lang.org/stable/book/ch11-01-writing-tests.html#checking-for-panics-with-should_panic"""
|
https://doc.rust-lang.org/stable/book/ch11-01-writing-tests.html#checking-for-panics-with-should_panic"""
|
||||||
|
|
|
@ -1 +1,45 @@
|
||||||
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰
|
|
Loading…
Reference in a new issue