summaryrefslogtreecommitdiff
path: root/exercises/18_iterators/iterators3.rs
diff options
context:
space:
mode:
authorAdam Brewer <adamhb321@gmail.com>2023-10-16 07:37:12 -0400
committerAdam Brewer <adamhb321@gmail.com>2023-10-16 07:37:12 -0400
commit64d95837e9813541cf5b357de13865ce687ae98d (patch)
treef022c5d5ba01128811c0b77618a7adb843ee876b /exercises/18_iterators/iterators3.rs
parentc3941323e2c0b9ee286494327de92e00f23b9e3a (diff)
Update Exercises Directory Names to Reflect Order
Diffstat (limited to 'exercises/18_iterators/iterators3.rs')
-rw-r--r--exercises/18_iterators/iterators3.rs90
1 files changed, 90 insertions, 0 deletions
diff --git a/exercises/18_iterators/iterators3.rs b/exercises/18_iterators/iterators3.rs
new file mode 100644
index 0000000..29fa23a
--- /dev/null
+++ b/exercises/18_iterators/iterators3.rs
@@ -0,0 +1,90 @@
+// 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)]"
+ );
+ }
+}