|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use strict; |
|
|
|
|
|
(my $program_name = $0) =~ s|.*/||; |
|
|
|
|
|
|
|
|
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; |
|
|
|
|
|
my @Tests = |
|
|
( |
|
|
['cycle-1', {IN => {f => "t b\nt s\ns t\n"}}, {OUT => "s\nt\nb\n"}, |
|
|
{EXIT => 1}, |
|
|
{ERR => "tsort: f: input contains a loop:\ntsort: s\ntsort: t\n"} ], |
|
|
['cycle-2', {IN => {f => "t x\nt s\ns t\n"}}, {OUT => "s\nt\nx\n"}, |
|
|
{EXIT => 1}, |
|
|
{ERR => "tsort: f: input contains a loop:\ntsort: s\ntsort: t\n"} ], |
|
|
['cycle-3', '-w', {IN => {f => "a a\na b\na c\nc a\nb a"}}, |
|
|
{OUT => "a\nc\nb\n"}, {EXIT => 1}, |
|
|
{ERR => "tsort: f: input contains a loop:\ntsort: a\ntsort: b\n" |
|
|
. "tsort: f: input contains a loop:\ntsort: a\ntsort: c\n"} ], |
|
|
|
|
|
['posix-1', {IN => "a b c c d e\ng g\nf g e f\nh h\n"}, |
|
|
{OUT => "a\nc\nd\nh\nb\ne\nf\ng\n"}], |
|
|
['posix-2', {IN => "b a\nd c\nz h x h r h\n"}, |
|
|
{OUT => "b\nd\nr\nx\nz\na\nc\nh\n"}], |
|
|
|
|
|
['linear-1', {IN => "a b b c c d d e e f f g\n"}, |
|
|
{OUT => "a\nb\nc\nd\ne\nf\ng\n"}], |
|
|
|
|
|
['tree-1', {IN => "a b b c c d d e e f f g\nc x x y y z\n"}, |
|
|
{OUT => "a\nb\nc\nx\nd\ny\ne\nz\nf\ng\n"}], |
|
|
['tree-2', {IN => "a b b c c d d e e f f g\nc x x y y z\nf r r s s t\n"}, |
|
|
{OUT => "a\nb\nc\nx\nd\ny\ne\nz\nf\nr\ng\ns\nt\n"}], |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
['odd', {IN => "a\n"}, |
|
|
{EXIT => 1}, |
|
|
{ERR => "tsort: odd.1: input contains an odd number of tokens\n"}], |
|
|
|
|
|
['only-one', {IN => {f => ""}}, {IN => {g => ""}}, |
|
|
{EXIT => 1}, |
|
|
{ERR => "tsort: extra operand 'g'\n" |
|
|
. "Try 'tsort --help' for more information.\n"}], |
|
|
); |
|
|
|
|
|
my $save_temps = $ENV{DEBUG}; |
|
|
my $verbose = $ENV{VERBOSE}; |
|
|
|
|
|
my $prog = 'tsort'; |
|
|
my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose); |
|
|
exit $fail; |
|
|
|