use super::Error;
use expression::{Evaluation, Expression, Value};
use metadata;
pub fn xor<T: metadata::Provider>(
expressions: &[Box<Expression<T>>],
provider: &T,
) -> Result<Evaluation, Error> {
let result: usize = expressions
.iter()
.filter(|&expr| expr.apply(provider).truth())
.count();
let is_odd: bool = result % 2 == 1;
Ok(Evaluation::new(Value::Empty, is_odd))
}
#[cfg(test)]
mod test;