OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / lib / bitvector / t / 30_overloaded.t
1 #!perl -w
2
3 use strict;
4 no strict "vars";
5
6 use Bit::Vector::Overload;
7
8 $Bit::Vector::CONFIG[2] = 3;
9
10 # ======================================================================
11 #   test overloaded operators
12 # ======================================================================
13
14 $operator_list{'+='}  = 1;
15 $operator_list{'|='}  = 1;
16 $operator_list{'-='}  = 1;
17 $operator_list{'*='}  = 1;
18 $operator_list{'&='}  = 1;
19 $operator_list{'^='}  = 1;
20 $operator_list{'<<='} = 1;
21 $operator_list{'>>='} = 1;
22 $operator_list{'x='}  = 1;
23 $operator_list{'.='}  = 1;
24
25 $operator_list{'+'}   = 2;
26 $operator_list{'|'}   = 2;
27 $operator_list{'-'}   = 2;
28 $operator_list{'*'}   = 2;
29 $operator_list{'&'}   = 2;
30 $operator_list{'^'}   = 2;
31 $operator_list{'<<'}  = 2;
32 $operator_list{'>>'}  = 2;
33 $operator_list{'x'}   = 2;
34 $operator_list{'.'}   = 2;
35
36 $operator_list{'=='}  = 2;
37 $operator_list{'!='}  = 2;
38 $operator_list{'<'}   = 2;
39 $operator_list{'<='}  = 2;
40 $operator_list{'>'}   = 2;
41 $operator_list{'>='}  = 2;
42 $operator_list{'cmp'} = 2;
43 $operator_list{'eq'}  = 2;
44 $operator_list{'ne'}  = 2;
45 $operator_list{'lt'}  = 2;
46 $operator_list{'le'}  = 2;
47 $operator_list{'gt'}  = 2;
48 $operator_list{'ge'}  = 2;
49
50 print "1..15695\n";
51
52 $n = 1;
53
54 $set = Bit::Vector->new(500);
55 if (abs($set) == 0)
56 {print "ok $n\n";} else {print "not ok $n\n";}
57 $n++;
58 if ($set->Min() >= 500)
59 {print "ok $n\n";} else {print "not ok $n\n";}
60 $n++;
61 if ($set->Max() < 0)
62 {print "ok $n\n";} else {print "not ok $n\n";}
63 $n++;
64 unless ($set)
65 {print "ok $n\n";} else {print "not ok $n\n";}
66 $n++;
67 if (! $set)
68 {print "ok $n\n";} else {print "not ok $n\n";}
69 $n++;
70
71 $set += 0;
72 if (abs($set) == 1)
73 {print "ok $n\n";} else {print "not ok $n\n";}
74 $n++;
75 if ($set->Min() == 0)
76 {print "ok $n\n";} else {print "not ok $n\n";}
77 $n++;
78 if ($set->Max() == 0)
79 {print "ok $n\n";} else {print "not ok $n\n";}
80 $n++;
81 if ($set)
82 {print "ok $n\n";} else {print "not ok $n\n";}
83 $n++;
84 unless (! $set)
85 {print "ok $n\n";} else {print "not ok $n\n";}
86 $n++;
87
88 $set += 1;
89 if (abs($set) == 2)
90 {print "ok $n\n";} else {print "not ok $n\n";}
91 $n++;
92 if ($set->Min() == 0)
93 {print "ok $n\n";} else {print "not ok $n\n";}
94 $n++;
95 if ($set->Max() == 1)
96 {print "ok $n\n";} else {print "not ok $n\n";}
97 $n++;
98 if ($set)
99 {print "ok $n\n";} else {print "not ok $n\n";}
100 $n++;
101 unless (! $set)
102 {print "ok $n\n";} else {print "not ok $n\n";}
103 $n++;
104
105 $set ^= 0;
106 if (abs($set) == 1)
107 {print "ok $n\n";} else {print "not ok $n\n";}
108 $n++;
109 if ($set->Min() == 1)
110 {print "ok $n\n";} else {print "not ok $n\n";}
111 $n++;
112 if ($set->Max() == 1)
113 {print "ok $n\n";} else {print "not ok $n\n";}
114 $n++;
115
116 $set += 400;
117 if (abs($set) == 2)
118 {print "ok $n\n";} else {print "not ok $n\n";}
119 $n++;
120 if ($set->Min() == 1)
121 {print "ok $n\n";} else {print "not ok $n\n";}
122 $n++;
123 if ($set->Max() == 400)
124 {print "ok $n\n";} else {print "not ok $n\n";}
125 $n++;
126
127 $set ^= 0;
128 if (abs($set) == 3)
129 {print "ok $n\n";} else {print "not ok $n\n";}
130 $n++;
131 if ($set->Min() == 0)
132 {print "ok $n\n";} else {print "not ok $n\n";}
133 $n++;
134 if ($set->Max() == 400)
135 {print "ok $n\n";} else {print "not ok $n\n";}
136 $n++;
137
138 $ref = $set;
139 if ($ref == $set)
140 {print "ok $n\n";} else {print "not ok $n\n";}
141 $n++;
142
143 $ref = $set->new(500);
144 if (! $ref)
145 {print "ok $n\n";} else {print "not ok $n\n";}
146 $n++;
147 if ($set)
148 {print "ok $n\n";} else {print "not ok $n\n";}
149 $n++;
150
151 $ref->Copy($set);
152 if ($ref == $set)
153 {print "ok $n\n";} else {print "not ok $n\n";}
154 $n++;
155 if ($ref)
156 {print "ok $n\n";} else {print "not ok $n\n";}
157 $n++;
158
159 $ref = $set + 11;
160 if (abs($ref) == 4)
161 {print "ok $n\n";} else {print "not ok $n\n";}
162 $n++;
163 if ($ref->Min() == 0)
164 {print "ok $n\n";} else {print "not ok $n\n";}
165 $n++;
166 if ($ref->Max() == 400)
167 {print "ok $n\n";} else {print "not ok $n\n";}
168 $n++;
169 if ($ref->bit_test(11))
170 {print "ok $n\n";} else {print "not ok $n\n";}
171 $n++;
172
173 if (!($ref == $set))
174 {print "ok $n\n";} else {print "not ok $n\n";}
175 $n++;
176 if ($ref != $set)
177 {print "ok $n\n";} else {print "not ok $n\n";}
178 $n++;
179 if ($set < $ref)
180 {print "ok $n\n";} else {print "not ok $n\n";}
181 $n++;
182 if ($set <= $ref)
183 {print "ok $n\n";} else {print "not ok $n\n";}
184 $n++;
185 if ($ref > $set)
186 {print "ok $n\n";} else {print "not ok $n\n";}
187 $n++;
188 if ($ref >= $set)
189 {print "ok $n\n";} else {print "not ok $n\n";}
190 $n++;
191
192 $ref = $set + 499;
193 if (abs($ref) == 4)
194 {print "ok $n\n";} else {print "not ok $n\n";}
195 $n++;
196 if ($ref->Min() == 0)
197 {print "ok $n\n";} else {print "not ok $n\n";}
198 $n++;
199 if ($ref->Max() == 499)
200 {print "ok $n\n";} else {print "not ok $n\n";}
201 $n++;
202
203 $ref = $ref - 400;
204 if (abs($ref) == 3)
205 {print "ok $n\n";} else {print "not ok $n\n";}
206 $n++;
207 if ($ref->Min() == 0)
208 {print "ok $n\n";} else {print "not ok $n\n";}
209 $n++;
210 if ($ref->Max() == 499)
211 {print "ok $n\n";} else {print "not ok $n\n";}
212 $n++;
213
214 $ref = $ref - 0;
215 if (abs($ref) == 2)
216 {print "ok $n\n";} else {print "not ok $n\n";}
217 $n++;
218 if ($ref->Min() == 1)
219 {print "ok $n\n";} else {print "not ok $n\n";}
220 $n++;
221 if ($ref->Max() == 499)
222 {print "ok $n\n";} else {print "not ok $n\n";}
223 $n++;
224
225 $ref -= 499;
226 if (abs($ref) == 1)
227 {print "ok $n\n";} else {print "not ok $n\n";}
228 $n++;
229 if ($ref->Min() == 1)
230 {print "ok $n\n";} else {print "not ok $n\n";}
231 $n++;
232 if ($ref->Max() == 1)
233 {print "ok $n\n";} else {print "not ok $n\n";}
234 $n++;
235
236 $ref -= 1;
237 if (abs($ref) == 0)
238 {print "ok $n\n";} else {print "not ok $n\n";}
239 $n++;
240 if ($ref->Min() >= 500)
241 {print "ok $n\n";} else {print "not ok $n\n";}
242 $n++;
243 if ($ref->Max() < 0)
244 {print "ok $n\n";} else {print "not ok $n\n";}
245 $n++;
246
247 $limit = 1000; # some tests below assume this limit to be even!
248
249 $primes = Bit::Vector->new($limit+1);
250 if (! $primes)
251 {print "ok $n\n";} else {print "not ok $n\n";}
252 $n++;
253
254 $primes->Fill();
255 if ($primes)
256 {print "ok $n\n";} else {print "not ok $n\n";}
257 $n++;
258
259 if (abs($primes) == $limit+1)
260 {print "ok $n\n";} else {print "not ok $n\n";}
261 $n++;
262 if ($primes->Min() == 0)
263 {print "ok $n\n";} else {print "not ok $n\n";}
264 $n++;
265 if ($primes->Max() == $limit)
266 {print "ok $n\n";} else {print "not ok $n\n";}
267 $n++;
268
269 $primes -= 0;
270 $primes -= 1;
271
272 for ( $j = 4; $j <= $limit; $j += 2 ) { $primes -= $j; }
273
274 for ( $i = 3; ($j = $i * $i) <= $limit; $i += 2 )
275 {
276     for ( ; $j <= $limit; $j += $i ) { $primes -= $j; }
277 }
278
279 if (abs($primes) == 168)
280 {print "ok $n\n";} else {print "not ok $n\n";}
281 $n++;
282 if ($primes->Min() == 2)
283 {print "ok $n\n";} else {print "not ok $n\n";}
284 $n++;
285 if ($primes->Max() == 997)
286 {print "ok $n\n";} else {print "not ok $n\n";}
287 $n++;
288
289 $odd = $primes->new($limit+1);
290 if (! $odd)
291 {print "ok $n\n";} else {print "not ok $n\n";}
292 $n++;
293
294 for ( $i = 1; $i <= $limit; $i += 2 ) { $odd += $i; }
295
296 if ($odd)
297 {print "ok $n\n";} else {print "not ok $n\n";}
298 $n++;
299
300 if (abs($odd) == $limit/2)
301 {print "ok $n\n";} else {print "not ok $n\n";}
302 $n++;
303 if ($odd->Min() == 1)
304 {print "ok $n\n";} else {print "not ok $n\n";}
305 $n++;
306 if ($odd->Max() == 999)
307 {print "ok $n\n";} else {print "not ok $n\n";}
308 $n++;
309
310 if (!($odd == $primes))
311 {print "ok $n\n";} else {print "not ok $n\n";}
312 $n++;
313 if ($odd != $primes)
314 {print "ok $n\n";} else {print "not ok $n\n";}
315 $n++;
316 if (!($primes < $odd))
317 {print "ok $n\n";} else {print "not ok $n\n";}
318 $n++;
319 if (!($primes <= $odd))
320 {print "ok $n\n";} else {print "not ok $n\n";}
321 $n++;
322 if (!($primes > $odd))
323 {print "ok $n\n";} else {print "not ok $n\n";}
324 $n++;
325 if (!($primes >= $odd))
326 {print "ok $n\n";} else {print "not ok $n\n";}
327 $n++;
328
329 $temp = $primes - $odd;
330 if ($temp == 2)
331 {print "ok $n\n";} else {print "not ok $n\n";}
332 $n++;
333 if (2 == $temp)
334 {print "ok $n\n";} else {print "not ok $n\n";}
335 $n++;
336
337 $odd = $odd + 2;
338 if (abs($odd) == ($limit/2)+1)
339 {print "ok $n\n";} else {print "not ok $n\n";}
340 $n++;
341 if ($odd->Min() == 1)
342 {print "ok $n\n";} else {print "not ok $n\n";}
343 $n++;
344 if ($odd->Max() == 999)
345 {print "ok $n\n";} else {print "not ok $n\n";}
346 $n++;
347 if (!($odd == $primes))
348 {print "ok $n\n";} else {print "not ok $n\n";}
349 $n++;
350 if ($odd != $primes)
351 {print "ok $n\n";} else {print "not ok $n\n";}
352 $n++;
353 if ($primes < $odd)
354 {print "ok $n\n";} else {print "not ok $n\n";}
355 $n++;
356 if ($primes <= $odd)
357 {print "ok $n\n";} else {print "not ok $n\n";}
358 $n++;
359 if (!($primes > $odd))
360 {print "ok $n\n";} else {print "not ok $n\n";}
361 $n++;
362 if (!($primes >= $odd))
363 {print "ok $n\n";} else {print "not ok $n\n";}
364 $n++;
365 if ($odd > $primes)
366 {print "ok $n\n";} else {print "not ok $n\n";}
367 $n++;
368 if ($odd >= $primes)
369 {print "ok $n\n";} else {print "not ok $n\n";}
370 $n++;
371 if (!($odd < $primes))
372 {print "ok $n\n";} else {print "not ok $n\n";}
373 $n++;
374 if (!($odd <= $primes))
375 {print "ok $n\n";} else {print "not ok $n\n";}
376 $n++;
377
378 $temp = $primes * $odd;
379 if ($temp == $primes)
380 {print "ok $n\n";} else {print "not ok $n\n";}
381 $n++;
382
383 $temp = $primes + $odd;
384 if ($temp == $odd)
385 {print "ok $n\n";} else {print "not ok $n\n";}
386 $n++;
387
388 $temp = $primes ^ $odd;
389
390 $xor = $primes->new($limit+1);
391 if (! $xor)
392 {print "ok $n\n";} else {print "not ok $n\n";}
393 $n++;
394
395 $xor->ExclusiveOr($primes,$odd);
396 if ($xor)
397 {print "ok $n\n";} else {print "not ok $n\n";}
398 $n++;
399
400 if ($temp == $xor)
401 {print "ok $n\n";} else {print "not ok $n\n";}
402 $n++;
403 if ($temp->equal($xor))
404 {print "ok $n\n";} else {print "not ok $n\n";}
405 $n++;
406
407 if (23 < $primes)
408 {print "ok $n\n";} else {print "not ok $n\n";}
409 $n++;
410 if (23 <= $primes)
411 {print "ok $n\n";} else {print "not ok $n\n";}
412 $n++;
413 if (!(23 > $primes))
414 {print "ok $n\n";} else {print "not ok $n\n";}
415 $n++;
416 if (!(23 >= $primes))
417 {print "ok $n\n";} else {print "not ok $n\n";}
418 $n++;
419
420 if ($primes > 23)
421 {print "ok $n\n";} else {print "not ok $n\n";}
422 $n++;
423 if ($primes >= 23)
424 {print "ok $n\n";} else {print "not ok $n\n";}
425 $n++;
426 if (!($primes < 23))
427 {print "ok $n\n";} else {print "not ok $n\n";}
428 $n++;
429 if (!($primes <= 23))
430 {print "ok $n\n";} else {print "not ok $n\n";}
431 $n++;
432
433 $temp = ($primes + $odd) - ($primes * $odd);
434
435 if ($temp == $xor)
436 {print "ok $n\n";} else {print "not ok $n\n";}
437 $n++;
438 if ($temp->equal($xor))
439 {print "ok $n\n";} else {print "not ok $n\n";}
440 $n++;
441
442 $even = $xor;
443 $even->Empty();
444 for ( $i = 0; $i <= $limit; $i += 2 ) { $even += $i; }
445
446 if (($primes * $even) == 2)
447 {print "ok $n\n";} else {print "not ok $n\n";}
448 $n++;
449
450 if (($odd * $even) == 2)
451 {print "ok $n\n";} else {print "not ok $n\n";}
452 $n++;
453
454 $full = $temp;
455 $full->Fill();
456 if (($odd + $even) == $full)
457 {print "ok $n\n";} else {print "not ok $n\n";}
458 $n++;
459
460 if (($primes + $even) == ~($odd - $primes))
461 {print "ok $n\n";} else {print "not ok $n\n";}
462 $n++;
463
464 if (($primes + $even) == ~($odd * ~$primes))
465 {print "ok $n\n";} else {print "not ok $n\n";}
466 $n++;
467
468 $set = Bit::Vector->new(500);
469 if (abs($set) == 0)
470 {print "ok $n\n";} else {print "not ok $n\n";}
471 $n++;
472 if ($set->Min() >= 500)
473 {print "ok $n\n";} else {print "not ok $n\n";}
474 $n++;
475 if ($set->Max() < 0)
476 {print "ok $n\n";} else {print "not ok $n\n";}
477 $n++;
478 unless ($set)
479 {print "ok $n\n";} else {print "not ok $n\n";}
480 $n++;
481
482 if (++$set)
483 {print "ok $n\n";} else {print "not ok $n\n";}
484 $n++;
485 if (abs($set) == 1)
486 {print "ok $n\n";} else {print "not ok $n\n";}
487 $n++;
488 if ($set->Min() == 0)
489 {print "ok $n\n";} else {print "not ok $n\n";}
490 $n++;
491 if ($set->Max() == 0)
492 {print "ok $n\n";} else {print "not ok $n\n";}
493 $n++;
494 if ($set)
495 {print "ok $n\n";} else {print "not ok $n\n";}
496 $n++;
497
498 if (++$set)
499 {print "ok $n\n";} else {print "not ok $n\n";}
500 $n++;
501 if (abs($set) == 1)
502 {print "ok $n\n";} else {print "not ok $n\n";}
503 $n++;
504 if ($set->Min() == 1)
505 {print "ok $n\n";} else {print "not ok $n\n";}
506 $n++;
507 if ($set->Max() == 1)
508 {print "ok $n\n";} else {print "not ok $n\n";}
509 $n++;
510 if ($set)
511 {print "ok $n\n";} else {print "not ok $n\n";}
512 $n++;
513
514 if (++$set)
515 {print "ok $n\n";} else {print "not ok $n\n";}
516 $n++;
517 if (abs($set) == 2)
518 {print "ok $n\n";} else {print "not ok $n\n";}
519 $n++;
520 if ($set->Min() == 0)
521 {print "ok $n\n";} else {print "not ok $n\n";}
522 $n++;
523 if ($set->Max() == 1)
524 {print "ok $n\n";} else {print "not ok $n\n";}
525 $n++;
526 if ($set)
527 {print "ok $n\n";} else {print "not ok $n\n";}
528 $n++;
529
530 if (--$set)
531 {print "ok $n\n";} else {print "not ok $n\n";}
532 $n++;
533 if (abs($set) == 1)
534 {print "ok $n\n";} else {print "not ok $n\n";}
535 $n++;
536 if ($set->Min() == 1)
537 {print "ok $n\n";} else {print "not ok $n\n";}
538 $n++;
539 if ($set->Max() == 1)
540 {print "ok $n\n";} else {print "not ok $n\n";}
541 $n++;
542 if ($set)
543 {print "ok $n\n";} else {print "not ok $n\n";}
544 $n++;
545
546 if (--$set)
547 {print "ok $n\n";} else {print "not ok $n\n";}
548 $n++;
549 if (abs($set) == 1)
550 {print "ok $n\n";} else {print "not ok $n\n";}
551 $n++;
552 if ($set->Min() == 0)
553 {print "ok $n\n";} else {print "not ok $n\n";}
554 $n++;
555 if ($set->Max() == 0)
556 {print "ok $n\n";} else {print "not ok $n\n";}
557 $n++;
558 if ($set)
559 {print "ok $n\n";} else {print "not ok $n\n";}
560 $n++;
561
562 unless (--$set)
563 {print "ok $n\n";} else {print "not ok $n\n";}
564 $n++;
565 if (abs($set) == 0)
566 {print "ok $n\n";} else {print "not ok $n\n";}
567 $n++;
568 if ($set->Min() >= 500)
569 {print "ok $n\n";} else {print "not ok $n\n";}
570 $n++;
571 if ($set->Max() < 0)
572 {print "ok $n\n";} else {print "not ok $n\n";}
573 $n++;
574 unless ($set)
575 {print "ok $n\n";} else {print "not ok $n\n";}
576 $n++;
577
578 if (--$set)
579 {print "ok $n\n";} else {print "not ok $n\n";}
580 $n++;
581 if (abs($set) == 500)
582 {print "ok $n\n";} else {print "not ok $n\n";}
583 $n++;
584 if ($set->Min() == 0)
585 {print "ok $n\n";} else {print "not ok $n\n";}
586 $n++;
587 if ($set->Max() == 499)
588 {print "ok $n\n";} else {print "not ok $n\n";}
589 $n++;
590 if ($set)
591 {print "ok $n\n";} else {print "not ok $n\n";}
592 $n++;
593
594 unless (++$set)
595 {print "ok $n\n";} else {print "not ok $n\n";}
596 $n++;
597 if (abs($set) == 0)
598 {print "ok $n\n";} else {print "not ok $n\n";}
599 $n++;
600 if ($set->Min() >= 500)
601 {print "ok $n\n";} else {print "not ok $n\n";}
602 $n++;
603 if ($set->Max() < 0)
604 {print "ok $n\n";} else {print "not ok $n\n";}
605 $n++;
606 unless ($set)
607 {print "ok $n\n";} else {print "not ok $n\n";}
608 $n++;
609
610 $set->Empty();
611 unless ($set++)
612 {print "ok $n\n";} else {print "not ok $n\n";}
613 $n++;
614
615 $set->Empty();
616 if (++$set)
617 {print "ok $n\n";} else {print "not ok $n\n";}
618 $n++;
619
620 $set->Empty();
621 unless ($set--)
622 {print "ok $n\n";} else {print "not ok $n\n";}
623 $n++;
624
625 $set->Empty();
626 if (--$set)
627 {print "ok $n\n";} else {print "not ok $n\n";}
628 $n++;
629
630 $set->Empty();
631 if (($set++)->Norm() == 0)
632 {print "ok $n\n";} else {print "not ok $n\n";}
633 $n++;
634
635 $set->Empty();
636 if ((++$set)->Norm() == 1)
637 {print "ok $n\n";} else {print "not ok $n\n";}
638 $n++;
639
640 $set->Empty();
641 if (($set--)->Norm() == 0)
642 {print "ok $n\n";} else {print "not ok $n\n";}
643 $n++;
644
645 $set->Empty();
646 if ((--$set)->Norm() == 500)
647 {print "ok $n\n";} else {print "not ok $n\n";}
648 $n++;
649
650 if (($primes cmp $odd) == -1)
651 {print "ok $n\n";} else {print "not ok $n\n";}
652 $n++;
653
654 if (($odd cmp $primes) == 1)
655 {print "ok $n\n";} else {print "not ok $n\n";}
656 $n++;
657
658 if ((($odd + $even) cmp $full) == 0)
659 {print "ok $n\n";} else {print "not ok $n\n";}
660 $n++;
661
662 if ((($odd * $even) cmp 2) == 0)
663 {print "ok $n\n";} else {print "not ok $n\n";}
664 $n++;
665
666 if ((2 cmp ($odd * $even)) == 0)
667 {print "ok $n\n";} else {print "not ok $n\n";}
668 $n++;
669
670 if (($odd ^= 2) == ($full - $even))
671 {print "ok $n\n";} else {print "not ok $n\n";}
672 $n++;
673
674 # systematic tests:
675
676 $temp = $odd + $even;
677 if ($temp == $full)
678 {print "ok $n\n";} else {print "not ok $n\n";}
679 $n++;
680
681 $temp->Copy($odd);
682 if ($temp == $odd)
683 {print "ok $n\n";} else {print "not ok $n\n";}
684 $n++;
685
686 $temp += $even;
687 if ($temp == $full)
688 {print "ok $n\n";} else {print "not ok $n\n";}
689 $n++;
690
691 $temp = $odd + 2;
692 if (abs($temp) == abs($odd) + 1)
693 {print "ok $n\n";} else {print "not ok $n\n";}
694 $n++;
695
696 $temp->Copy($odd);
697 $temp += 4;
698 if (abs($temp) == abs($odd) + 1)
699 {print "ok $n\n";} else {print "not ok $n\n";}
700 $n++;
701
702 $temp = $odd | $even;
703 if ($temp == $full)
704 {print "ok $n\n";} else {print "not ok $n\n";}
705 $n++;
706
707 $temp->Copy($odd);
708 if ($temp == $odd)
709 {print "ok $n\n";} else {print "not ok $n\n";}
710 $n++;
711
712 $temp |= $even;
713 if ($temp == $full)
714 {print "ok $n\n";} else {print "not ok $n\n";}
715 $n++;
716
717 $temp = $odd | 2;
718 if (abs($temp) == abs($odd) + 1)
719 {print "ok $n\n";} else {print "not ok $n\n";}
720 $n++;
721
722 $temp->Copy($odd);
723 $temp |= 4;
724 if (abs($temp) == abs($odd) + 1)
725 {print "ok $n\n";} else {print "not ok $n\n";}
726 $n++;
727
728 $temp = $full - $even;
729 if ($temp == $odd)
730 {print "ok $n\n";} else {print "not ok $n\n";}
731 $n++;
732
733 $empty = $temp->new($limit+1);
734
735 $temp -= $odd;
736 if ($temp == $empty)
737 {print "ok $n\n";} else {print "not ok $n\n";}
738 $n++;
739
740 $temp = $even - 2;
741 if (abs($temp) == abs($even) - 1)
742 {print "ok $n\n";} else {print "not ok $n\n";}
743 $n++;
744
745 $temp->Copy($even);
746 if ($temp == $even)
747 {print "ok $n\n";} else {print "not ok $n\n";}
748 $n++;
749
750 $temp -= 8;
751 if (abs($temp) == abs($even) - 1)
752 {print "ok $n\n";} else {print "not ok $n\n";}
753 $n++;
754
755 $temp = $primes * $even;
756 if ($temp == 2)
757 {print "ok $n\n";} else {print "not ok $n\n";}
758 $n++;
759
760 $temp->Copy($primes);
761 if ($temp == $primes)
762 {print "ok $n\n";} else {print "not ok $n\n";}
763 $n++;
764
765 $temp *= $even;
766 if ($temp == 2)
767 {print "ok $n\n";} else {print "not ok $n\n";}
768 $n++;
769
770 $temp = $primes * 2;
771 if ($temp == 2)
772 {print "ok $n\n";} else {print "not ok $n\n";}
773 $n++;
774
775 $temp->Copy($primes);
776 $temp *= 2;
777 if ($temp == 2)
778 {print "ok $n\n";} else {print "not ok $n\n";}
779 $n++;
780
781 $temp = $primes & $even;
782 if ($temp == 2)
783 {print "ok $n\n";} else {print "not ok $n\n";}
784 $n++;
785
786 $temp->Copy($primes);
787 if ($temp == $primes)
788 {print "ok $n\n";} else {print "not ok $n\n";}
789 $n++;
790
791 $temp &= $even;
792 if ($temp == 2)
793 {print "ok $n\n";} else {print "not ok $n\n";}
794 $n++;
795
796 $temp = $primes & 2;
797 if ($temp == 2)
798 {print "ok $n\n";} else {print "not ok $n\n";}
799 $n++;
800
801 $temp->Copy($primes);
802 $temp &= 2;
803 if ($temp == 2)
804 {print "ok $n\n";} else {print "not ok $n\n";}
805 $n++;
806
807 $temp = $odd ^ $even;
808 if ($temp == $full)
809 {print "ok $n\n";} else {print "not ok $n\n";}
810 $n++;
811
812 $temp->Copy($odd);
813 if ($temp == $odd)
814 {print "ok $n\n";} else {print "not ok $n\n";}
815 $n++;
816
817 $temp ^= $even;
818 if ($temp == $full)
819 {print "ok $n\n";} else {print "not ok $n\n";}
820 $n++;
821
822 $temp = $odd ^ 2;
823 if (abs($temp) == abs($odd) + 1)
824 {print "ok $n\n";} else {print "not ok $n\n";}
825 $n++;
826
827 $temp->Copy($odd);
828 $temp ^= 4;
829 if (abs($temp) == abs($odd) + 1)
830 {print "ok $n\n";} else {print "not ok $n\n";}
831 $n++;
832
833 if (($odd cmp $even) == -1)
834 {print "ok $n\n";} else {print "not ok $n\n";}
835 $n++;
836
837 if (($even cmp $odd) == 1)
838 {print "ok $n\n";} else {print "not ok $n\n";}
839 $n++;
840
841 $temp ^= 4;
842 if ($temp == $odd)
843 {print "ok $n\n";} else {print "not ok $n\n";}
844 $n++;
845
846 if (($temp cmp $odd) == 0)
847 {print "ok $n\n";} else {print "not ok $n\n";}
848 $n++;
849
850 if (($odd cmp $temp) == 0)
851 {print "ok $n\n";} else {print "not ok $n\n";}
852 $n++;
853
854 if ($odd eq $temp)
855 {print "ok $n\n";} else {print "not ok $n\n";}
856 $n++;
857
858 if (!($odd ne $temp))
859 {print "ok $n\n";} else {print "not ok $n\n";}
860 $n++;
861
862 if (!($primes eq $odd))
863 {print "ok $n\n";} else {print "not ok $n\n";}
864 $n++;
865
866 if ($primes ne $odd)
867 {print "ok $n\n";} else {print "not ok $n\n";}
868 $n++;
869
870 if ($odd lt $even)
871 {print "ok $n\n";} else {print "not ok $n\n";}
872 $n++;
873
874 if ($odd le $even)
875 {print "ok $n\n";} else {print "not ok $n\n";}
876 $n++;
877
878 if (!($even lt $odd))
879 {print "ok $n\n";} else {print "not ok $n\n";}
880 $n++;
881
882 if (!($even le $odd))
883 {print "ok $n\n";} else {print "not ok $n\n";}
884 $n++;
885
886 if (!($odd gt $even))
887 {print "ok $n\n";} else {print "not ok $n\n";}
888 $n++;
889
890 if (!($odd ge $even))
891 {print "ok $n\n";} else {print "not ok $n\n";}
892 $n++;
893
894 if ($even gt $odd)
895 {print "ok $n\n";} else {print "not ok $n\n";}
896 $n++;
897
898 if ($even ge $odd)
899 {print "ok $n\n";} else {print "not ok $n\n";}
900 $n++;
901
902 # wrong parameter checks:
903
904 $set = Bit::Vector->new(500);
905
906 if ($set->Norm() == 0)
907 {print "ok $n\n";} else {print "not ok $n\n";}
908 $n++;
909
910 $set->Fill();
911
912 if ($set->Norm() == 500)
913 {print "ok $n\n";} else {print "not ok $n\n";}
914 $n++;
915
916 foreach $operator (keys %operator_list)
917 {
918     $parms = $operator_list{$operator};
919
920     $obj = 0x000E9CE0;
921     $fake = \$obj;
922     if (ref($fake) eq 'SCALAR')
923     {print "ok $n\n";} else {print "not ok $n\n";}
924     $n++;
925     &test_fake($parms);
926
927     $fake = [ ];
928     if (ref($fake) eq 'ARRAY')
929     {print "ok $n\n";} else {print "not ok $n\n";}
930     $n++;
931     &test_fake($parms);
932
933     $fake = { };
934     if (ref($fake) eq 'HASH')
935     {print "ok $n\n";} else {print "not ok $n\n";}
936     $n++;
937     &test_fake($parms);
938
939     $fake = sub { };
940     if (ref($fake) eq 'CODE')
941     {print "ok $n\n";} else {print "not ok $n\n";}
942     $n++;
943     &test_fake($parms);
944
945     $obj = { };
946     $fake = \$obj;
947     if (ref($fake) eq 'REF')
948     {print "ok $n\n";} else {print "not ok $n\n";}
949     $n++;
950     &test_fake($parms);
951 }
952
953 # bit shift operator tests:
954
955 foreach $bits (0,1,2,3,4,16,32,61,97,256,257,499,512)
956 {
957     $shift = ($primes << $bits);
958     &verify($bits);
959     $shift = $primes->Clone();
960     $shift <<= $bits;
961     &verify($bits);
962     $shift = ($primes >> $bits);
963     &verify(-$bits);
964     $shift = $primes->Clone();
965     $shift >>= $bits;
966     &verify(-$bits);
967 }
968
969 eval { $shift = (0 << $primes); };
970 if ($@ =~ /\billegal reversed operands in overloaded '<<' operator\b/)
971 {print "ok $n\n";} else {print "not ok $n\n";}
972 $n++;
973
974 eval { $shift = (1 << $primes); };
975 if ($@ =~ /\billegal reversed operands in overloaded '<<' operator\b/)
976 {print "ok $n\n";} else {print "not ok $n\n";}
977 $n++;
978
979 eval { $shift = (0 >> $primes); };
980 if ($@ =~ /\billegal reversed operands in overloaded '>>' operator\b/)
981 {print "ok $n\n";} else {print "not ok $n\n";}
982 $n++;
983
984 eval { $shift = (1 >> $primes); };
985 if ($@ =~ /\billegal reversed operands in overloaded '>>' operator\b/)
986 {print "ok $n\n";} else {print "not ok $n\n";}
987 $n++;
988
989 eval { $shift = (0 x $primes); };
990 if ($@ =~ /\billegal reversed operands in overloaded 'x' operator\b/)
991 {print "ok $n\n";} else {print "not ok $n\n";}
992 $n++;
993
994 eval { $shift = (1 x $primes); };
995 if ($@ =~ /\billegal reversed operands in overloaded 'x' operator\b/)
996 {print "ok $n\n";} else {print "not ok $n\n";}
997 $n++;
998
999 exit;
1000
1001 sub test_fake
1002 {
1003     my($parms) = @_;
1004     my($op,$message);
1005
1006     $op = $operator;
1007     $op =~ s/^[a-wyz]+$/cmp/;
1008
1009     $message = quotemeta("illegal operand type in overloaded '$op' operator");
1010     if ($parms == 1)
1011     {
1012         $action = "\$set $operator \$fake";
1013         eval "$action";
1014         if ($@ =~ /$message/)
1015         {print "ok $n\n";} else {print "not ok $n\n";}
1016         $n++;
1017     }
1018     elsif ($parms == 2)
1019     {
1020         $action = "\$temp = \$set $operator \$fake";
1021         eval "$action";
1022         if ($@ =~ /$message/)
1023         {print "ok $n\n";} else {print "not ok $n\n";}
1024
1025         $n++;
1026         $action = "\$temp = \$fake $operator \$set";
1027         eval "$action";
1028         if ($@ =~ /$message/)
1029         {print "ok $n\n";} else {print "not ok $n)\n";}
1030         $n++;
1031     }
1032     else { }
1033 }
1034
1035 sub verify
1036 {
1037     my($offset) = @_;
1038     my($i,$j);
1039
1040     for ( $i = 0; $i <= $limit; $i++ )
1041     {
1042         if ($primes->contains($i))
1043         {
1044             $j = $i + $offset;
1045             if (($j >= 0) && ($j <= $limit))
1046             {
1047                 if ($shift->contains($j))
1048                 {print "ok $n\n";} else {print "not ok $n\n";}
1049                 $n++;
1050             }
1051         }
1052         if ($shift->contains($i))
1053         {
1054             $j = $i - $offset;
1055             if (($j >= 0) && ($j <= $limit))
1056             {
1057                 if ($primes->contains($j))
1058                 {print "ok $n\n";} else {print "not ok $n\n";}
1059                 $n++;
1060             }
1061         }
1062     }
1063 }
1064
1065 __END__
1066