rustlings

solving rustlings ft. dracuxan
git clone [email protected]:dracuxan/rustlings.git
Log | Files | Refs

iterators3.rs (1935B)


      1 #[derive(Debug, PartialEq, Eq)]
      2 enum DivisionError {
      3     // Example: 42 / 0
      4     DivideByZero,
      5     // Only case for `i64`: `i64::MIN / -1` because the result is `i64::MAX + 1`
      6     IntegerOverflow,
      7     // Example: 5 / 2 = 2.5
      8     NotDivisible,
      9 }
     10 
     11 // TODO: Calculate `a` divided by `b` if `a` is evenly divisible by `b`.
     12 // Otherwise, return a suitable error.
     13 fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
     14     todo!();
     15 }
     16 
     17 // TODO: Add the correct return type and complete the function body.
     18 // Desired output: `Ok([1, 11, 1426, 3])`
     19 fn result_with_list() {
     20     let numbers = [27, 297, 38502, 81];
     21     let division_results = numbers.into_iter().map(|n| divide(n, 27));
     22 }
     23 
     24 // TODO: Add the correct return type and complete the function body.
     25 // Desired output: `[Ok(1), Ok(11), Ok(1426), Ok(3)]`
     26 fn list_of_results() {
     27     let numbers = [27, 297, 38502, 81];
     28     let division_results = numbers.into_iter().map(|n| divide(n, 27));
     29 }
     30 
     31 fn main() {
     32     // You can optionally experiment here.
     33 }
     34 
     35 #[cfg(test)]
     36 mod tests {
     37     use super::*;
     38 
     39     #[test]
     40     fn test_success() {
     41         assert_eq!(divide(81, 9), Ok(9));
     42         assert_eq!(divide(81, -1), Ok(-81));
     43         assert_eq!(divide(i64::MIN, i64::MIN), Ok(1));
     44     }
     45 
     46     #[test]
     47     fn test_divide_by_0() {
     48         assert_eq!(divide(81, 0), Err(DivisionError::DivideByZero));
     49     }
     50 
     51     #[test]
     52     fn test_integer_overflow() {
     53         assert_eq!(divide(i64::MIN, -1), Err(DivisionError::IntegerOverflow));
     54     }
     55 
     56     #[test]
     57     fn test_not_divisible() {
     58         assert_eq!(divide(81, 6), Err(DivisionError::NotDivisible));
     59     }
     60 
     61     #[test]
     62     fn test_divide_0_by_something() {
     63         assert_eq!(divide(0, 81), Ok(0));
     64     }
     65 
     66     #[test]
     67     fn test_result_with_list() {
     68         assert_eq!(result_with_list().unwrap(), [1, 11, 1426, 3]);
     69     }
     70 
     71     #[test]
     72     fn test_list_of_results() {
     73         assert_eq!(list_of_results(), [Ok(1), Ok(11), Ok(1426), Ok(3)]);
     74     }
     75 }