diff options
| author | seporterfield <107010978+seporterfield@users.noreply.github.com> | 2023-01-01 02:00:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-01 02:00:36 +0100 |
| commit | 0f02a9b9af80e8b62709d2c50b0fcdf5f7478ea7 (patch) | |
| tree | 3960233ff775fa7c0bf9898674c4c3c3a5a3d768 /exercises/iterators | |
| parent | 5b0d587c223cff097d824fbd5f8a5003f88036a0 (diff) | |
moved iterator exercises
Diffstat (limited to 'exercises/iterators')
| -rw-r--r-- | exercises/iterators/iterators3.rs | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/exercises/iterators/iterators3.rs b/exercises/iterators/iterators3.rs new file mode 100644 index 0000000..c97a625 --- /dev/null +++ b/exercises/iterators/iterators3.rs @@ -0,0 +1,85 @@ +// iterators3.rs +// This is a bigger exercise than most of the others! You can do it! +// Here is your mission, should you choose to accept it: +// 1. Complete the divide function to get the first four tests to pass. +// 2. Get the remaining tests to pass by completing the result_with_list and +// list_of_results functions. +// Execute `rustlings hint iterators3` or use the `hint` watch subcommand for a hint. + +// I AM NOT DONE + +#[derive(Debug, PartialEq, Eq)] +pub enum DivisionError { + NotDivisible(NotDivisibleError), + DivideByZero, +} + +#[derive(Debug, PartialEq, Eq)] +pub struct NotDivisibleError { + dividend: i32, + divisor: i32, +} + +// Calculate `a` divided by `b` if `a` is evenly divisible by `b`. +// Otherwise, return a suitable error. +pub fn divide(a: i32, b: i32) -> Result<i32, DivisionError> { + todo!(); +} + +// Complete the function and return a value of the correct type so the test passes. +// Desired output: Ok([1, 11, 1426, 3]) +fn result_with_list() -> () { + let numbers = vec![27, 297, 38502, 81]; + let division_results = numbers.into_iter().map(|n| divide(n, 27)); +} + +// Complete the function and return a value of the correct type so the test passes. +// Desired output: [Ok(1), Ok(11), Ok(1426), Ok(3)] +fn list_of_results() -> () { + let numbers = vec![27, 297, 38502, 81]; + let division_results = numbers.into_iter().map(|n| divide(n, 27)); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_success() { + assert_eq!(divide(81, 9), Ok(9)); + } + + #[test] + fn test_not_divisible() { + assert_eq!( + divide(81, 6), + Err(DivisionError::NotDivisible(NotDivisibleError { + dividend: 81, + divisor: 6 + })) + ); + } + + #[test] + fn test_divide_by_0() { + assert_eq!(divide(81, 0), Err(DivisionError::DivideByZero)); + } + + #[test] + fn test_divide_0_by_something() { + assert_eq!(divide(0, 81), Ok(0)); + } + + #[test] + fn test_result_with_list() { + assert_eq!(format!("{:?}", result_with_list()), "Ok([1, 11, 1426, 3])"); + } + + #[test] + fn test_list_of_results() { + assert_eq!( + format!("{:?}", list_of_results()), + "[Ok(1), Ok(11), Ok(1426), Ok(3)]" + ); + } +} |
