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