1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

seq: simplyfy nan and inf parsing

This commit is contained in:
John Shin 2023-09-27 14:55:08 -07:00
parent 2bb56d44a4
commit 9c0b9cae56

View file

@ -69,28 +69,13 @@ fn parse_no_decimal_no_exponent(s: &str) -> Result<PreciseNumber, ParseNumberErr
}
Err(_) => {
// Possibly "NaN" or "inf".
if let Ok(num) = f32::from_str(s) {
// pattern matching on floating point literal is not encouraged 'https://github.com/rust-lang/rust/issues/41620'
if num == f32::INFINITY {
Ok(PreciseNumber::new(
Number::Float(ExtendedBigDecimal::Infinity),
0,
0,
))
} else if num == f32::NEG_INFINITY {
Ok(PreciseNumber::new(
Number::Float(ExtendedBigDecimal::MinusInfinity),
0,
0,
))
} else if num.is_nan() {
Err(ParseNumberError::Nan)
} else {
Err(ParseNumberError::Float)
}
} else {
Err(ParseNumberError::Float)
}
let float_val = match s.to_ascii_lowercase().as_str() {
"inf" | "infinity" => ExtendedBigDecimal::Infinity,
"-inf" | "-infinity" => ExtendedBigDecimal::MinusInfinity,
"nan" | "-nan" => return Err(ParseNumberError::Nan),
_ => return Err(ParseNumberError::Float),
};
Ok(PreciseNumber::new(Number::Float(float_val), 0, 0))
}
}
}