OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / lib / bitvector / t / 10__intervals.t
1 #!perl -w
2
3 use strict;
4 no strict "vars";
5
6 use Bit::Vector;
7
8 # ======================================================================
9 #   $set->Interval_Empty($lower,$upper);
10 #   $set->Interval_Fill($lower,$upper);
11 #   $set->Interval_Flip($lower,$upper);
12 #   $set->Interval_Reverse($lower,$upper);
13 #   ($min,$max) = $set->Interval_Scan_inc($start);
14 #   ($min,$max) = $set->Interval_Scan_dec($start);
15 # ======================================================================
16
17 print "1..4024\n";
18
19 $lim = 32768;
20
21 $n = 1;
22
23 $set = new Bit::Vector($lim);
24 $rev = new Bit::Vector($lim);
25 $rev->Primes();
26 $vec = $rev->Clone();
27 $primes = $rev->Norm();
28
29 if ($rev->equal($vec))
30 {print "ok $n\n";} else {print "not ok $n\n";}
31 $n++;
32
33 if ($set->Norm() == 0)
34 {print "ok $n\n";} else {print "not ok $n\n";}
35 $n++;
36 if ($set->Min() > $lim)
37 {print "ok $n\n";} else {print "not ok $n\n";}
38 $n++;
39 if ($set->Max() < -$lim)
40 {print "ok $n\n";} else {print "not ok $n\n";}
41 $n++;
42
43 $set->Fill();
44
45 if ($set->Norm() == $lim)
46 {print "ok $n\n";} else {print "not ok $n\n";}
47 $n++;
48 if ($set->Min() == 0)
49 {print "ok $n\n";} else {print "not ok $n\n";}
50 $n++;
51 if ($set->Max() == $lim-1)
52 {print "ok $n\n";} else {print "not ok $n\n";}
53 $n++;
54
55 $set->Empty();
56
57 if ($set->Norm() == 0)
58 {print "ok $n\n";} else {print "not ok $n\n";}
59 $n++;
60 if ($set->Min() > $lim)
61 {print "ok $n\n";} else {print "not ok $n\n";}
62 $n++;
63 if ($set->Max() < -$lim)
64 {print "ok $n\n";} else {print "not ok $n\n";}
65 $n++;
66
67 $set->Complement($set);
68
69 if ($set->Norm() == $lim)
70 {print "ok $n\n";} else {print "not ok $n\n";}
71 $n++;
72 if ($set->Min() == 0)
73 {print "ok $n\n";} else {print "not ok $n\n";}
74 $n++;
75 if ($set->Max() == $lim-1)
76 {print "ok $n\n";} else {print "not ok $n\n";}
77 $n++;
78
79 $set->Flip();
80
81 if ($set->Norm() == 0)
82 {print "ok $n\n";} else {print "not ok $n\n";}
83 $n++;
84 if ($set->Min() > $lim)
85 {print "ok $n\n";} else {print "not ok $n\n";}
86 $n++;
87 if ($set->Max() < -$lim)
88 {print "ok $n\n";} else {print "not ok $n\n";}
89 $n++;
90
91 test_set_clr(1,14);      test_flip(1,14);      test_rev(1,14);
92 test_set_clr(1,30);      test_flip(1,30);      test_rev(1,30);
93 test_set_clr(1,62);      test_flip(1,62);      test_rev(1,62);
94 test_set_clr(1,126);     test_flip(1,126);     test_rev(1,126);
95 test_set_clr(1,254);     test_flip(1,254);     test_rev(1,254);
96 test_set_clr(1,$lim-2);  test_flip(1,$lim-2);  test_rev(1,$lim-2);
97
98 test_set_clr(0,14);      test_flip(0,14);      test_rev(0,14);
99 test_set_clr(0,30);      test_flip(0,30);      test_rev(0,30);
100 test_set_clr(0,62);      test_flip(0,62);      test_rev(0,62);
101 test_set_clr(0,126);     test_flip(0,126);     test_rev(0,126);
102 test_set_clr(0,254);     test_flip(0,254);     test_rev(0,254);
103 test_set_clr(0,$lim-2);  test_flip(0,$lim-2);  test_rev(0,$lim-2);
104
105 test_set_clr(1,15);      test_flip(1,15);      test_rev(1,15);
106 test_set_clr(1,31);      test_flip(1,31);      test_rev(1,31);
107 test_set_clr(1,63);      test_flip(1,63);      test_rev(1,63);
108 test_set_clr(1,127);     test_flip(1,127);     test_rev(1,127);
109 test_set_clr(1,255);     test_flip(1,255);     test_rev(1,255);
110 test_set_clr(1,$lim-1);  test_flip(1,$lim-1);  test_rev(1,$lim-1);
111
112 test_set_clr(0,15);      test_flip(0,15);      test_rev(0,15);
113 test_set_clr(0,31);      test_flip(0,31);      test_rev(0,31);
114 test_set_clr(0,63);      test_flip(0,63);      test_rev(0,63);
115 test_set_clr(0,127);     test_flip(0,127);     test_rev(0,127);
116 test_set_clr(0,255);     test_flip(0,255);     test_rev(0,255);
117 test_set_clr(0,$lim-1);  test_flip(0,$lim-1);  test_rev(0,$lim-1);
118
119 for ( $i = 0; $i < 256; $i++ )
120 {
121     test_set_clr($i,$i); test_flip($i,$i);
122 }
123
124 eval { $set->Interval_Empty(-1,$lim-1); };
125 if ($@ =~ /[^:]+::[^:]+::Interval_Empty\(\): minimum index out of range/)
126 {print "ok $n\n";} else {print "not ok $n\n";}
127 $n++;
128
129 eval { $set->Interval_Fill(-1,$lim-1); };
130 if ($@ =~ /[^:]+::[^:]+::Interval_Fill\(\): minimum index out of range/)
131 {print "ok $n\n";} else {print "not ok $n\n";}
132 $n++;
133
134 eval { $set->Interval_Flip(-1,$lim-1); };
135 if ($@ =~ /[^:]+::[^:]+::Interval_Flip\(\): minimum index out of range/)
136 {print "ok $n\n";} else {print "not ok $n\n";}
137 $n++;
138
139 eval { $set->Interval_Reverse(-1,$lim-1); };
140 if ($@ =~ /[^:]+::[^:]+::Interval_Reverse\(\): minimum index out of range/)
141 {print "ok $n\n";} else {print "not ok $n\n";}
142 $n++;
143
144 eval { $set->Interval_Empty(0,-1); };
145 if ($@ =~ /[^:]+::[^:]+::Interval_Empty\(\): maximum index out of range/)
146 {print "ok $n\n";} else {print "not ok $n\n";}
147 $n++;
148
149 eval { $set->Interval_Fill(0,-1); };
150 if ($@ =~ /[^:]+::[^:]+::Interval_Fill\(\): maximum index out of range/)
151 {print "ok $n\n";} else {print "not ok $n\n";}
152 $n++;
153
154 eval { $set->Interval_Flip(0,-1); };
155 if ($@ =~ /[^:]+::[^:]+::Interval_Flip\(\): maximum index out of range/)
156 {print "ok $n\n";} else {print "not ok $n\n";}
157 $n++;
158
159 eval { $set->Interval_Reverse(0,-1); };
160 if ($@ =~ /[^:]+::[^:]+::Interval_Reverse\(\): maximum index out of range/)
161 {print "ok $n\n";} else {print "not ok $n\n";}
162 $n++;
163
164 eval { $set->Interval_Empty(1,0); };
165 if ($@ =~ /[^:]+::[^:]+::Interval_Empty\(\): minimum > maximum index/)
166 {print "ok $n\n";} else {print "not ok $n\n";}
167 $n++;
168
169 eval { $set->Interval_Fill(1,0); };
170 if ($@ =~ /[^:]+::[^:]+::Interval_Fill\(\): minimum > maximum index/)
171 {print "ok $n\n";} else {print "not ok $n\n";}
172 $n++;
173
174 eval { $set->Interval_Flip(1,0); };
175 if ($@ =~ /[^:]+::[^:]+::Interval_Flip\(\): minimum > maximum index/)
176 {print "ok $n\n";} else {print "not ok $n\n";}
177 $n++;
178
179 eval { $set->Interval_Reverse(1,0); };
180 if ($@ =~ /[^:]+::[^:]+::Interval_Reverse\(\): minimum > maximum index/)
181 {print "ok $n\n";} else {print "not ok $n\n";}
182 $n++;
183
184 eval { ($min,$max) = $set->Interval_Scan_inc($lim); };
185 if ($@ =~ /[^:]+::[^:]+::Interval_Scan_inc\(\): start index out of range/)
186 {print "ok $n\n";} else {print "not ok $n\n";}
187 $n++;
188
189 eval { ($min,$max) = $set->Interval_Scan_inc(-1); };
190 if ($@ =~ /[^:]+::[^:]+::Interval_Scan_inc\(\): start index out of range/)
191 {print "ok $n\n";} else {print "not ok $n\n";}
192 $n++;
193
194 eval { ($min,$max) = $set->Interval_Scan_dec($lim); };
195 if ($@ =~ /[^:]+::[^:]+::Interval_Scan_dec\(\): start index out of range/)
196 {print "ok $n\n";} else {print "not ok $n\n";}
197 $n++;
198
199 eval { ($min,$max) = $set->Interval_Scan_dec(-1); };
200 if ($@ =~ /[^:]+::[^:]+::Interval_Scan_dec\(\): start index out of range/)
201 {print "ok $n\n";} else {print "not ok $n\n";}
202 $n++;
203
204 exit;
205
206 sub test_set_clr
207 {
208     my($lower,$upper) = @_;
209     my($span) = $upper - $lower + 1;
210
211     $set->Interval_Fill($lower,$upper);
212     if ($set->Norm() == $span)
213     {print "ok $n\n";} else {print "not ok $n\n";}
214     $n++;
215     if (($min,$max) = $set->Interval_Scan_inc(0))
216     {print "ok $n\n";} else {print "not ok $n\n";
217       $min = $set->Min(); $max = $set->Max(); }
218     $n++;
219     if ($min == $lower)
220     {print "ok $n\n";} else {print "not ok $n\n";}
221     $n++;
222     if ($max == $upper)
223     {print "ok $n\n";} else {print "not ok $n\n";}
224     $n++;
225
226     $set->Interval_Empty($lower,$upper);
227     if ($set->Norm() == 0)
228     {print "ok $n\n";} else {print "not ok $n\n";}
229     $n++;
230     if ($set->Min() > $lim)
231     {print "ok $n\n";} else {print "not ok $n\n";}
232     $n++;
233     if ($set->Max() < -$lim)
234     {print "ok $n\n";} else {print "not ok $n\n";}
235     $n++;
236 }
237
238 sub test_flip
239 {
240     my($lower,$upper) = @_;
241     my($span) = $upper - $lower + 1;
242
243     $set->Interval_Flip($lower,$upper);
244     if ($set->Norm() == $span)
245     {print "ok $n\n";} else {print "not ok $n\n";}
246     $n++;
247     if (($min,$max) = $set->Interval_Scan_dec($set->Size()-1))
248     {print "ok $n\n";} else {print "not ok $n\n";
249       $min = $set->Min(); $max = $set->Max(); }
250     $n++;
251     if ($min == $lower)
252     {print "ok $n\n";} else {print "not ok $n\n";}
253     $n++;
254     if ($max == $upper)
255     {print "ok $n\n";} else {print "not ok $n\n";}
256     $n++;
257
258     $set->Interval_Flip($lower,$upper);
259     if ($set->Norm() == 0)
260     {print "ok $n\n";} else {print "not ok $n\n";}
261     $n++;
262     if ($set->Min() > $lim)
263     {print "ok $n\n";} else {print "not ok $n\n";}
264     $n++;
265     if ($set->Max() < -$lim)
266     {print "ok $n\n";} else {print "not ok $n\n";}
267     $n++;
268 }
269
270 sub test_rev
271 {
272     my($lower,$upper) = @_;
273
274     $rev->Interval_Reverse($lower,$upper);
275     if ($rev->Norm() == $primes)
276     {print "ok $n\n";} else {print "not ok $n\n";}
277     $n++;
278     unless ($rev->equal($vec))
279     {print "ok $n\n";} else {print "not ok $n\n";}
280     $n++;
281     $rev->Interval_Reverse($lower,$upper);
282     if ($rev->equal($vec))
283     {print "ok $n\n";} else {print "not ok $n\n";}
284     $n++;
285 }
286
287 __END__
288