summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--exercises/18_iterators/iterators3.rs11
-rw-r--r--solutions/18_iterators/iterators3.rs13
2 files changed, 23 insertions, 1 deletions
diff --git a/exercises/18_iterators/iterators3.rs b/exercises/18_iterators/iterators3.rs
index 65a0573..6b1eca1 100644
--- a/exercises/18_iterators/iterators3.rs
+++ b/exercises/18_iterators/iterators3.rs
@@ -1,12 +1,16 @@
#[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,
}
// TODO: Calculate `a` divided by `b` if `a` is evenly divisible by `b`.
// Otherwise, return a suitable error.
-fn divide(a: i32, b: i32) -> Result<i32, DivisionError> {
+fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
todo!();
}
@@ -43,6 +47,11 @@ mod tests {
}
#[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));
}
diff --git a/solutions/18_iterators/iterators3.rs b/solutions/18_iterators/iterators3.rs
index d66d1ef..11aa1ec 100644
--- a/solutions/18_iterators/iterators3.rs
+++ b/solutions/18_iterators/iterators3.rs
@@ -1,6 +1,10 @@
#[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,
}
@@ -9,6 +13,10 @@ fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
return Err(DivisionError::DivideByZero);
}
+ if a == i64::MIN && b == -1 {
+ return Err(DivisionError::IntegerOverflow);
+ }
+
if a % b != 0 {
return Err(DivisionError::NotDivisible);
}
@@ -52,6 +60,11 @@ mod tests {
}
#[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));
}