diff options
author | James Youngman <jay@gnu.org> | 2008-02-19 14:13:00 +0100 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2008-02-19 15:17:39 +0100 |
commit | a1e715698a038af7ff341011a2aeecf6729c8de9 (patch) | |
tree | 7786e67b64636ee6cca2a2ca720dcc9f1ef14fbf /tests | |
parent | 4242d4f5c4f32374b684882a74e1b773ad01b1d6 (diff) | |
download | coreutils-a1e715698a038af7ff341011a2aeecf6729c8de9.tar.xz |
join: new options: --check-order and --nocheck-order.
* src/join.c: Support --check-order and --nocheck-order.
New variables check_input_order, seen_unpairable and
issued_disorder_warning[]. For --check-order, verify that the
input files are in sorted order. For the default case, check the
order only if there are unpairable lines.
(join): Perform ordering checks after reaching EOF on either
input.
(usage): Mention --check-order and --nocheck-order.
(dupline): Save a copy of the previously-read input line so that
we can detect disorder on the input.
(get_line): Temporarily save a copy of the previous line (by
calling dupline) and check relative ordering (by calling
checkorder) before returning the newly-read line.
(getseq, join): Tell get_line which file we are reading from.
(advance_seq): New function, factoring out some of the code
commonly surrounding calls to getseq.
(checkorder): New function. Verifies that a pair of consecutive
input lines are in sorted order.
* doc/coreutils.texi (join invocation): Document the new options
--check-order and --nocheck-order.
* tests/join/Test.pm (tv): Added tests for --check-order and
--nocheck-order.
* NEWS: Mention this new feature.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/join/Test.pm | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/tests/join/Test.pm b/tests/join/Test.pm index 481360489..6d91908f4 100644 --- a/tests/join/Test.pm +++ b/tests/join/Test.pm @@ -1,6 +1,6 @@ # Test "join". -# Copyright (C) 1996, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 1996, 1999-2000, 2003-2004, 2008 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -140,7 +140,38 @@ my @tv = ( # FIXME: change this to ensure the diagnostic makes sense ['invalid-j', '-j x', {}, "", 1], -); +# With ordering check, inputs in order +['chkodr-1', '--check-order', + [" a 1\n b 2\n", " a Y\n b Z\n"], "a 1 Y\nb 2 Z\n", 0], + +# Without check, inputs in order +['chkodr-2', '--nocheck-order', + [" a 1\n b 2\n", " a Y\n b Z\n"], "a 1 Y\nb 2 Z\n", 0], + +# Without check, both inputs out of order (in fact, in reverse order) +# but all pairable. Support for this is a GNU extension. +['chkodr-3', '--nocheck-order', + [" b 1\n a 2\n", " b Y\n a Z\n"], "b 1 Y\na 2 Z\n", 0], + +# The extension should work without --nocheck-order, since that is the +# default. +['chkodr-4', '', + [" b 1\n a 2\n", " b Y\n a Z\n"], "b 1 Y\na 2 Z\n", 0], + +# With check, both inputs out of order (in fact, in reverse order) +['chkodr-5', '--check-order', + [" b 1\n a 2\n", " b Y\n a Z\n"], "", 1], + +# Without order check, both inputs out of order and some lines +# unpairable. This is NOT supported by the GNU extension. All that +# we really care about for this test is that the return status is +# zero, since that is the only way to actually verify that the +# --nocheck-order option had any effect. We don't actually want to +# guarantee that join produces this output on stdout. +['chkodr-6', '--nocheck-order', + [" b 1\n a 2\n", " b Y\n c Z\n"], "b 1 Y\n", 0] +) +; sub test_vector |