Add the following packages libalgorithm-diff-perl libspiffy-perl libtext-diff-perl...
[pkg-perl] / deb-src / libalgorithm-diff-perl / libalgorithm-diff-perl-1.19.02 / t / oo.t
1 # Before `make install' is performed this script should be runnable with
2 # `make test'. After `make install' it should work as `perl oo.t'
3 use strict;
4 BEGIN { $^W++; }
5 use lib qw( blib lib );
6 use Algorithm::Diff qw( compact_diff );
7 use Data::Dumper;
8 use Test qw( plan ok $ntest );
9
10 BEGIN
11 {
12     $|++;
13     plan( tests => 969 );
14     $SIG{__DIE__} = sub # breakpoint on die
15     {
16         $DB::single = 1
17             if  ! $^S;
18         die @_;
19     };
20     $SIG{__WARN__} = sub # breakpoint on warn
21     {
22         $DB::single = 1;
23         warn @_;
24     };
25 }
26
27 sub Ok($$) { @_= reverse @_; goto &ok }
28
29 my( $first, $a, $b, $hunks );
30 for my $pair (
31     [ "a b c   e  h j   l m n p",
32       "  b c d e f  j k l m    r s t", 9 ],
33     [ "", "", 0 ],
34     [ "a b c", "", 1 ],
35     [ "", "a b c d", 1 ],
36     [ "a b", "x y z", 1 ],
37     [ "    c  e   h j   l m n p r",
38       "a b c d f g  j k l m      s t", 7 ],
39     [ "a b c d",
40       "a b c d", 1 ],
41     [ "a     d",
42       "a b c d", 3 ],
43     [ "a b c d",
44       "a     d", 3 ],
45     [ "a b c d",
46       "  b c  ", 3 ],
47     [ "  b c  ",
48       "a b c d", 3 ],
49 ) {
50     $first= $ntest;
51     ( $a, $b, $hunks )= @$pair;
52     my @a = split ' ', $a;
53     my @b = split ' ', $b;
54
55     my $d = Algorithm::Diff->new( \@a, \@b );
56
57     if(  @ARGV  ) {
58         print "1: $a$/2: $b$/";
59         while( $d->Next() ) {
60             printf "%10s %s %s$/",
61                 join(' ',$d->Items(1)),
62                 $d->Same() ? '=' : '|',
63                 join(' ',$d->Items(2));
64         }
65     }
66
67     Ok( 0, $d->Base() );
68     Ok( 0, $d->Base(undef) );
69     Ok( 0, $d->Base(1) );
70     Ok( 1, $d->Base(undef) );
71     Ok( 1, $d->Base(0) );
72
73     ok( ! eval { $d->Diff(); 1 } );
74     ok( $@, qr/\breset\b/i );
75     ok( ! eval { $d->Same(); 1 } );
76     ok( $@, qr/\breset\b/i );
77     ok( ! eval { $d->Items(1); 1 } );
78     ok( $@, qr/\breset\b/i );
79     ok( ! eval { $d->Range(2); 1 } );
80     ok( $@, qr/\breset\b/i );
81     ok( ! eval { $d->Min(1); 1 } );
82     ok( $@, qr/\breset\b/i );
83     ok( ! eval { $d->Max(2); 1 } );
84     ok( $@, qr/\breset\b/i );
85     ok( ! eval { $d->Get('Min1'); 1 } );
86     ok( $@, qr/\breset\b/i );
87
88     ok( ! $d->Next(0) );
89     ok( ! eval { $d->Same(); 1 } );
90     ok( $@, qr/\breset\b/i );
91     Ok( 1, $d->Next() )         if  0 < $hunks;
92     Ok( 2, $d->Next(undef) )    if  1 < $hunks;
93     Ok( 3, $d->Next(1) )        if  2 < $hunks;
94     Ok( 2, $d->Next(-1) )       if  1 < $hunks;
95     ok( ! $d->Next(-2) );
96     ok( ! eval { $d->Same(); 1 } );
97     ok( $@, qr/\breset\b/i );
98
99     ok( ! $d->Prev(0) );
100     ok( ! eval { $d->Same(); 1 } );
101     ok( $@, qr/\breset\b/i );
102     Ok( -1, $d->Prev() )        if  0 < $hunks;
103     Ok( -2, $d->Prev(undef) )   if  1 < $hunks;
104     Ok( -3, $d->Prev(1) )       if  2 < $hunks;
105     Ok( -2, $d->Prev(-1) )      if  1 < $hunks;
106     ok( ! $d->Prev(-2) );
107
108     Ok( 1, $d->Next() )         if  0 < $hunks;
109     ok( ! $d->Prev() );
110     Ok( 1, $d->Next() )         if  0 < $hunks;
111     ok( ! $d->Prev(2) );
112     Ok( -1, $d->Prev() )        if  0 < $hunks;
113     ok( ! $d->Next() );
114     Ok( -1, $d->Prev() )        if  0 < $hunks;
115     ok( ! $d->Next(5) );
116
117     Ok( 1, $d->Next() )         if  0 < $hunks;
118     Ok( $d, $d->Reset() );
119     ok( ! $d->Prev(0) );
120     Ok( 3, $d->Reset(3)->Next(0) )  if  2 < $hunks;
121     Ok( -3, $d->Reset(-2)->Prev() ) if  2 < $hunks;
122     Ok( $hunks || !1, $d->Reset(0)->Next(-1) );
123
124     my $c = $d->Copy();
125     ok( $c->Base(), $d->Base() );
126     ok( $c->Next(0), $d->Next(0) );
127     ok( $d->Copy(-4)->Next(0),
128         $d->Copy()->Reset(-4)->Next(0) );
129
130     $c = $d->Copy( undef, 1 );
131     Ok( 1, $c->Base() );
132     ok( $c->Next(0), $d->Next(0) );
133
134     $d->Reset();
135     my( @A, @B );
136     while( $d->Next() ) {
137         if( $d->Same() ) {
138             Ok( 0, $d->Diff() );
139             ok( $d->Same(), $d->Range(2) );
140             ok( $d->Items(2), $d->Range(1) );
141             ok( "@{[$d->Same()]}",
142                 "@{[$d->Items(1)]}" );
143             ok( "@{[$d->Items(1)]}",
144                 "@{[$d->Items(2)]}" );
145             ok( "@{[$d->Items(2)]}",
146                 "@a[$d->Range(1)]" );
147             ok( "@a[$d->Range(1,0)]",
148                 "@b[$d->Range(2)]" );
149             push @A, $d->Same();
150             push @B, @b[$d->Range(2)];
151         } else {
152             Ok( 0, $d->Same() );
153             ok( $d->Diff() & 1, 1*!!$d->Range(1) );
154             ok( $d->Diff() & 2, 2*!!$d->Range(2) );
155             ok( "@{[$d->Items(1)]}",
156                 "@a[$d->Range(1)]" );
157             ok( "@{[$d->Items(2)]}",
158                 "@b[$d->Range(2,0)]" );
159             push @A, @a[$d->Range(1)];
160             push @B, $d->Items(2);
161         }
162     }
163     ok( "@A", "@a" );
164     ok( "@B", "@b" );
165
166     next   if  ! $hunks;
167
168     Ok( 1, $d->Next() );
169     { local $^W= 0;
170     ok( ! eval { $d->Items(); 1 } ); }
171     ok( ! eval { $d->Items(0); 1 } );
172     { local $^W= 0;
173     ok( ! eval { $d->Range(); 1 } ); }
174     ok( ! eval { $d->Range(3); 1 } );
175     { local $^W= 0;
176     ok( ! eval { $d->Min(); 1 } ); }
177     ok( ! eval { $d->Min(-1); 1 } );
178     { local $^W= 0;
179     ok( ! eval { $d->Max(); 1 } ); }
180     ok( ! eval { $d->Max(9); 1 } );
181
182     $d->Reset(-1);
183     $c= $d->Copy(undef,1);
184     ok( "@a[$d->Range(1)]",
185         "@{[(0,@a)[$c->Range(1)]]}" );
186     ok( "@b[$c->Range(2,0)]",
187         "@{[(0,@b)[$d->Range(2,1)]]}" );
188     ok( "@a[$d->Get('min1')..$d->Get('0Max1')]",
189         "@{[(0,@a)[$d->Get('1MIN1')..$c->Get('MAX1')]]}" );
190
191     ok( "@{[$c->Min(1),$c->Max(2,0)]}",
192         "@{[$c->Get('Min1','0Max2')]}" );
193     ok( ! eval { scalar $c->Get('Min1','0Max2'); 1 } );
194     ok( "@{[0+$d->Same(),$d->Diff(),$d->Base()]}",
195         "@{[$d->Get(qq<same Diff BASE>)]}" );
196     ok( "@{[0+$d->Range(1),0+$d->Range(2)]}",
197         "@{[$d->Get(qq<Range1 rAnGe2>)]}" );
198     { local $^W= 0;
199     ok( ! eval { $c->Get('range'); 1 } );
200     ok( ! eval { $c->Get('min'); 1 } );
201     ok( ! eval { $c->Get('max'); 1 } ); }
202
203 } continue {
204     if(  @ARGV  ) {
205         my $tests= $ntest - $first;
206         print "$hunks hunks, $tests tests.$/";
207     }
208 }
209
210 # $d = Algorithm::Diff->new( \@a, \@b, {KeyGen=>sub...} );
211
212 # @cdiffs = compact_diff( \@seq1, \@seq2 );