mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
sort --merge --unique
This uses Itertools' dedup() rather than Vec::dedup(). There is probably a cleaner, more polymorphic way to do this. Suggestions welcome.
This commit is contained in:
parent
e1af1520e7
commit
3531c46fb8
3 changed files with 30 additions and 6 deletions
|
@ -11,6 +11,7 @@ path = "sort.rs"
|
|||
getopts = "*"
|
||||
libc = "*"
|
||||
semver = "*"
|
||||
itertools = "*"
|
||||
uucore = { path="../uucore" }
|
||||
|
||||
[[bin]]
|
||||
|
|
|
@ -17,6 +17,8 @@ extern crate semver;
|
|||
|
||||
#[macro_use]
|
||||
extern crate uucore;
|
||||
#[macro_use]
|
||||
extern crate itertools;
|
||||
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::BinaryHeap;
|
||||
|
@ -26,6 +28,7 @@ use std::mem::replace;
|
|||
use std::path::Path;
|
||||
use uucore::fs::is_stdin_interactive;
|
||||
use semver::Version;
|
||||
use itertools::Itertools; // for Iterator::dedup()
|
||||
|
||||
static NAME: &'static str = "sort";
|
||||
static VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
||||
|
@ -261,10 +264,6 @@ fn exec(files: Vec<String>, settings: &Settings) -> i32 {
|
|||
|
||||
sort_by(&mut lines, &settings);
|
||||
|
||||
if settings.unique {
|
||||
lines.dedup()
|
||||
}
|
||||
|
||||
if settings.check {
|
||||
for (i, line) in lines.iter().enumerate() {
|
||||
if line != &original_lines[i] {
|
||||
|
@ -274,11 +273,21 @@ fn exec(files: Vec<String>, settings: &Settings) -> i32 {
|
|||
}
|
||||
}
|
||||
else if settings.merge {
|
||||
if settings.unique {
|
||||
print_sorted(file_merger.dedup(), &settings.outfile)
|
||||
}
|
||||
else {
|
||||
print_sorted(file_merger, &settings.outfile)
|
||||
}
|
||||
}
|
||||
else {
|
||||
if settings.unique {
|
||||
print_sorted(lines.iter().dedup(), &settings.outfile)
|
||||
}
|
||||
else {
|
||||
print_sorted(lines.iter(), &settings.outfile)
|
||||
}
|
||||
}
|
||||
|
||||
0
|
||||
|
||||
|
|
|
@ -80,6 +80,20 @@ fn test_merge_interleaved() {
|
|||
.succeeds().stdout_is_fixture("merge_ints_interleaved.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_merge_unique() {
|
||||
new_ucmd()
|
||||
.arg("-m")
|
||||
.arg("--unique")
|
||||
.arg("merge_ints_interleaved_1.txt")
|
||||
.arg("merge_ints_interleaved_2.txt")
|
||||
.arg("merge_ints_interleaved_3.txt")
|
||||
.arg("merge_ints_interleaved_3.txt")
|
||||
.arg("merge_ints_interleaved_2.txt")
|
||||
.arg("merge_ints_interleaved_1.txt")
|
||||
.succeeds().stdout_is_fixture("merge_ints_interleaved.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_merge_reversed() {
|
||||
new_ucmd()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue