From e1af1520e7eeeecf6086ccf764e31fd26c97dd1f Mon Sep 17 00:00:00 2001 From: David Laban Date: Thu, 11 Aug 2016 20:30:58 +0100 Subject: [PATCH] sort: make compare_by honour settings.reverse This allows sort --merge --reverse to work as well. --- src/sort/sort.rs | 11 ++++++----- tests/fixtures/sort/merge_ints_reversed.expected | 9 +++++++++ tests/fixtures/sort/merge_ints_reversed_1.txt | 3 +++ tests/fixtures/sort/merge_ints_reversed_2.txt | 3 +++ tests/fixtures/sort/merge_ints_reversed_3.txt | 3 +++ tests/test_sort.rs | 11 +++++++++++ 6 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/sort/merge_ints_reversed.expected create mode 100644 tests/fixtures/sort/merge_ints_reversed_1.txt create mode 100644 tests/fixtures/sort/merge_ints_reversed_2.txt create mode 100644 tests/fixtures/sort/merge_ints_reversed_3.txt diff --git a/src/sort/sort.rs b/src/sort/sort.rs index af2c61559..15d655ecf 100644 --- a/src/sort/sort.rs +++ b/src/sort/sort.rs @@ -265,10 +265,6 @@ fn exec(files: Vec, settings: &Settings) -> i32 { lines.dedup() } - if settings.reverse { - lines.reverse() - } - if settings.check { for (i, line) in lines.iter().enumerate() { if line != &original_lines[i] { @@ -298,7 +294,12 @@ fn compare_by(a: &String, b: &String, settings: &Settings) -> Ordering { for compare_fn in &settings.compare_fns { let cmp = compare_fn(a, b); if cmp != Ordering::Equal { - return cmp; + if settings.reverse { + return cmp.reverse(); + } + else { + return cmp; + } } } return Ordering::Equal; diff --git a/tests/fixtures/sort/merge_ints_reversed.expected b/tests/fixtures/sort/merge_ints_reversed.expected new file mode 100644 index 000000000..abb8f7739 --- /dev/null +++ b/tests/fixtures/sort/merge_ints_reversed.expected @@ -0,0 +1,9 @@ +9 +8 +7 +6 +5 +4 +3 +2 +1 diff --git a/tests/fixtures/sort/merge_ints_reversed_1.txt b/tests/fixtures/sort/merge_ints_reversed_1.txt new file mode 100644 index 000000000..8313069f4 --- /dev/null +++ b/tests/fixtures/sort/merge_ints_reversed_1.txt @@ -0,0 +1,3 @@ +7 +4 +1 diff --git a/tests/fixtures/sort/merge_ints_reversed_2.txt b/tests/fixtures/sort/merge_ints_reversed_2.txt new file mode 100644 index 000000000..c0416aa97 --- /dev/null +++ b/tests/fixtures/sort/merge_ints_reversed_2.txt @@ -0,0 +1,3 @@ +8 +5 +2 diff --git a/tests/fixtures/sort/merge_ints_reversed_3.txt b/tests/fixtures/sort/merge_ints_reversed_3.txt new file mode 100644 index 000000000..bd33aa425 --- /dev/null +++ b/tests/fixtures/sort/merge_ints_reversed_3.txt @@ -0,0 +1,3 @@ +9 +6 +3 diff --git a/tests/test_sort.rs b/tests/test_sort.rs index dde6c4b53..0075ddbe4 100644 --- a/tests/test_sort.rs +++ b/tests/test_sort.rs @@ -80,6 +80,17 @@ fn test_merge_interleaved() { .succeeds().stdout_is_fixture("merge_ints_interleaved.expected"); } +#[test] +fn test_merge_reversed() { + new_ucmd() + .arg("-m") + .arg("--reverse") + .arg("merge_ints_reversed_1.txt") + .arg("merge_ints_reversed_2.txt") + .arg("merge_ints_reversed_3.txt") + .succeeds().stdout_is_fixture("merge_ints_reversed.expected"); +} + #[test] fn test_check() { new_ucmd()