titlefmt/function/arithmetic/min/
mod.rs1use super::Error;
2use expression::{Evaluation, Expression, Value};
3use metadata;
4
5use std::cmp;
6
7pub fn min<T: metadata::Provider>(
8 expressions: &[Box<Expression<T>>],
9 provider: &T,
10) -> Result<Evaluation, Error> {
11 if expressions.len() < 1 {
12 return Err(Error::ArgumentError);
13 }
14 let (mut result, mut truth) = expect_integer_result!(&expressions[0], provider);
16 for expr in expressions.iter() {
17 if let Some((i, expr_truth)) = try_integer_result!(expr, provider) {
18 truth |= expr_truth;
19 result = cmp::min(result, i);
20 }
21 }
22 Ok(Evaluation::new(Value::Integer(result), truth))
23}
24
25#[cfg(test)]
26mod test;