mirror of
https://github.com/nushell/nushell
synced 2024-12-29 06:23:11 +00:00
0918050ac8
# Description The name of the `group` command is a little unclear/ambiguous. Everything I look at it, I think of `group-by`. I think `chunks` more clearly conveys what the `group` command does. Namely, it divides the input list into chunks of a certain size. For example, [`slice::chunks`](https://doc.rust-lang.org/std/primitive.slice.html#method.chunks) has the same name. So, this PR adds a new `chunks` command to replace the now deprecated `group` command. The `chunks` command is a refactored version of `group`. As such, there is a small performance improvement: ```nushell # $data is a very large list > bench { $data | chunks 2 } --rounds 30 | get mean 474ms 921µs 190ns # deprecation warning was disabled here for fairness > bench { $data | group 2 } --rounds 30 | get mean 592ms 702µs 440ns > bench { $data | chunks 200 } --rounds 30 | get mean 374ms 188µs 318ns > bench { $data | group 200 } --rounds 30 | get mean 481ms 264µs 869ns > bench { $data | chunks 1 } --rounds 30 | get mean 642ms 574µs 42ns > bench { $data | group 1 } --rounds 30 | get mean 981ms 602µs 513ns ``` # User-Facing Changes - `group` command has been deprecated in favor of new `chunks` command. - `chunks` errors when given a chunk size of `0` whereas `group` returns chunks with one element. # Tests + Formatting Added tests for `chunks`, since `group` did not have any tests. # After Submitting Update book if necessary.
43 lines
1,008 B
Rust
43 lines
1,008 B
Rust
use nu_test_support::nu;
|
|
|
|
#[test]
|
|
fn chunk_size_negative() {
|
|
let actual = nu!("[0 1 2] | chunks -1");
|
|
assert!(actual.err.contains("positive"));
|
|
}
|
|
|
|
#[test]
|
|
fn chunk_size_zero() {
|
|
let actual = nu!("[0 1 2] | chunks 0");
|
|
assert!(actual.err.contains("zero"));
|
|
}
|
|
|
|
#[test]
|
|
fn chunk_size_not_int() {
|
|
let actual = nu!("[0 1 2] | chunks (if true { 1sec })");
|
|
assert!(actual.err.contains("can't convert"));
|
|
}
|
|
|
|
#[test]
|
|
fn empty() {
|
|
let actual = nu!("[] | chunks 2 | is-empty");
|
|
assert_eq!(actual.out, "true");
|
|
}
|
|
|
|
#[test]
|
|
fn list_stream() {
|
|
let actual = nu!("([0 1 2] | every 1 | chunks 2) == ([0 1 2] | chunks 2)");
|
|
assert_eq!(actual.out, "true");
|
|
}
|
|
|
|
#[test]
|
|
fn table_stream() {
|
|
let actual = nu!("([[foo bar]; [0 1] [2 3] [4 5]] | every 1 | chunks 2) == ([[foo bar]; [0 1] [2 3] [4 5]] | chunks 2)");
|
|
assert_eq!(actual.out, "true");
|
|
}
|
|
|
|
#[test]
|
|
fn no_empty_chunks() {
|
|
let actual = nu!("([0 1 2 3 4 5] | chunks 3 | length) == 2");
|
|
assert_eq!(actual.out, "true");
|
|
}
|