Fixed unit support for modulo

This commit is contained in:
Kasper 2020-01-14 14:59:18 +01:00
parent 1e83f50fbd
commit 81b987e14f

View File

@ -322,12 +322,13 @@ pub fn divide(left: Number, right: Number) -> Result<Number, String> {
} }
pub fn modulo(left: Number, right: Number) -> Result<Number, String> { pub fn modulo(left: Number, right: Number) -> Result<Number, String> {
if left.unit == Unit::NoUnit && right.unit == Unit::NoUnit { if left.unit.category() == Temperature || right.unit.category() == Temperature {
// 3 / 2 // if temperature
return Err(format!("Cannot modulo {:?} by {:?}", left.unit, right.unit))
} else if left.unit.category() == right.unit.category() {
// 5 km % 3 m
let (left, right) = convert_to_lowest(left, right)?;
return Ok(Number::new(left.value % right.value, left.unit)) return Ok(Number::new(left.value % right.value, left.unit))
} else if left.unit != Unit::NoUnit && right.unit == Unit::NoUnit {
// 1 km / 2
return Ok(Number::new(left.value % right.value, right.unit))
} else { } else {
return Err(format!("Cannot modulo {:?} by {:?}", left.unit, right.unit)) return Err(format!("Cannot modulo {:?} by {:?}", left.unit, right.unit))
} }