mirror of
https://github.com/nushell/nushell.git
synced 2024-11-25 18:03:51 +01:00
More fixes for bigint duration (#3557)
This commit is contained in:
parent
51890baace
commit
1d0d0425d4
@ -477,11 +477,7 @@ pub fn compute_values(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let y = y.as_bigint_and_exponent();
|
let y = y.as_bigint_and_exponent();
|
||||||
let z = y.0.to_i64();
|
Ok(x / y.0)
|
||||||
match z {
|
|
||||||
Some(z) => Ok(x / z),
|
|
||||||
None => Err((left.type_name(), right.type_name())),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_ => Err((left.type_name(), right.type_name())),
|
_ => Err((left.type_name(), right.type_name())),
|
||||||
}?;
|
}?;
|
||||||
|
@ -76,15 +76,6 @@ impl CommandArgs {
|
|||||||
|
|
||||||
Ok((f(&evaluated_args.args)?, evaluated_args.input))
|
Ok((f(&evaluated_args.args)?, evaluated_args.input))
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub fn process<'de, T: Deserialize<'de>>(self) -> Result<(T, InputStream), ShellError> {
|
|
||||||
// let args = self.evaluate_once()?;
|
|
||||||
// let call_info = args.call_info.clone();
|
|
||||||
|
|
||||||
// let mut deserializer = ConfigDeserializer::from_call_info(call_info);
|
|
||||||
|
|
||||||
// Ok((T::deserialize(&mut deserializer)?, args.input))
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct EvaluatedCommandArgs {
|
pub struct EvaluatedCommandArgs {
|
||||||
|
@ -587,21 +587,21 @@ impl Unit {
|
|||||||
Unit::Tebibyte => filesize(size * 1024 * 1024 * 1024 * 1024),
|
Unit::Tebibyte => filesize(size * 1024 * 1024 * 1024 * 1024),
|
||||||
Unit::Pebibyte => filesize(size * 1024 * 1024 * 1024 * 1024 * 1024),
|
Unit::Pebibyte => filesize(size * 1024 * 1024 * 1024 * 1024 * 1024),
|
||||||
|
|
||||||
Unit::Nanosecond => duration(size.to_i64().expect("Conversion should never fail.")),
|
Unit::Nanosecond => duration(size.to_bigint().expect("Conversion should never fail.")),
|
||||||
Unit::Microsecond => {
|
Unit::Microsecond => {
|
||||||
duration(size.to_i64().expect("Conversion should never fail.") * 1000)
|
duration(size.to_bigint().expect("Conversion should never fail.") * 1000)
|
||||||
}
|
}
|
||||||
Unit::Millisecond => {
|
Unit::Millisecond => {
|
||||||
duration(size.to_i64().expect("Conversion should never fail.") * 1000 * 1000)
|
duration(size.to_bigint().expect("Conversion should never fail.") * 1000 * 1000)
|
||||||
}
|
|
||||||
Unit::Second => {
|
|
||||||
duration(size.to_i64().expect("Conversion should never fail.") * 1000 * 1000 * 1000)
|
|
||||||
}
|
}
|
||||||
|
Unit::Second => duration(
|
||||||
|
size.to_bigint().expect("Conversion should never fail.") * 1000 * 1000 * 1000,
|
||||||
|
),
|
||||||
Unit::Minute => duration(
|
Unit::Minute => duration(
|
||||||
size.to_i64().expect("Conversion should never fail.") * 60 * 1000 * 1000 * 1000,
|
size.to_bigint().expect("Conversion should never fail.") * 60 * 1000 * 1000 * 1000,
|
||||||
),
|
),
|
||||||
Unit::Hour => duration(
|
Unit::Hour => duration(
|
||||||
size.to_i64().expect("Conversion should never fail.")
|
size.to_bigint().expect("Conversion should never fail.")
|
||||||
* 60
|
* 60
|
||||||
* 60
|
* 60
|
||||||
* 1000
|
* 1000
|
||||||
@ -609,7 +609,7 @@ impl Unit {
|
|||||||
* 1000,
|
* 1000,
|
||||||
),
|
),
|
||||||
Unit::Day => duration(
|
Unit::Day => duration(
|
||||||
size.to_i64().expect("Conversion should never fail.")
|
size.to_bigint().expect("Conversion should never fail.")
|
||||||
* 24
|
* 24
|
||||||
* 60
|
* 60
|
||||||
* 60
|
* 60
|
||||||
@ -618,7 +618,7 @@ impl Unit {
|
|||||||
* 1000,
|
* 1000,
|
||||||
),
|
),
|
||||||
Unit::Week => duration(
|
Unit::Week => duration(
|
||||||
size.to_i64().expect("Conversion should never fail.")
|
size.to_bigint().expect("Conversion should never fail.")
|
||||||
* 7
|
* 7
|
||||||
* 24
|
* 24
|
||||||
* 60
|
* 60
|
||||||
|
@ -898,6 +898,31 @@ fn table_with_commas() {
|
|||||||
assert_eq!(actual.out, "141");
|
assert_eq!(actual.out, "141");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn duration_overflow() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: ".", pipeline(
|
||||||
|
r#"
|
||||||
|
ls | get modified | each { $it + 10000000000000000day }
|
||||||
|
"#)
|
||||||
|
);
|
||||||
|
|
||||||
|
assert!(actual.err.contains("Duration overflow"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn date_and_duration_overflow() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: ".", pipeline(
|
||||||
|
r#"
|
||||||
|
ls | get modified | each { $it + 1000000000day }
|
||||||
|
"#)
|
||||||
|
);
|
||||||
|
|
||||||
|
// assert_eq!(actual.err, "overflow");
|
||||||
|
assert!(actual.err.contains("Duration and date addition overflow"));
|
||||||
|
}
|
||||||
|
|
||||||
mod parse {
|
mod parse {
|
||||||
use nu_test_support::nu;
|
use nu_test_support::nu;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user