1#!perl -w
2
3use strict;
4no strict "vars";
5
6use Bit::Vector;
7
8# ======================================================================
9#   $set->Flip();
10#   $set->Fill();
11#   $set->Empty();
12#   $set->is_empty();
13#   $set->is_full();
14#   $set1->equal($set2);
15#   $set1->subset($set2);
16#   $set1->Union($set2,$set3);
17#   $set1->Intersection($set2,$set3);
18#   $set1->Difference($set2,$set3);
19#   $set1->ExclusiveOr($set2,$set3);
20#   $set1->Complement($set2);
21#   $set1->Copy($set2);
22# ======================================================================
23
24print "1..232\n";
25
26$n = 1;
27
28$limit = 999; # must be odd!
29
30$set0 = new Bit::Vector($limit+1);
31$set1 = new Bit::Vector($limit+1);
32$set2 = new Bit::Vector($limit+1);
33$set3 = new Bit::Vector($limit+1);
34$set4 = new Bit::Vector($limit+1);
35
36$set3->Fill();
37
38for ( $i = 0; $i <= $limit; $i += 2 ) { $set1->Bit_On($i); }
39
40$set2->Copy($set1);
41
42$set2->Flip();
43
44&test;
45
46$set1->Fill();
47
48$set1->Bit_Off(0);
49$set1->Bit_Off(1);
50
51for ( $j = 4; $j <= $limit; $j += 2 ) { $set1->Bit_Off($j); }
52
53for ( $i = 3; ($j = $i * $i) <= $limit; $i += 2 )
54{
55    for ( ; $j <= $limit; $j += $i ) { $set1->Bit_Off($j); }
56}
57
58$set2->Copy($set1);
59
60$set2->Flip();
61
62&test;
63
64exit;
65
66sub test
67{
68    # equal
69
70    if ($set0->equal($set0))
71    {print "ok $n\n";} else {print "not ok $n\n";}
72    $n++;
73    if (! $set0->equal($set1))
74    {print "ok $n\n";} else {print "not ok $n\n";}
75    $n++;
76    if (! $set0->equal($set2))
77    {print "ok $n\n";} else {print "not ok $n\n";}
78    $n++;
79    if (! $set0->equal($set3))
80    {print "ok $n\n";} else {print "not ok $n\n";}
81    $n++;
82    if (! $set1->equal($set0))
83    {print "ok $n\n";} else {print "not ok $n\n";}
84    $n++;
85    if ($set1->equal($set1))
86    {print "ok $n\n";} else {print "not ok $n\n";}
87    $n++;
88    if (! $set1->equal($set2))
89    {print "ok $n\n";} else {print "not ok $n\n";}
90    $n++;
91    if (! $set1->equal($set3))
92    {print "ok $n\n";} else {print "not ok $n\n";}
93    $n++;
94    if (! $set2->equal($set0))
95    {print "ok $n\n";} else {print "not ok $n\n";}
96    $n++;
97    if (! $set2->equal($set1))
98    {print "ok $n\n";} else {print "not ok $n\n";}
99    $n++;
100    if ($set2->equal($set2))
101    {print "ok $n\n";} else {print "not ok $n\n";}
102    $n++;
103    if (! $set2->equal($set3))
104    {print "ok $n\n";} else {print "not ok $n\n";}
105    $n++;
106    if (! $set3->equal($set0))
107    {print "ok $n\n";} else {print "not ok $n\n";}
108    $n++;
109    if (! $set3->equal($set1))
110    {print "ok $n\n";} else {print "not ok $n\n";}
111    $n++;
112    if (! $set3->equal($set2))
113    {print "ok $n\n";} else {print "not ok $n\n";}
114    $n++;
115    if ($set3->equal($set3))
116    {print "ok $n\n";} else {print "not ok $n\n";}
117    $n++;
118
119    # subset
120
121    if ($set0->subset($set0))
122    {print "ok $n\n";} else {print "not ok $n\n";}
123    $n++;
124    if ($set0->subset($set1))
125    {print "ok $n\n";} else {print "not ok $n\n";}
126    $n++;
127    if ($set0->subset($set2))
128    {print "ok $n\n";} else {print "not ok $n\n";}
129    $n++;
130    if ($set0->subset($set3))
131    {print "ok $n\n";} else {print "not ok $n\n";}
132    $n++;
133    if (! $set1->subset($set0))
134    {print "ok $n\n";} else {print "not ok $n\n";}
135    $n++;
136    if ($set1->subset($set1))
137    {print "ok $n\n";} else {print "not ok $n\n";}
138    $n++;
139    if (! $set1->subset($set2))
140    {print "ok $n\n";} else {print "not ok $n\n";}
141    $n++;
142    if ($set1->subset($set3))
143    {print "ok $n\n";} else {print "not ok $n\n";}
144    $n++;
145    if (! $set2->subset($set0))
146    {print "ok $n\n";} else {print "not ok $n\n";}
147    $n++;
148    if (! $set2->subset($set1))
149    {print "ok $n\n";} else {print "not ok $n\n";}
150    $n++;
151    if ($set2->subset($set2))
152    {print "ok $n\n";} else {print "not ok $n\n";}
153    $n++;
154    if ($set2->subset($set3))
155    {print "ok $n\n";} else {print "not ok $n\n";}
156    $n++;
157    if (! $set3->subset($set0))
158    {print "ok $n\n";} else {print "not ok $n\n";}
159    $n++;
160    if (! $set3->subset($set1))
161    {print "ok $n\n";} else {print "not ok $n\n";}
162    $n++;
163    if (! $set3->subset($set2))
164    {print "ok $n\n";} else {print "not ok $n\n";}
165    $n++;
166    if ($set3->subset($set3))
167    {print "ok $n\n";} else {print "not ok $n\n";}
168    $n++;
169
170    # Union
171
172    $set4->Union($set0,$set0);
173    if ($set4->equal($set0))
174    {print "ok $n\n";} else {print "not ok $n\n";}
175    $n++;
176    $set4->Union($set0,$set1);
177    if ($set4->equal($set1))
178    {print "ok $n\n";} else {print "not ok $n\n";}
179    $n++;
180    $set4->Union($set0,$set2);
181    if ($set4->equal($set2))
182    {print "ok $n\n";} else {print "not ok $n\n";}
183    $n++;
184    $set4->Union($set0,$set3);
185    if ($set4->equal($set3))
186    {print "ok $n\n";} else {print "not ok $n\n";}
187    $n++;
188    $set4->Union($set1,$set0);
189    if ($set4->equal($set1))
190    {print "ok $n\n";} else {print "not ok $n\n";}
191    $n++;
192    $set4->Union($set1,$set1);
193    if ($set4->equal($set1))
194    {print "ok $n\n";} else {print "not ok $n\n";}
195    $n++;
196    $set4->Union($set1,$set2);
197    if ($set4->equal($set3))
198    {print "ok $n\n";} else {print "not ok $n\n";}
199    $n++;
200    $set4->Union($set1,$set3);
201    if ($set4->equal($set3))
202    {print "ok $n\n";} else {print "not ok $n\n";}
203    $n++;
204    $set4->Union($set2,$set0);
205    if ($set4->equal($set2))
206    {print "ok $n\n";} else {print "not ok $n\n";}
207    $n++;
208    $set4->Union($set2,$set1);
209    if ($set4->equal($set3))
210    {print "ok $n\n";} else {print "not ok $n\n";}
211    $n++;
212    $set4->Union($set2,$set2);
213    if ($set4->equal($set2))
214    {print "ok $n\n";} else {print "not ok $n\n";}
215    $n++;
216    $set4->Union($set2,$set3);
217    if ($set4->equal($set3))
218    {print "ok $n\n";} else {print "not ok $n\n";}
219    $n++;
220    $set4->Union($set3,$set0);
221    if ($set4->equal($set3))
222    {print "ok $n\n";} else {print "not ok $n\n";}
223    $n++;
224    $set4->Union($set3,$set1);
225    if ($set4->equal($set3))
226    {print "ok $n\n";} else {print "not ok $n\n";}
227    $n++;
228    $set4->Union($set3,$set2);
229    if ($set4->equal($set3))
230    {print "ok $n\n";} else {print "not ok $n\n";}
231    $n++;
232    $set4->Union($set3,$set3);
233    if ($set4->equal($set3))
234    {print "ok $n\n";} else {print "not ok $n\n";}
235    $n++;
236
237    # Intersection
238
239    $set4->Intersection($set0,$set0);
240    if ($set4->equal($set0))
241    {print "ok $n\n";} else {print "not ok $n\n";}
242    $n++;
243    $set4->Intersection($set0,$set1);
244    if ($set4->equal($set0))
245    {print "ok $n\n";} else {print "not ok $n\n";}
246    $n++;
247    $set4->Intersection($set0,$set2);
248    if ($set4->equal($set0))
249    {print "ok $n\n";} else {print "not ok $n\n";}
250    $n++;
251    $set4->Intersection($set0,$set3);
252    if ($set4->equal($set0))
253    {print "ok $n\n";} else {print "not ok $n\n";}
254    $n++;
255    $set4->Intersection($set1,$set0);
256    if ($set4->equal($set0))
257    {print "ok $n\n";} else {print "not ok $n\n";}
258    $n++;
259    $set4->Intersection($set1,$set1);
260    if ($set4->equal($set1))
261    {print "ok $n\n";} else {print "not ok $n\n";}
262    $n++;
263    $set4->Intersection($set1,$set2);
264    if ($set4->equal($set0))
265    {print "ok $n\n";} else {print "not ok $n\n";}
266    $n++;
267    $set4->Intersection($set1,$set3);
268    if ($set4->equal($set1))
269    {print "ok $n\n";} else {print "not ok $n\n";}
270    $n++;
271    $set4->Intersection($set2,$set0);
272    if ($set4->equal($set0))
273    {print "ok $n\n";} else {print "not ok $n\n";}
274    $n++;
275    $set4->Intersection($set2,$set1);
276    if ($set4->equal($set0))
277    {print "ok $n\n";} else {print "not ok $n\n";}
278    $n++;
279    $set4->Intersection($set2,$set2);
280    if ($set4->equal($set2))
281    {print "ok $n\n";} else {print "not ok $n\n";}
282    $n++;
283    $set4->Intersection($set2,$set3);
284    if ($set4->equal($set2))
285    {print "ok $n\n";} else {print "not ok $n\n";}
286    $n++;
287    $set4->Intersection($set3,$set0);
288    if ($set4->equal($set0))
289    {print "ok $n\n";} else {print "not ok $n\n";}
290    $n++;
291    $set4->Intersection($set3,$set1);
292    if ($set4->equal($set1))
293    {print "ok $n\n";} else {print "not ok $n\n";}
294    $n++;
295    $set4->Intersection($set3,$set2);
296    if ($set4->equal($set2))
297    {print "ok $n\n";} else {print "not ok $n\n";}
298    $n++;
299    $set4->Intersection($set3,$set3);
300    if ($set4->equal($set3))
301    {print "ok $n\n";} else {print "not ok $n\n";}
302    $n++;
303
304    # Difference
305
306    $set4->Difference($set0,$set0);
307    if ($set4->equal($set0))
308    {print "ok $n\n";} else {print "not ok $n\n";}
309    $n++;
310    $set4->Difference($set0,$set1);
311    if ($set4->equal($set0))
312    {print "ok $n\n";} else {print "not ok $n\n";}
313    $n++;
314    $set4->Difference($set0,$set2);
315    if ($set4->equal($set0))
316    {print "ok $n\n";} else {print "not ok $n\n";}
317    $n++;
318    $set4->Difference($set0,$set3);
319    if ($set4->equal($set0))
320    {print "ok $n\n";} else {print "not ok $n\n";}
321    $n++;
322    $set4->Difference($set1,$set0);
323    if ($set4->equal($set1))
324    {print "ok $n\n";} else {print "not ok $n\n";}
325    $n++;
326    $set4->Difference($set1,$set1);
327    if ($set4->equal($set0))
328    {print "ok $n\n";} else {print "not ok $n\n";}
329    $n++;
330    $set4->Difference($set1,$set2);
331    if ($set4->equal($set1))
332    {print "ok $n\n";} else {print "not ok $n\n";}
333    $n++;
334    $set4->Difference($set1,$set3);
335    if ($set4->equal($set0))
336    {print "ok $n\n";} else {print "not ok $n\n";}
337    $n++;
338    $set4->Difference($set2,$set0);
339    if ($set4->equal($set2))
340    {print "ok $n\n";} else {print "not ok $n\n";}
341    $n++;
342    $set4->Difference($set2,$set1);
343    if ($set4->equal($set2))
344    {print "ok $n\n";} else {print "not ok $n\n";}
345    $n++;
346    $set4->Difference($set2,$set2);
347    if ($set4->equal($set0))
348    {print "ok $n\n";} else {print "not ok $n\n";}
349    $n++;
350    $set4->Difference($set2,$set3);
351    if ($set4->equal($set0))
352    {print "ok $n\n";} else {print "not ok $n\n";}
353    $n++;
354    $set4->Difference($set3,$set0);
355    if ($set4->equal($set3))
356    {print "ok $n\n";} else {print "not ok $n\n";}
357    $n++;
358    $set4->Difference($set3,$set1);
359    if ($set4->equal($set2))
360    {print "ok $n\n";} else {print "not ok $n\n";}
361    $n++;
362    $set4->Difference($set3,$set2);
363    if ($set4->equal($set1))
364    {print "ok $n\n";} else {print "not ok $n\n";}
365    $n++;
366    $set4->Difference($set3,$set3);
367    if ($set4->equal($set0))
368    {print "ok $n\n";} else {print "not ok $n\n";}
369    $n++;
370
371    # ExclusiveOr
372
373    $set4->ExclusiveOr($set0,$set0);
374    if ($set4->equal($set0))
375    {print "ok $n\n";} else {print "not ok $n\n";}
376    $n++;
377    $set4->ExclusiveOr($set0,$set1);
378    if ($set4->equal($set1))
379    {print "ok $n\n";} else {print "not ok $n\n";}
380    $n++;
381    $set4->ExclusiveOr($set0,$set2);
382    if ($set4->equal($set2))
383    {print "ok $n\n";} else {print "not ok $n\n";}
384    $n++;
385    $set4->ExclusiveOr($set0,$set3);
386    if ($set4->equal($set3))
387    {print "ok $n\n";} else {print "not ok $n\n";}
388    $n++;
389    $set4->ExclusiveOr($set1,$set0);
390    if ($set4->equal($set1))
391    {print "ok $n\n";} else {print "not ok $n\n";}
392    $n++;
393    $set4->ExclusiveOr($set1,$set1);
394    if ($set4->equal($set0))
395    {print "ok $n\n";} else {print "not ok $n\n";}
396    $n++;
397    $set4->ExclusiveOr($set1,$set2);
398    if ($set4->equal($set3))
399    {print "ok $n\n";} else {print "not ok $n\n";}
400    $n++;
401    $set4->ExclusiveOr($set1,$set3);
402    if ($set4->equal($set2))
403    {print "ok $n\n";} else {print "not ok $n\n";}
404    $n++;
405    $set4->ExclusiveOr($set2,$set0);
406    if ($set4->equal($set2))
407    {print "ok $n\n";} else {print "not ok $n\n";}
408    $n++;
409    $set4->ExclusiveOr($set2,$set1);
410    if ($set4->equal($set3))
411    {print "ok $n\n";} else {print "not ok $n\n";}
412    $n++;
413    $set4->ExclusiveOr($set2,$set2);
414    if ($set4->equal($set0))
415    {print "ok $n\n";} else {print "not ok $n\n";}
416    $n++;
417    $set4->ExclusiveOr($set2,$set3);
418    if ($set4->equal($set1))
419    {print "ok $n\n";} else {print "not ok $n\n";}
420    $n++;
421    $set4->ExclusiveOr($set3,$set0);
422    if ($set4->equal($set3))
423    {print "ok $n\n";} else {print "not ok $n\n";}
424    $n++;
425    $set4->ExclusiveOr($set3,$set1);
426    if ($set4->equal($set2))
427    {print "ok $n\n";} else {print "not ok $n\n";}
428    $n++;
429    $set4->ExclusiveOr($set3,$set2);
430    if ($set4->equal($set1))
431    {print "ok $n\n";} else {print "not ok $n\n";}
432    $n++;
433    $set4->ExclusiveOr($set3,$set3);
434    if ($set4->equal($set0))
435    {print "ok $n\n";} else {print "not ok $n\n";}
436    $n++;
437
438    # Complement
439
440    $set4->Complement($set0);
441    if ($set4->equal($set3))
442    {print "ok $n\n";} else {print "not ok $n\n";}
443    $n++;
444    $set4->Complement($set1);
445    if ($set4->equal($set2))
446    {print "ok $n\n";} else {print "not ok $n\n";}
447    $n++;
448    $set4->Complement($set2);
449    if ($set4->equal($set1))
450    {print "ok $n\n";} else {print "not ok $n\n";}
451    $n++;
452    $set4->Complement($set3);
453    if ($set4->equal($set0))
454    {print "ok $n\n";} else {print "not ok $n\n";}
455    $n++;
456
457    # Copy
458
459    $set4->Copy($set0);
460    if ($set4->equal($set0))
461    {print "ok $n\n";} else {print "not ok $n\n";}
462    $n++;
463    $set4->Copy($set1);
464    if ($set4->equal($set1))
465    {print "ok $n\n";} else {print "not ok $n\n";}
466    $n++;
467    $set4->Copy($set2);
468    if ($set4->equal($set2))
469    {print "ok $n\n";} else {print "not ok $n\n";}
470    $n++;
471    $set4->Copy($set3);
472    if ($set4->equal($set3))
473    {print "ok $n\n";} else {print "not ok $n\n";}
474    $n++;
475
476    # in-place:
477
478    $set4->Copy($set1);
479    $set4->Union($set2,$set4);
480    if ($set4->equal($set3))
481    {print "ok $n\n";} else {print "not ok $n\n";}
482    $n++;
483    $set4->Copy($set2);
484    $set4->Union($set4,$set1);
485    if ($set4->equal($set3))
486    {print "ok $n\n";} else {print "not ok $n\n";}
487    $n++;
488
489    $set4->Copy($set3);
490    $set4->Intersection($set1,$set4);
491    if ($set4->equal($set1))
492    {print "ok $n\n";} else {print "not ok $n\n";}
493    $n++;
494    $set4->Copy($set3);
495    $set4->Intersection($set4,$set2);
496    if ($set4->equal($set2))
497    {print "ok $n\n";} else {print "not ok $n\n";}
498    $n++;
499
500    $set4->Copy($set3);
501    $set4->Difference($set4,$set2);
502    if ($set4->equal($set1))
503    {print "ok $n\n";} else {print "not ok $n\n";}
504    $n++;
505    $set4->Copy($set3);
506    $set4->Difference($set2,$set4);
507    if ($set4->equal($set0))
508    {print "ok $n\n";} else {print "not ok $n\n";}
509    $n++;
510
511    $set4->Copy($set1);
512    $set4->ExclusiveOr($set4,$set3);
513    if ($set4->equal($set2))
514    {print "ok $n\n";} else {print "not ok $n\n";}
515    $n++;
516    $set4->Copy($set2);
517    $set4->ExclusiveOr($set1,$set4);
518    if ($set4->equal($set3))
519    {print "ok $n\n";} else {print "not ok $n\n";}
520    $n++;
521
522    $set4->Copy($set1);
523    $set4->Complement($set4);
524    if ($set4->equal($set2))
525    {print "ok $n\n";} else {print "not ok $n\n";}
526    $n++;
527    $set4->Copy($set3);
528    $set4->Complement($set4);
529    if ($set4->equal($set0))
530    {print "ok $n\n";} else {print "not ok $n\n";}
531    $n++;
532
533    $set4->Copy($set1);
534    $set4->Copy($set4);
535    if ($set4->equal($set1))
536    {print "ok $n\n";} else {print "not ok $n\n";}
537    $n++;
538    $set4->Copy($set2);
539    $set4->Copy($set4);
540    if ($set4->equal($set2))
541    {print "ok $n\n";} else {print "not ok $n\n";}
542    $n++;
543}
544
545__END__
546
547