1
0
mirror of https://github.com/nushell/nushell.git synced 2025-07-24 08:35:54 +02:00
Files
.cargo
.github
assets
crates
nu-cli
nu-color-config
nu-command
assets
proptest-regressions
src
tests
commands
date
hash_
math
avg.rs
eval.rs
median.rs
mod.rs
round.rs
sqrt.rs
sum.rs
move_
network
path
platform
query
random
skip
str_
take
alias.rs
all.rs
any.rs
append.rs
cal.rs
cd.rs
compact.rs
cp.rs
def.rs
default.rs
do_.rs
drop.rs
each.rs
echo.rs
empty.rs
enter.rs
error_make.rs
every.rs
export_def.rs
find.rs
first.rs
flatten.rs
format.rs
g.rs
get.rs
glob.rs
group_by.rs
headers.rs
help.rs
histogram.rs
insert.rs
into_filesize.rs
into_int.rs
last.rs
length.rs
let_.rs
lines.rs
ls.rs
merge.rs
mkdir.rs
mod.rs
mut_.rs
n.rs
nu_check.rs
open.rs
p.rs
parse.rs
prepend.rs
print.rs
range.rs
reduce.rs
reject.rs
rename.rs
reverse.rs
rm.rs
roll.rs
rotate.rs
run_external.rs
save.rs
select.rs
semicolon.rs
seq_char.rs
shells.rs
sort.rs
sort_by.rs
source_env.rs
split_by.rs
split_column.rs
split_row.rs
table.rs
touch.rs
transpose.rs
uniq.rs
update.rs
upsert.rs
use_.rs
where_.rs
which.rs
while_.rs
with_env.rs
wrap.rs
zip.rs
format_conversions
main.rs
Cargo.toml
LICENSE
build.rs
nu-engine
nu-glob
nu-json
nu-parser
nu-path
nu-plugin
nu-pretty-hex
nu-protocol
nu-system
nu-table
nu-term-grid
nu-test-support
nu-utils
nu_plugin_custom_values
nu_plugin_example
nu_plugin_gstat
nu_plugin_inc
nu_plugin_python
nu_plugin_query
old
README.md
docker
docs
images
pkg_mgrs
samples
src
tests
wix
.gitignore
CODE_OF_CONDUCT.md
CONTRIBUTING.md
Cargo.lock
Cargo.toml
LICENSE
README.md
README.release.txt
build-all-maclin.sh
build-all-windows.cmd
build-all.nu
build.rs
install-all.ps1
install-all.sh
register-plugins.nu
rust-toolchain.toml
uninstall-all.sh
nushell/crates/nu-command/tests/commands/math/mod.rs
pwygab 5e748ae8fc make ++ append lists ()
* make `++` append lists

* fmt

* fix for database
2022-10-20 23:28:18 +13:00

512 lines
9.0 KiB
Rust

mod avg;
mod eval;
mod median;
mod round;
mod sqrt;
mod sum;
use nu_test_support::{nu, pipeline};
#[test]
fn one_arg() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1
"#
));
assert_eq!(actual.out, "1");
}
#[test]
fn add() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 + 1
"#
));
assert_eq!(actual.out, "2");
}
#[test]
fn add_compound() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 + 2 + 2
"#
));
assert_eq!(actual.out, "5");
}
#[test]
fn precedence_of_operators() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 + 2 * 2
"#
));
assert_eq!(actual.out, "5");
}
#[test]
fn precedence_of_operators2() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 + 2 * 2 + 1
"#
));
assert_eq!(actual.out, "6");
}
#[test]
fn precedence_of_operators3() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
5 - 5 * 10 + 5
"#
));
assert_eq!(actual.out, "-40");
}
#[test]
fn precedence_of_operators4() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
5 - (5 * 10) + 5
"#
));
assert_eq!(actual.out, "-40");
}
#[test]
fn division_of_ints() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
4 / 2
"#
));
assert_eq!(actual.out, "2");
}
#[test]
fn division_of_ints2() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 / 4
"#
));
assert_eq!(actual.out, "0.25");
}
#[test]
fn error_zero_division_int_int() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 / 0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn error_zero_division_decimal_int() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1.0 / 0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn error_zero_division_int_decimal() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 / 0.0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn error_zero_division_decimal_decimal() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1.0 / 0.0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn floor_division_of_ints() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
5 // 2
"#
));
assert_eq!(actual.out, "2");
}
#[test]
fn floor_division_of_ints2() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
-3 // 2
"#
));
assert_eq!(actual.out, "-2");
}
#[test]
fn floor_division_of_floats() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
-3.0 // 2.0
"#
));
assert_eq!(actual.out, "-2");
}
#[test]
fn error_zero_floor_division_int_int() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 // 0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn error_zero_floor_division_decimal_int() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1.0 // 0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn error_zero_floor_division_int_decimal() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 // 0.0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn error_zero_floor_division_decimal_decimal() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1.0 // 0.0
"#
));
assert!(actual.err.contains("division by zero"));
}
#[test]
fn proper_precedence_history() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
2 / 2 / 2 + 1
"#
));
assert_eq!(actual.out, "1.5");
}
#[test]
fn parens_precedence() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
4 * (6 - 3)
"#
));
assert_eq!(actual.out, "12");
}
#[test]
fn modulo() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
9 mod 2
"#
));
assert_eq!(actual.out, "1");
}
#[test]
fn unit_multiplication_math() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1mb * 2
"#
));
assert_eq!(actual.out, "1.9 MiB");
}
#[test]
fn unit_multiplication_float_math() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1mb * 1.2
"#
));
assert_eq!(actual.out, "1.1 MiB");
}
#[test]
fn unit_float_floor_division_math() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1mb // 3.0
"#
));
assert_eq!(actual.out, "325.5 KiB");
}
#[test]
fn unit_division_math() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1mb / 4
"#
));
assert_eq!(actual.out, "244.1 KiB");
}
#[test]
fn unit_float_division_math() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1mb / 3.1
"#
));
assert_eq!(actual.out, "315.0 KiB");
}
#[test]
fn duration_math() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1wk + 1day
"#
));
assert_eq!(actual.out, "1wk 1day");
}
#[test]
fn duration_decimal_math() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
5.5day + 0.5day
"#
));
assert_eq!(actual.out, "6day");
}
#[test]
fn duration_math_with_nanoseconds() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1wk + 10ns
"#
));
assert_eq!(actual.out, "1wk 10ns");
}
#[test]
fn duration_decimal_math_with_nanoseconds() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1.5wk + 10ns
"#
));
assert_eq!(actual.out, "1wk 3day 10ns");
}
#[test]
fn duration_decimal_math_with_all_units() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1wk + 3day + 8hr + 10min + 16sec + 121ms + 11us + 12ns
"#
));
assert_eq!(actual.out, "1wk 3day 8hr 10min 16sec 121ms 11µs 12ns");
}
#[test]
fn duration_decimal_dans_test() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
3.14sec
"#
));
assert_eq!(actual.out, "3sec 140ms");
}
#[test]
fn duration_math_with_negative() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1day - 1wk
"#
));
assert_eq!(actual.out, "-6day");
}
#[test]
fn compound_comparison() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
4 > 3 && 2 > 1
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn compound_comparison2() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
4 < 3 || 2 > 1
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn compound_where() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
echo '[{"a": 1, "b": 1}, {"a": 2, "b": 1}, {"a": 2, "b": 2}]' | from json | where a == 2 && b == 1 | to json -r
"#
));
assert_eq!(actual.out, r#"[{"a": 2,"b": 1}]"#);
}
#[test]
fn compound_where_paren() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
echo '[{"a": 1, "b": 1}, {"a": 2, "b": 1}, {"a": 2, "b": 2}]' | from json | where ($it.a == 2 && $it.b == 1) || $it.b == 2 | to json -r
"#
));
assert_eq!(actual.out, r#"[{"a": 2,"b": 1},{"a": 2,"b": 2}]"#);
}
#[test]
fn adding_lists() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
[1 3] ++ [5 6] | to nuon
"#
));
assert_eq!(actual.out, "[1, 3, 5, 6]");
}
#[test]
fn adding_list_and_value() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
[1 3] ++ 5 | to nuon
"#
));
assert_eq!(actual.out, "[1, 3, 5]");
}
#[test]
fn adding_value_and_list() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
1 ++ [3 5] | to nuon
"#
));
assert_eq!(actual.out, "[1, 3, 5]");
}