(
env: &mut Environment,
expr: &BetweenExpr,
titles: &[String],
object: &Vec<Box<dyn Value>>,
)
| 506 | } |
| 507 | |
| 508 | fn evaluate_between( |
| 509 | env: &mut Environment, |
| 510 | expr: &BetweenExpr, |
| 511 | titles: &[String], |
| 512 | object: &Vec<Box<dyn Value>>, |
| 513 | ) -> Result<Box<dyn Value>, String> { |
| 514 | let value = evaluate_expression(env, &expr.value, titles, object)?; |
| 515 | let range_start = evaluate_expression(env, &expr.range_start, titles, object)?; |
| 516 | let range_end = evaluate_expression(env, &expr.range_end, titles, object)?; |
| 517 | let comparing_result = match expr.kind { |
| 518 | BetweenKind::Symmetric => { |
| 519 | let (start, end) = if let Some(order) = range_start.compare(&range_end) { |
| 520 | if Ordering::is_gt(order) { |
| 521 | (range_end, range_start) |
| 522 | } else { |
| 523 | (range_start, range_end) |
| 524 | } |
| 525 | } else { |
| 526 | (range_start, range_end) |
| 527 | }; |
| 528 | value.compare(&start).unwrap().is_ge() && value.compare(&end).unwrap().is_le() |
| 529 | } |
| 530 | BetweenKind::Asymmetric => { |
| 531 | value.compare(&range_start).unwrap().is_ge() |
| 532 | && value.compare(&range_end).unwrap().is_le() |
| 533 | } |
| 534 | }; |
| 535 | Ok(Box::new(BoolValue::new(comparing_result))) |
| 536 | } |
| 537 | |
| 538 | fn evaluate_case( |
| 539 | env: &mut Environment, |
no test coverage detected
searching dependent graphs…