Add testing exercise

This commit is contained in:
Nathan Stocks
2021-06-15 22:51:21 -06:00
parent eb78fe0eab
commit 61612a2050
4 changed files with 68 additions and 1 deletions

View File

@@ -10,4 +10,5 @@ members = [
"exercise/closures_iterators",
"exercise/traits",
"exercise/errors",
"exercise/testing",
]

View File

@@ -3,7 +3,7 @@
// - TooYoung - An dolphin is too young
// - LongName - The dolphin's name is too long and annoying to say
//
// As a reminder, here are the 5 Guidelines for creating an error type
// As a reminder, here are the 5 Guidelines for creating an error type:
// (1) Use an `enum` for your error type
// (2) Your error conditions should be enum variants grouped in as few enums as makes sense
// (3) Don't expose error types other than your own (you don't have to do anything for this one)

View File

@@ -0,0 +1,25 @@
[package]
name = "testing"
version = "0.1.0"
authors = ["Nathan Stocks <nathan@agileperception.com>"]
edition = "2018"
[dependencies]
# Challenge Help 1: If you choose to take on the challenge, you'll need to add `criterion` as a
# development dependency. Here is one way to do it:
# [dev-dependencies]
# criterion = { version = "0.3", features = ["html_reports"] }
# Challenge Help 2: Each benchmark needs a `[[bench]]` section with a name and disabling the harness.
# The name will correspond with a file benches/somename.rs
# [[bench]]
# name = "somename"
# harness = false
# Challenge Help 3: The Criterion documentation has a great tutorial for how to actually write your
# benchmark. Don't skip the part about `black_box()`!
# https://bheisler.github.io/criterion.rs/book/getting_started.html#step-2---add-benchmark

View File

@@ -0,0 +1,41 @@
pub fn sploosh(x: i32, y: i32, z: i32) -> i32 {
match (x, y, z) {
(x, _, _) if x < 0 => 99,
(1, 2, 3) => 4,
(5, 6, 7) => 3,
(x, y, z) => x + y - z,
}
}
pub fn splish(a: i32, b: i32) -> i32 {
-a + 3 * b
}
// 1. Use the `cfg` attribute to mark the `test` module below as a test module
mod test {
// 2. Bring all the library items into scope with a `use` statement
// 3. Write a test function that verifies the following condition using assert_eq! or assert_ne!
// - sploosh(1, 2, 3) returns 4
// - sploosh(5, 6, 7) does not return 4
// - If you pass sploosh a negative number for the first argument, 99 is returned
//
// `cargo test` should run your tests AND pass
// Hint: Don't forget the `test` attribute for your test function!
// 4. Write a test function that verifies the following conditions using assert!
// - splish(100, 10) is negative
// - splish(40, 20) is positive
// - splish(9, 3) is 0
}
// 4. Create a tests/ directory and an integration test file tests/more_tests.rs
// Inside that file, create a test function that verifies:
// - sploosh(splish(-1, 0), splish(1, 1), splish(3, 2)) returns 4
//
// `cargo test` should run your more_tests.rs file and pass
// Challenge: Create a benchmark that measures the speed of splish(8, 9, 10)
// - Speed up the implementation of splish(8, 9, 10) without breaking the other tests.
// - Hint: See Cargo.toml to get you started