OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / lib / bitvector / t / 03_operations.t
1 #!perl -w
2
3 use strict;
4 no strict "vars";
5
6 use 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
24 print "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
38 for ( $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
51 for ( $j = 4; $j <= $limit; $j += 2 ) { $set1->Bit_Off($j); }
52
53 for ( $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
64 exit;
65
66 sub 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