mirror of
https://github.com/rust-lang/rustlings.git
synced 2025-04-08 16:58:35 +01:00
add proper testing for cases where divisions fail
This commit is contained in:
parent
374c3874af
commit
edcf19da0d
2 changed files with 98 additions and 20 deletions
|
@ -15,17 +15,17 @@ fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
|
|||
}
|
||||
|
||||
// TODO: Add the correct return type and complete the function body.
|
||||
// Desired output: `Ok([1, 11, 1426, 3])`
|
||||
fn result_with_list() {
|
||||
let numbers = [27, 297, 38502, 81];
|
||||
let division_results = numbers.into_iter().map(|n| divide(n, 27));
|
||||
// For numbers = [27, 297, 38502, 81] and divisor = 27,
|
||||
// the desired output is: `Ok([1, 11, 1426, 3])`
|
||||
fn result_with_list(numbers: Vec<i64>, divisor: i64) {
|
||||
let division_results = numbers.into_iter().map(|n| divide(n, divisor));
|
||||
}
|
||||
|
||||
// TODO: Add the correct return type and complete the function body.
|
||||
// Desired output: `[Ok(1), Ok(11), Ok(1426), Ok(3)]`
|
||||
fn list_of_results() {
|
||||
let numbers = [27, 297, 38502, 81];
|
||||
let division_results = numbers.into_iter().map(|n| divide(n, 27));
|
||||
// For numbers = [27, 297, 38502, 81] and divisor = 27,
|
||||
// the desired output is: `[Ok(1), Ok(11), Ok(1426), Ok(3)]`
|
||||
fn list_of_results(numbers: Vec<i64>, divisor: i64) {
|
||||
let division_results = numbers.into_iter().map(|n| divide(n, divisor));
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -63,11 +63,51 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn test_result_with_list() {
|
||||
assert_eq!(result_with_list().unwrap(), [1, 11, 1426, 3]);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, 38502, 81], 27),
|
||||
Ok(vec![1, 11, 1426, 3])
|
||||
);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, 38502, 28], 27),
|
||||
Err(DivisionError::NotDivisible)
|
||||
);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, 38502, 28], 0),
|
||||
Err(DivisionError::DivideByZero)
|
||||
);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, i64::MIN, 28], -1),
|
||||
Err(DivisionError::IntegerOverflow)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_list_of_results() {
|
||||
assert_eq!(list_of_results(), [Ok(1), Ok(11), Ok(1426), Ok(3)]);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, 38502, 81], 27),
|
||||
vec![Ok(1), Ok(11), Ok(1426), Ok(3)]
|
||||
);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, 38502, 28], 27),
|
||||
vec![Ok(1), Ok(11), Ok(1426), Err(DivisionError::NotDivisible)]
|
||||
);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, 38502, 81], 0),
|
||||
vec![
|
||||
Err(DivisionError::DivideByZero),
|
||||
Err(DivisionError::DivideByZero),
|
||||
Err(DivisionError::DivideByZero),
|
||||
Err(DivisionError::DivideByZero)
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, i64::MIN, 81], -1),
|
||||
vec![
|
||||
Ok(-27),
|
||||
Ok(-297),
|
||||
Err(DivisionError::IntegerOverflow),
|
||||
Ok(-81)
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,19 +24,17 @@ fn divide(a: i64, b: i64) -> Result<i64, DivisionError> {
|
|||
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));
|
||||
fn result_with_list(numbers: Vec<i64>, divisor: i64) -> Result<Vec<i64>, DivisionError> {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
let division_results = numbers.into_iter().map(|n| divide(n, divisor));
|
||||
// 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));
|
||||
fn list_of_results(numbers: Vec<i64>, divisor: i64) -> Vec<Result<i64, DivisionError>> {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
let division_results = numbers.into_iter().map(|n| divide(n, divisor));
|
||||
// Collects to the expected return type.
|
||||
division_results.collect()
|
||||
}
|
||||
|
@ -76,11 +74,51 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn test_result_with_list() {
|
||||
assert_eq!(result_with_list().unwrap(), [1, 11, 1426, 3]);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, 38502, 81], 27),
|
||||
Ok(vec![1, 11, 1426, 3])
|
||||
);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, 38502, 28], 27),
|
||||
Err(DivisionError::NotDivisible)
|
||||
);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, 38502, 28], 0),
|
||||
Err(DivisionError::DivideByZero)
|
||||
);
|
||||
assert_eq!(
|
||||
result_with_list(vec![27, 297, i64::MIN, 28], -1),
|
||||
Err(DivisionError::IntegerOverflow)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_list_of_results() {
|
||||
assert_eq!(list_of_results(), [Ok(1), Ok(11), Ok(1426), Ok(3)]);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, 38502, 81], 27),
|
||||
vec![Ok(1), Ok(11), Ok(1426), Ok(3)]
|
||||
);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, 38502, 28], 27),
|
||||
vec![Ok(1), Ok(11), Ok(1426), Err(DivisionError::NotDivisible)]
|
||||
);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, 38502, 81], 0),
|
||||
vec![
|
||||
Err(DivisionError::DivideByZero),
|
||||
Err(DivisionError::DivideByZero),
|
||||
Err(DivisionError::DivideByZero),
|
||||
Err(DivisionError::DivideByZero)
|
||||
]
|
||||
);
|
||||
assert_eq!(
|
||||
list_of_results(vec![27, 297, i64::MIN, 81], -1),
|
||||
vec![
|
||||
Ok(-27),
|
||||
Ok(-297),
|
||||
Err(DivisionError::IntegerOverflow),
|
||||
Ok(-81)
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue