summaryrefslogtreecommitdiff
path: root/tests/join
diff options
context:
space:
mode:
authorJames Youngman <jay@gnu.org>2008-02-19 14:13:00 +0100
committerJim Meyering <meyering@redhat.com>2008-02-19 15:17:39 +0100
commita1e715698a038af7ff341011a2aeecf6729c8de9 (patch)
tree7786e67b64636ee6cca2a2ca720dcc9f1ef14fbf /tests/join
parent4242d4f5c4f32374b684882a74e1b773ad01b1d6 (diff)
downloadcoreutils-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/join')
-rw-r--r--tests/join/Test.pm35
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