summaryrefslogtreecommitdiff
path: root/rustlings/solutions/18_iterators/iterators3.rs
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-10-02 21:53:51 -0500
committerHunter Kvalevog <hunter@kvog.sh>2026-10-02 21:53:51 -0500
commit4dfc11d74ab02ac5765ae5d08fb750c91f4744b4 (patch)
tree17ba62056d6b691dd0217b0e8f1b3a5826dce0f6 /rustlings/solutions/18_iterators/iterators3.rs
parent02d8f1c62896576e1266553a56980eddbc2a88d7 (diff)
rustlings: move to rust/
Diffstat (limited to 'rustlings/solutions/18_iterators/iterators3.rs')
-rw-r--r--rustlings/solutions/18_iterators/iterators3.rs88
1 files changed, 0 insertions, 88 deletions
diff --git a/rustlings/solutions/18_iterators/iterators3.rs b/rustlings/solutions/18_iterators/iterators3.rs
deleted file mode 100644
index 1d5d67f..0000000
--- a/rustlings/solutions/18_iterators/iterators3.rs
+++ /dev/null
@@ -1,88 +0,0 @@
-#[derive(Debug, PartialEq, Eq)]
-enum DivisionError {
- // Example: 42 / 0
- DivideByZero,
- // Only case for `i64`: `i64::MIN / -1` because the result is `i64::MAX + 1`
- IntegerOverflow,
- // Example: 5 / 2 = 2.5
- NotDivisible,
-}
-
-fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
- if b == 0 {
- return Err(DivisionError::DivideByZero);
- }
-
- if a == i64::MIN && b == -1 {
- return Err(DivisionError::IntegerOverflow);
- }
-
- if a % b != 0 {
- return Err(DivisionError::NotDivisible);
- }
-
- Ok(a / b)
-}
-
-fn result_with_list() -> Result<Vec<i64>, DivisionError> {
- // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- let numbers = [27, 297, 38502, 81];
- let division_results = numbers.into_iter().map(|n| divide(n, 27));
- // Collects to the expected return type. Returns the first error in the
- // division results (if one exists).
- division_results.collect()
-}
-
-fn list_of_results() -> Vec<Result<i64, DivisionError>> {
- // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- let numbers = [27, 297, 38502, 81];
- let division_results = numbers.into_iter().map(|n| divide(n, 27));
- // Collects to the expected return type.
- division_results.collect()
-}
-
-fn main() {
- // You can optionally experiment here.
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_success() {
- assert_eq!(divide(81, 9), Ok(9));
- assert_eq!(divide(81, -1), Ok(-81));
- assert_eq!(divide(i64::MIN, i64::MIN), Ok(1));
- }
-
- #[test]
- fn test_divide_by_0() {
- assert_eq!(divide(81, 0), Err(DivisionError::DivideByZero));
- }
-
- #[test]
- fn test_integer_overflow() {
- assert_eq!(divide(i64::MIN, -1), Err(DivisionError::IntegerOverflow));
- }
-
- #[test]
- fn test_not_divisible() {
- assert_eq!(divide(81, 6), Err(DivisionError::NotDivisible));
- }
-
- #[test]
- fn test_divide_0_by_something() {
- assert_eq!(divide(0, 81), Ok(0));
- }
-
- #[test]
- fn test_result_with_list() {
- assert_eq!(result_with_list().unwrap(), [1, 11, 1426, 3]);
- }
-
- #[test]
- fn test_list_of_results() {
- assert_eq!(list_of_results(), [Ok(1), Ok(11), Ok(1426), Ok(3)]);
- }
-}