1{$mode objfpc} 2 3program tbsx2; 4 5function test_byte: boolean; 6var 7 f,r: byte; 8begin 9 f:=BsfByte($07); 10 if f<>0 then 11 begin 12 writeln('BsfByte($07) returned ',f,', should be 0'); 13 exit(false); 14 end; 15 f:=BsrByte($01); 16 if f<>0 then 17 begin 18 writeln('BsrByte($01) returned ',f,', should be 0'); 19 exit(false); 20 end; 21 f:=BsfByte($0E); 22 if f<>1 then 23 begin 24 writeln('BsfByte($0E) returned ',f,', should be 1'); 25 exit(false); 26 end; 27 f:=BsrByte($03); 28 if f<>1 then 29 begin 30 writeln('BsrByte($03) returned ',f,', should be 1'); 31 exit(false); 32 end; 33 f:=BsfByte($14); 34 if f<>2 then 35 begin 36 writeln('BsfByte($14) returned ',f,', should be 2'); 37 exit(false); 38 end; 39 f:=BsrByte($06); 40 if f<>2 then 41 begin 42 writeln('BsrByte($06) returned ',f,', should be 2'); 43 exit(false); 44 end; 45 f:=BsfByte($28); 46 if f<>3 then 47 begin 48 writeln('BsfByte($28) returned ',f,', should be 3'); 49 exit(false); 50 end; 51 f:=BsrByte($0B); 52 if f<>3 then 53 begin 54 writeln('BsrByte($0B) returned ',f,', should be 3'); 55 exit(false); 56 end; 57 f:=BsfByte($30); 58 if f<>4 then 59 begin 60 writeln('BsfByte($30) returned ',f,', should be 4'); 61 exit(false); 62 end; 63 f:=BsrByte($14); 64 if f<>4 then 65 begin 66 writeln('BsrByte($14) returned ',f,', should be 4'); 67 exit(false); 68 end; 69 f:=BsfByte($60); 70 if f<>5 then 71 begin 72 writeln('BsfByte($60) returned ',f,', should be 5'); 73 exit(false); 74 end; 75 f:=BsrByte($25); 76 if f<>5 then 77 begin 78 writeln('BsrByte($25) returned ',f,', should be 5'); 79 exit(false); 80 end; 81 f:=BsfByte($40); 82 if f<>6 then 83 begin 84 writeln('BsfByte($40) returned ',f,', should be 6'); 85 exit(false); 86 end; 87 f:=BsrByte($46); 88 if f<>6 then 89 begin 90 writeln('BsrByte($46) returned ',f,', should be 6'); 91 exit(false); 92 end; 93 f:=BsfByte($80); 94 if f<>7 then 95 begin 96 writeln('BsfByte($80) returned ',f,', should be 7'); 97 exit(false); 98 end; 99 f:=BsrByte($87); 100 if f<>7 then 101 begin 102 writeln('BsrByte($87) returned ',f,', should be 7'); 103 exit(false); 104 end; 105 106 f:=BsfByte(0); 107 if (f<>$ff) then 108 begin 109 writeln('BsfByte(0) returned ',f,', should be ',$ff); 110 exit(false); 111 end; 112 r:=BsrByte(0); 113 if r<>$ff then 114 begin 115 writeln('BsrByte(0) returned ',r,', should be ',$ff); 116 exit(false); 117 end; 118 result:=true; 119end; 120 121function test_word: boolean; 122var 123 f,r: integer; 124begin 125 f:=BsfWord(15); 126 if f<>0 then 127 begin 128 writeln('BsfWord(15) returned ',f,', should be 0'); 129 exit(false); 130 end; 131 f:=BsrWord(1); 132 if f<>0 then 133 begin 134 writeln('BsrWord(1) returned ',f,', should be 0'); 135 exit(false); 136 end; 137 f:=BsfWord(30); 138 if f<>1 then 139 begin 140 writeln('BsfWord(30) returned ',f,', should be 1'); 141 exit(false); 142 end; 143 f:=BsrWord(3); 144 if f<>1 then 145 begin 146 writeln('BsrWord(3) returned ',f,', should be 1'); 147 exit(false); 148 end; 149 f:=BsfWord(52); 150 if f<>2 then 151 begin 152 writeln('BsfWord(52) returned ',f,', should be 2'); 153 exit(false); 154 end; 155 f:=BsrWord(6); 156 if f<>2 then 157 begin 158 writeln('BsrWord(6) returned ',f,', should be 2'); 159 exit(false); 160 end; 161 f:=BsfWord(104); 162 if f<>3 then 163 begin 164 writeln('BsfWord(104) returned ',f,', should be 3'); 165 exit(false); 166 end; 167 f:=BsrWord(11); 168 if f<>3 then 169 begin 170 writeln('BsrWord(11) returned ',f,', should be 3'); 171 exit(false); 172 end; 173 f:=BsfWord(176); 174 if f<>4 then 175 begin 176 writeln('BsfWord(176) returned ',f,', should be 4'); 177 exit(false); 178 end; 179 f:=BsrWord(20); 180 if f<>4 then 181 begin 182 writeln('BsrWord(20) returned ',f,', should be 4'); 183 exit(false); 184 end; 185 f:=BsfWord(352); 186 if f<>5 then 187 begin 188 writeln('BsfWord(352) returned ',f,', should be 5'); 189 exit(false); 190 end; 191 f:=BsrWord(37); 192 if f<>5 then 193 begin 194 writeln('BsrWord(37) returned ',f,', should be 5'); 195 exit(false); 196 end; 197 f:=BsfWord(576); 198 if f<>6 then 199 begin 200 writeln('BsfWord(576) returned ',f,', should be 6'); 201 exit(false); 202 end; 203 f:=BsrWord(70); 204 if f<>6 then 205 begin 206 writeln('BsrWord(70) returned ',f,', should be 6'); 207 exit(false); 208 end; 209 f:=BsfWord(1152); 210 if f<>7 then 211 begin 212 writeln('BsfWord(1152) returned ',f,', should be 7'); 213 exit(false); 214 end; 215 f:=BsrWord(135); 216 if f<>7 then 217 begin 218 writeln('BsrWord(135) returned ',f,', should be 7'); 219 exit(false); 220 end; 221 f:=BsfWord(1792); 222 if f<>8 then 223 begin 224 writeln('BsfWord(1792) returned ',f,', should be 8'); 225 exit(false); 226 end; 227 f:=BsrWord(264); 228 if f<>8 then 229 begin 230 writeln('BsrWord(264) returned ',f,', should be 8'); 231 exit(false); 232 end; 233 f:=BsfWord(3584); 234 if f<>9 then 235 begin 236 writeln('BsfWord(3584) returned ',f,', should be 9'); 237 exit(false); 238 end; 239 f:=BsrWord(521); 240 if f<>9 then 241 begin 242 writeln('BsrWord(521) returned ',f,', should be 9'); 243 exit(false); 244 end; 245 f:=BsfWord(5120); 246 if f<>10 then 247 begin 248 writeln('BsfWord(5120) returned ',f,', should be 10'); 249 exit(false); 250 end; 251 f:=BsrWord(1034); 252 if f<>10 then 253 begin 254 writeln('BsrWord(1034) returned ',f,', should be 10'); 255 exit(false); 256 end; 257 f:=BsfWord(10240); 258 if f<>11 then 259 begin 260 writeln('BsfWord(10240) returned ',f,', should be 11'); 261 exit(false); 262 end; 263 f:=BsrWord(2059); 264 if f<>11 then 265 begin 266 writeln('BsrWord(2059) returned ',f,', should be 11'); 267 exit(false); 268 end; 269 f:=BsfWord(12288); 270 if f<>12 then 271 begin 272 writeln('BsfWord(12288) returned ',f,', should be 12'); 273 exit(false); 274 end; 275 f:=BsrWord(4108); 276 if f<>12 then 277 begin 278 writeln('BsrWord(4108) returned ',f,', should be 12'); 279 exit(false); 280 end; 281 f:=BsfWord(24576); 282 if f<>13 then 283 begin 284 writeln('BsfWord(24576) returned ',f,', should be 13'); 285 exit(false); 286 end; 287 f:=BsrWord(8205); 288 if f<>13 then 289 begin 290 writeln('BsrWord(8205) returned ',f,', should be 13'); 291 exit(false); 292 end; 293 f:=BsfWord(16384); 294 if f<>14 then 295 begin 296 writeln('BsfWord(16384) returned ',f,', should be 14'); 297 exit(false); 298 end; 299 f:=BsrWord(16398); 300 if f<>14 then 301 begin 302 writeln('BsrWord(16398) returned ',f,', should be 14'); 303 exit(false); 304 end; 305 f:=BsfWord(32768); 306 if f<>15 then 307 begin 308 writeln('BsfWord(32768) returned ',f,', should be 15'); 309 exit(false); 310 end; 311 f:=BsrWord(32783); 312 if f<>15 then 313 begin 314 writeln('BsrWord(32783) returned ',f,', should be 15'); 315 exit(false); 316 end; 317 318 f:=BsfWord(0); 319 if (f<>$ff) then 320 begin 321 writeln('BsfWord(0) returned ',f,', should be ',$ff); 322 exit(false); 323 end; 324 r:=BsrWord(0); 325 if r<>$ff then 326 begin 327 writeln('BsrWord(0) returned ',r,', should be ',$ff); 328 exit(false); 329 end; 330 result:=true; 331end; 332 333function test_dword: boolean; 334var 335 f,r: integer; 336begin 337 f:=BsfDWord(31); 338 if f<>0 then 339 begin 340 writeln('BsfDWord(31) returned ',f,', should be 0'); 341 exit(false); 342 end; 343 f:=BsrDWord(1); 344 if f<>0 then 345 begin 346 writeln('BsrDWord(1) returned ',f,', should be 0'); 347 exit(false); 348 end; 349 f:=BsfDWord(62); 350 if f<>1 then 351 begin 352 writeln('BsfDWord(62) returned ',f,', should be 1'); 353 exit(false); 354 end; 355 f:=BsrDWord(3); 356 if f<>1 then 357 begin 358 writeln('BsrDWord(3) returned ',f,', should be 1'); 359 exit(false); 360 end; 361 f:=BsfDWord(116); 362 if f<>2 then 363 begin 364 writeln('BsfDWord(116) returned ',f,', should be 2'); 365 exit(false); 366 end; 367 f:=BsrDWord(6); 368 if f<>2 then 369 begin 370 writeln('BsrDWord(6) returned ',f,', should be 2'); 371 exit(false); 372 end; 373 f:=BsfDWord(232); 374 if f<>3 then 375 begin 376 writeln('BsfDWord(232) returned ',f,', should be 3'); 377 exit(false); 378 end; 379 f:=BsrDWord(11); 380 if f<>3 then 381 begin 382 writeln('BsrDWord(11) returned ',f,', should be 3'); 383 exit(false); 384 end; 385 f:=BsfDWord(432); 386 if f<>4 then 387 begin 388 writeln('BsfDWord(432) returned ',f,', should be 4'); 389 exit(false); 390 end; 391 f:=BsrDWord(20); 392 if f<>4 then 393 begin 394 writeln('BsrDWord(20) returned ',f,', should be 4'); 395 exit(false); 396 end; 397 f:=BsfDWord(864); 398 if f<>5 then 399 begin 400 writeln('BsfDWord(864) returned ',f,', should be 5'); 401 exit(false); 402 end; 403 f:=BsrDWord(37); 404 if f<>5 then 405 begin 406 writeln('BsrDWord(37) returned ',f,', should be 5'); 407 exit(false); 408 end; 409 f:=BsfDWord(1600); 410 if f<>6 then 411 begin 412 writeln('BsfDWord(1600) returned ',f,', should be 6'); 413 exit(false); 414 end; 415 f:=BsrDWord(70); 416 if f<>6 then 417 begin 418 writeln('BsrDWord(70) returned ',f,', should be 6'); 419 exit(false); 420 end; 421 f:=BsfDWord(3200); 422 if f<>7 then 423 begin 424 writeln('BsfDWord(3200) returned ',f,', should be 7'); 425 exit(false); 426 end; 427 f:=BsrDWord(135); 428 if f<>7 then 429 begin 430 writeln('BsrDWord(135) returned ',f,', should be 7'); 431 exit(false); 432 end; 433 f:=BsfDWord(5888); 434 if f<>8 then 435 begin 436 writeln('BsfDWord(5888) returned ',f,', should be 8'); 437 exit(false); 438 end; 439 f:=BsrDWord(264); 440 if f<>8 then 441 begin 442 writeln('BsrDWord(264) returned ',f,', should be 8'); 443 exit(false); 444 end; 445 f:=BsfDWord(11776); 446 if f<>9 then 447 begin 448 writeln('BsfDWord(11776) returned ',f,', should be 9'); 449 exit(false); 450 end; 451 f:=BsrDWord(521); 452 if f<>9 then 453 begin 454 writeln('BsrDWord(521) returned ',f,', should be 9'); 455 exit(false); 456 end; 457 f:=BsfDWord(21504); 458 if f<>10 then 459 begin 460 writeln('BsfDWord(21504) returned ',f,', should be 10'); 461 exit(false); 462 end; 463 f:=BsrDWord(1034); 464 if f<>10 then 465 begin 466 writeln('BsrDWord(1034) returned ',f,', should be 10'); 467 exit(false); 468 end; 469 f:=BsfDWord(43008); 470 if f<>11 then 471 begin 472 writeln('BsfDWord(43008) returned ',f,', should be 11'); 473 exit(false); 474 end; 475 f:=BsrDWord(2059); 476 if f<>11 then 477 begin 478 writeln('BsrDWord(2059) returned ',f,', should be 11'); 479 exit(false); 480 end; 481 f:=BsfDWord(77824); 482 if f<>12 then 483 begin 484 writeln('BsfDWord(77824) returned ',f,', should be 12'); 485 exit(false); 486 end; 487 f:=BsrDWord(4108); 488 if f<>12 then 489 begin 490 writeln('BsrDWord(4108) returned ',f,', should be 12'); 491 exit(false); 492 end; 493 f:=BsfDWord(155648); 494 if f<>13 then 495 begin 496 writeln('BsfDWord(155648) returned ',f,', should be 13'); 497 exit(false); 498 end; 499 f:=BsrDWord(8205); 500 if f<>13 then 501 begin 502 writeln('BsrDWord(8205) returned ',f,', should be 13'); 503 exit(false); 504 end; 505 f:=BsfDWord(278528); 506 if f<>14 then 507 begin 508 writeln('BsfDWord(278528) returned ',f,', should be 14'); 509 exit(false); 510 end; 511 f:=BsrDWord(16398); 512 if f<>14 then 513 begin 514 writeln('BsrDWord(16398) returned ',f,', should be 14'); 515 exit(false); 516 end; 517 f:=BsfDWord(557056); 518 if f<>15 then 519 begin 520 writeln('BsfDWord(557056) returned ',f,', should be 15'); 521 exit(false); 522 end; 523 f:=BsrDWord(32783); 524 if f<>15 then 525 begin 526 writeln('BsrDWord(32783) returned ',f,', should be 15'); 527 exit(false); 528 end; 529 f:=BsfDWord(983040); 530 if f<>16 then 531 begin 532 writeln('BsfDWord(983040) returned ',f,', should be 16'); 533 exit(false); 534 end; 535 f:=BsrDWord(65552); 536 if f<>16 then 537 begin 538 writeln('BsrDWord(65552) returned ',f,', should be 16'); 539 exit(false); 540 end; 541 f:=BsfDWord(1966080); 542 if f<>17 then 543 begin 544 writeln('BsfDWord(1966080) returned ',f,', should be 17'); 545 exit(false); 546 end; 547 f:=BsrDWord(131089); 548 if f<>17 then 549 begin 550 writeln('BsrDWord(131089) returned ',f,', should be 17'); 551 exit(false); 552 end; 553 f:=BsfDWord(3407872); 554 if f<>18 then 555 begin 556 writeln('BsfDWord(3407872) returned ',f,', should be 18'); 557 exit(false); 558 end; 559 f:=BsrDWord(262162); 560 if f<>18 then 561 begin 562 writeln('BsrDWord(262162) returned ',f,', should be 18'); 563 exit(false); 564 end; 565 f:=BsfDWord(6815744); 566 if f<>19 then 567 begin 568 writeln('BsfDWord(6815744) returned ',f,', should be 19'); 569 exit(false); 570 end; 571 f:=BsrDWord(524307); 572 if f<>19 then 573 begin 574 writeln('BsrDWord(524307) returned ',f,', should be 19'); 575 exit(false); 576 end; 577 f:=BsfDWord(11534336); 578 if f<>20 then 579 begin 580 writeln('BsfDWord(11534336) returned ',f,', should be 20'); 581 exit(false); 582 end; 583 f:=BsrDWord(1048596); 584 if f<>20 then 585 begin 586 writeln('BsrDWord(1048596) returned ',f,', should be 20'); 587 exit(false); 588 end; 589 f:=BsfDWord(23068672); 590 if f<>21 then 591 begin 592 writeln('BsfDWord(23068672) returned ',f,', should be 21'); 593 exit(false); 594 end; 595 f:=BsrDWord(2097173); 596 if f<>21 then 597 begin 598 writeln('BsrDWord(2097173) returned ',f,', should be 21'); 599 exit(false); 600 end; 601 f:=BsfDWord(37748736); 602 if f<>22 then 603 begin 604 writeln('BsfDWord(37748736) returned ',f,', should be 22'); 605 exit(false); 606 end; 607 f:=BsrDWord(4194326); 608 if f<>22 then 609 begin 610 writeln('BsrDWord(4194326) returned ',f,', should be 22'); 611 exit(false); 612 end; 613 f:=BsfDWord(75497472); 614 if f<>23 then 615 begin 616 writeln('BsfDWord(75497472) returned ',f,', should be 23'); 617 exit(false); 618 end; 619 f:=BsrDWord(8388631); 620 if f<>23 then 621 begin 622 writeln('BsrDWord(8388631) returned ',f,', should be 23'); 623 exit(false); 624 end; 625 f:=BsfDWord(117440512); 626 if f<>24 then 627 begin 628 writeln('BsfDWord(117440512) returned ',f,', should be 24'); 629 exit(false); 630 end; 631 f:=BsrDWord(16777240); 632 if f<>24 then 633 begin 634 writeln('BsrDWord(16777240) returned ',f,', should be 24'); 635 exit(false); 636 end; 637 f:=BsfDWord(234881024); 638 if f<>25 then 639 begin 640 writeln('BsfDWord(234881024) returned ',f,', should be 25'); 641 exit(false); 642 end; 643 f:=BsrDWord(33554457); 644 if f<>25 then 645 begin 646 writeln('BsrDWord(33554457) returned ',f,', should be 25'); 647 exit(false); 648 end; 649 f:=BsfDWord(335544320); 650 if f<>26 then 651 begin 652 writeln('BsfDWord(335544320) returned ',f,', should be 26'); 653 exit(false); 654 end; 655 f:=BsrDWord(67108890); 656 if f<>26 then 657 begin 658 writeln('BsrDWord(67108890) returned ',f,', should be 26'); 659 exit(false); 660 end; 661 f:=BsfDWord(671088640); 662 if f<>27 then 663 begin 664 writeln('BsfDWord(671088640) returned ',f,', should be 27'); 665 exit(false); 666 end; 667 f:=BsrDWord(134217755); 668 if f<>27 then 669 begin 670 writeln('BsrDWord(134217755) returned ',f,', should be 27'); 671 exit(false); 672 end; 673 f:=BsfDWord(805306368); 674 if f<>28 then 675 begin 676 writeln('BsfDWord(805306368) returned ',f,', should be 28'); 677 exit(false); 678 end; 679 f:=BsrDWord(268435484); 680 if f<>28 then 681 begin 682 writeln('BsrDWord(268435484) returned ',f,', should be 28'); 683 exit(false); 684 end; 685 f:=BsfDWord(1610612736); 686 if f<>29 then 687 begin 688 writeln('BsfDWord(1610612736) returned ',f,', should be 29'); 689 exit(false); 690 end; 691 f:=BsrDWord(536870941); 692 if f<>29 then 693 begin 694 writeln('BsrDWord(536870941) returned ',f,', should be 29'); 695 exit(false); 696 end; 697 f:=BsfDWord(1073741824); 698 if f<>30 then 699 begin 700 writeln('BsfDWord(1073741824) returned ',f,', should be 30'); 701 exit(false); 702 end; 703 f:=BsrDWord(1073741854); 704 if f<>30 then 705 begin 706 writeln('BsrDWord(1073741854) returned ',f,', should be 30'); 707 exit(false); 708 end; 709 f:=BsfDWord(2147483648); 710 if f<>31 then 711 begin 712 writeln('BsfDWord(2147483648) returned ',f,', should be 31'); 713 exit(false); 714 end; 715 f:=BsrDWord(2147483679); 716 if f<>31 then 717 begin 718 writeln('BsrDWord(2147483679) returned ',f,', should be 31'); 719 exit(false); 720 end; 721 722 f:=BsfDWord(0); 723 if (f<>$ff) then 724 begin 725 writeln('BsfDWord(0) returned ',f,', should be ',$ff); 726 exit(false); 727 end; 728 r:=BsrDWord(0); 729 if r<>$ff then 730 begin 731 writeln('BsrDWord(0) returned ',r,', should be ',$ff); 732 exit(false); 733 end; 734 result:=true; 735end; 736 737function test_qword: boolean; 738var 739 f, r: integer; 740begin 741 f:=BsfQWord(63); 742 if f<>0 then 743 begin 744 writeln('BsfQWord(63) returned ',f,', should be 0'); 745 exit(false); 746 end; 747 f:=BsrQWord(1); 748 if f<>0 then 749 begin 750 writeln('BsrQWord(1) returned ',f,', should be 0'); 751 exit(false); 752 end; 753 f:=BsfQWord(126); 754 if f<>1 then 755 begin 756 writeln('BsfQWord(126) returned ',f,', should be 1'); 757 exit(false); 758 end; 759 f:=BsrQWord(3); 760 if f<>1 then 761 begin 762 writeln('BsrQWord(3) returned ',f,', should be 1'); 763 exit(false); 764 end; 765 f:=BsfQWord(244); 766 if f<>2 then 767 begin 768 writeln('BsfQWord(244) returned ',f,', should be 2'); 769 exit(false); 770 end; 771 f:=BsrQWord(6); 772 if f<>2 then 773 begin 774 writeln('BsrQWord(6) returned ',f,', should be 2'); 775 exit(false); 776 end; 777 f:=BsfQWord(488); 778 if f<>3 then 779 begin 780 writeln('BsfQWord(488) returned ',f,', should be 3'); 781 exit(false); 782 end; 783 f:=BsrQWord(11); 784 if f<>3 then 785 begin 786 writeln('BsrQWord(11) returned ',f,', should be 3'); 787 exit(false); 788 end; 789 f:=BsfQWord(944); 790 if f<>4 then 791 begin 792 writeln('BsfQWord(944) returned ',f,', should be 4'); 793 exit(false); 794 end; 795 f:=BsrQWord(20); 796 if f<>4 then 797 begin 798 writeln('BsrQWord(20) returned ',f,', should be 4'); 799 exit(false); 800 end; 801 f:=BsfQWord(1888); 802 if f<>5 then 803 begin 804 writeln('BsfQWord(1888) returned ',f,', should be 5'); 805 exit(false); 806 end; 807 f:=BsrQWord(37); 808 if f<>5 then 809 begin 810 writeln('BsrQWord(37) returned ',f,', should be 5'); 811 exit(false); 812 end; 813 f:=BsfQWord(3648); 814 if f<>6 then 815 begin 816 writeln('BsfQWord(3648) returned ',f,', should be 6'); 817 exit(false); 818 end; 819 f:=BsrQWord(70); 820 if f<>6 then 821 begin 822 writeln('BsrQWord(70) returned ',f,', should be 6'); 823 exit(false); 824 end; 825 f:=BsfQWord(7296); 826 if f<>7 then 827 begin 828 writeln('BsfQWord(7296) returned ',f,', should be 7'); 829 exit(false); 830 end; 831 f:=BsrQWord(135); 832 if f<>7 then 833 begin 834 writeln('BsrQWord(135) returned ',f,', should be 7'); 835 exit(false); 836 end; 837 f:=BsfQWord(14080); 838 if f<>8 then 839 begin 840 writeln('BsfQWord(14080) returned ',f,', should be 8'); 841 exit(false); 842 end; 843 f:=BsrQWord(264); 844 if f<>8 then 845 begin 846 writeln('BsrQWord(264) returned ',f,', should be 8'); 847 exit(false); 848 end; 849 f:=BsfQWord(28160); 850 if f<>9 then 851 begin 852 writeln('BsfQWord(28160) returned ',f,', should be 9'); 853 exit(false); 854 end; 855 f:=BsrQWord(521); 856 if f<>9 then 857 begin 858 writeln('BsrQWord(521) returned ',f,', should be 9'); 859 exit(false); 860 end; 861 f:=BsfQWord(54272); 862 if f<>10 then 863 begin 864 writeln('BsfQWord(54272) returned ',f,', should be 10'); 865 exit(false); 866 end; 867 f:=BsrQWord(1034); 868 if f<>10 then 869 begin 870 writeln('BsrQWord(1034) returned ',f,', should be 10'); 871 exit(false); 872 end; 873 f:=BsfQWord(108544); 874 if f<>11 then 875 begin 876 writeln('BsfQWord(108544) returned ',f,', should be 11'); 877 exit(false); 878 end; 879 f:=BsrQWord(2059); 880 if f<>11 then 881 begin 882 writeln('BsrQWord(2059) returned ',f,', should be 11'); 883 exit(false); 884 end; 885 f:=BsfQWord(208896); 886 if f<>12 then 887 begin 888 writeln('BsfQWord(208896) returned ',f,', should be 12'); 889 exit(false); 890 end; 891 f:=BsrQWord(4108); 892 if f<>12 then 893 begin 894 writeln('BsrQWord(4108) returned ',f,', should be 12'); 895 exit(false); 896 end; 897 f:=BsfQWord(417792); 898 if f<>13 then 899 begin 900 writeln('BsfQWord(417792) returned ',f,', should be 13'); 901 exit(false); 902 end; 903 f:=BsrQWord(8205); 904 if f<>13 then 905 begin 906 writeln('BsrQWord(8205) returned ',f,', should be 13'); 907 exit(false); 908 end; 909 f:=BsfQWord(802816); 910 if f<>14 then 911 begin 912 writeln('BsfQWord(802816) returned ',f,', should be 14'); 913 exit(false); 914 end; 915 f:=BsrQWord(16398); 916 if f<>14 then 917 begin 918 writeln('BsrQWord(16398) returned ',f,', should be 14'); 919 exit(false); 920 end; 921 f:=BsfQWord(1605632); 922 if f<>15 then 923 begin 924 writeln('BsfQWord(1605632) returned ',f,', should be 15'); 925 exit(false); 926 end; 927 f:=BsrQWord(32783); 928 if f<>15 then 929 begin 930 writeln('BsrQWord(32783) returned ',f,', should be 15'); 931 exit(false); 932 end; 933 f:=BsfQWord(3080192); 934 if f<>16 then 935 begin 936 writeln('BsfQWord(3080192) returned ',f,', should be 16'); 937 exit(false); 938 end; 939 f:=BsrQWord(65552); 940 if f<>16 then 941 begin 942 writeln('BsrQWord(65552) returned ',f,', should be 16'); 943 exit(false); 944 end; 945 f:=BsfQWord(6160384); 946 if f<>17 then 947 begin 948 writeln('BsfQWord(6160384) returned ',f,', should be 17'); 949 exit(false); 950 end; 951 f:=BsrQWord(131089); 952 if f<>17 then 953 begin 954 writeln('BsrQWord(131089) returned ',f,', should be 17'); 955 exit(false); 956 end; 957 f:=BsfQWord(11796480); 958 if f<>18 then 959 begin 960 writeln('BsfQWord(11796480) returned ',f,', should be 18'); 961 exit(false); 962 end; 963 f:=BsrQWord(262162); 964 if f<>18 then 965 begin 966 writeln('BsrQWord(262162) returned ',f,', should be 18'); 967 exit(false); 968 end; 969 f:=BsfQWord(23592960); 970 if f<>19 then 971 begin 972 writeln('BsfQWord(23592960) returned ',f,', should be 19'); 973 exit(false); 974 end; 975 f:=BsrQWord(524307); 976 if f<>19 then 977 begin 978 writeln('BsrQWord(524307) returned ',f,', should be 19'); 979 exit(false); 980 end; 981 f:=BsfQWord(45088768); 982 if f<>20 then 983 begin 984 writeln('BsfQWord(45088768) returned ',f,', should be 20'); 985 exit(false); 986 end; 987 f:=BsrQWord(1048596); 988 if f<>20 then 989 begin 990 writeln('BsrQWord(1048596) returned ',f,', should be 20'); 991 exit(false); 992 end; 993 f:=BsfQWord(90177536); 994 if f<>21 then 995 begin 996 writeln('BsfQWord(90177536) returned ',f,', should be 21'); 997 exit(false); 998 end; 999 f:=BsrQWord(2097173); 1000 if f<>21 then 1001 begin 1002 writeln('BsrQWord(2097173) returned ',f,', should be 21'); 1003 exit(false); 1004 end; 1005 f:=BsfQWord(171966464); 1006 if f<>22 then 1007 begin 1008 writeln('BsfQWord(171966464) returned ',f,', should be 22'); 1009 exit(false); 1010 end; 1011 f:=BsrQWord(4194326); 1012 if f<>22 then 1013 begin 1014 writeln('BsrQWord(4194326) returned ',f,', should be 22'); 1015 exit(false); 1016 end; 1017 f:=BsfQWord(343932928); 1018 if f<>23 then 1019 begin 1020 writeln('BsfQWord(343932928) returned ',f,', should be 23'); 1021 exit(false); 1022 end; 1023 f:=BsrQWord(8388631); 1024 if f<>23 then 1025 begin 1026 writeln('BsrQWord(8388631) returned ',f,', should be 23'); 1027 exit(false); 1028 end; 1029 f:=BsfQWord(654311424); 1030 if f<>24 then 1031 begin 1032 writeln('BsfQWord(654311424) returned ',f,', should be 24'); 1033 exit(false); 1034 end; 1035 f:=BsrQWord(16777240); 1036 if f<>24 then 1037 begin 1038 writeln('BsrQWord(16777240) returned ',f,', should be 24'); 1039 exit(false); 1040 end; 1041 f:=BsfQWord(1308622848); 1042 if f<>25 then 1043 begin 1044 writeln('BsfQWord(1308622848) returned ',f,', should be 25'); 1045 exit(false); 1046 end; 1047 f:=BsrQWord(33554457); 1048 if f<>25 then 1049 begin 1050 writeln('BsrQWord(33554457) returned ',f,', should be 25'); 1051 exit(false); 1052 end; 1053 f:=BsfQWord(2483027968); 1054 if f<>26 then 1055 begin 1056 writeln('BsfQWord(2483027968) returned ',f,', should be 26'); 1057 exit(false); 1058 end; 1059 f:=BsrQWord(67108890); 1060 if f<>26 then 1061 begin 1062 writeln('BsrQWord(67108890) returned ',f,', should be 26'); 1063 exit(false); 1064 end; 1065 f:=BsfQWord(4966055936); 1066 if f<>27 then 1067 begin 1068 writeln('BsfQWord(4966055936) returned ',f,', should be 27'); 1069 exit(false); 1070 end; 1071 f:=BsrQWord(134217755); 1072 if f<>27 then 1073 begin 1074 writeln('BsrQWord(134217755) returned ',f,', should be 27'); 1075 exit(false); 1076 end; 1077 f:=BsfQWord(9395240960); 1078 if f<>28 then 1079 begin 1080 writeln('BsfQWord(9395240960) returned ',f,', should be 28'); 1081 exit(false); 1082 end; 1083 f:=BsrQWord(268435484); 1084 if f<>28 then 1085 begin 1086 writeln('BsrQWord(268435484) returned ',f,', should be 28'); 1087 exit(false); 1088 end; 1089 f:=BsfQWord(18790481920); 1090 if f<>29 then 1091 begin 1092 writeln('BsfQWord(18790481920) returned ',f,', should be 29'); 1093 exit(false); 1094 end; 1095 f:=BsrQWord(536870941); 1096 if f<>29 then 1097 begin 1098 writeln('BsrQWord(536870941) returned ',f,', should be 29'); 1099 exit(false); 1100 end; 1101 f:=BsfQWord(35433480192); 1102 if f<>30 then 1103 begin 1104 writeln('BsfQWord(35433480192) returned ',f,', should be 30'); 1105 exit(false); 1106 end; 1107 f:=BsrQWord(1073741854); 1108 if f<>30 then 1109 begin 1110 writeln('BsrQWord(1073741854) returned ',f,', should be 30'); 1111 exit(false); 1112 end; 1113 f:=BsfQWord(70866960384); 1114 if f<>31 then 1115 begin 1116 writeln('BsfQWord(70866960384) returned ',f,', should be 31'); 1117 exit(false); 1118 end; 1119 f:=BsrQWord(2147483679); 1120 if f<>31 then 1121 begin 1122 writeln('BsrQWord(2147483679) returned ',f,', should be 31'); 1123 exit(false); 1124 end; 1125 f:=BsfQWord(133143986176); 1126 if f<>32 then 1127 begin 1128 writeln('BsfQWord(133143986176) returned ',f,', should be 32'); 1129 exit(false); 1130 end; 1131 f:=BsrQWord(4294967328); 1132 if f<>32 then 1133 begin 1134 writeln('BsrQWord(4294967328) returned ',f,', should be 32'); 1135 exit(false); 1136 end; 1137 f:=BsfQWord(266287972352); 1138 if f<>33 then 1139 begin 1140 writeln('BsfQWord(266287972352) returned ',f,', should be 33'); 1141 exit(false); 1142 end; 1143 f:=BsrQWord(8589934625); 1144 if f<>33 then 1145 begin 1146 writeln('BsrQWord(8589934625) returned ',f,', should be 33'); 1147 exit(false); 1148 end; 1149 f:=BsfQWord(498216206336); 1150 if f<>34 then 1151 begin 1152 writeln('BsfQWord(498216206336) returned ',f,', should be 34'); 1153 exit(false); 1154 end; 1155 f:=BsrQWord(17179869218); 1156 if f<>34 then 1157 begin 1158 writeln('BsrQWord(17179869218) returned ',f,', should be 34'); 1159 exit(false); 1160 end; 1161 f:=BsfQWord(996432412672); 1162 if f<>35 then 1163 begin 1164 writeln('BsfQWord(996432412672) returned ',f,', should be 35'); 1165 exit(false); 1166 end; 1167 f:=BsrQWord(34359738403); 1168 if f<>35 then 1169 begin 1170 writeln('BsrQWord(34359738403) returned ',f,', should be 35'); 1171 exit(false); 1172 end; 1173 f:=BsfQWord(1855425871872); 1174 if f<>36 then 1175 begin 1176 writeln('BsfQWord(1855425871872) returned ',f,', should be 36'); 1177 exit(false); 1178 end; 1179 f:=BsrQWord(68719476772); 1180 if f<>36 then 1181 begin 1182 writeln('BsrQWord(68719476772) returned ',f,', should be 36'); 1183 exit(false); 1184 end; 1185 f:=BsfQWord(3710851743744); 1186 if f<>37 then 1187 begin 1188 writeln('BsfQWord(3710851743744) returned ',f,', should be 37'); 1189 exit(false); 1190 end; 1191 f:=BsrQWord(137438953509); 1192 if f<>37 then 1193 begin 1194 writeln('BsrQWord(137438953509) returned ',f,', should be 37'); 1195 exit(false); 1196 end; 1197 f:=BsfQWord(6871947673600); 1198 if f<>38 then 1199 begin 1200 writeln('BsfQWord(6871947673600) returned ',f,', should be 38'); 1201 exit(false); 1202 end; 1203 f:=BsrQWord(274877906982); 1204 if f<>38 then 1205 begin 1206 writeln('BsrQWord(274877906982) returned ',f,', should be 38'); 1207 exit(false); 1208 end; 1209 f:=BsfQWord(13743895347200); 1210 if f<>39 then 1211 begin 1212 writeln('BsfQWord(13743895347200) returned ',f,', should be 39'); 1213 exit(false); 1214 end; 1215 f:=BsrQWord(549755813927); 1216 if f<>39 then 1217 begin 1218 writeln('BsrQWord(549755813927) returned ',f,', should be 39'); 1219 exit(false); 1220 end; 1221 f:=BsfQWord(25288767438848); 1222 if f<>40 then 1223 begin 1224 writeln('BsfQWord(25288767438848) returned ',f,', should be 40'); 1225 exit(false); 1226 end; 1227 f:=BsrQWord(1099511627816); 1228 if f<>40 then 1229 begin 1230 writeln('BsrQWord(1099511627816) returned ',f,', should be 40'); 1231 exit(false); 1232 end; 1233 f:=BsfQWord(50577534877696); 1234 if f<>41 then 1235 begin 1236 writeln('BsfQWord(50577534877696) returned ',f,', should be 41'); 1237 exit(false); 1238 end; 1239 f:=BsrQWord(2199023255593); 1240 if f<>41 then 1241 begin 1242 writeln('BsrQWord(2199023255593) returned ',f,', should be 41'); 1243 exit(false); 1244 end; 1245 f:=BsfQWord(92358976733184); 1246 if f<>42 then 1247 begin 1248 writeln('BsfQWord(92358976733184) returned ',f,', should be 42'); 1249 exit(false); 1250 end; 1251 f:=BsrQWord(4398046511146); 1252 if f<>42 then 1253 begin 1254 writeln('BsrQWord(4398046511146) returned ',f,', should be 42'); 1255 exit(false); 1256 end; 1257 f:=BsfQWord(184717953466368); 1258 if f<>43 then 1259 begin 1260 writeln('BsfQWord(184717953466368) returned ',f,', should be 43'); 1261 exit(false); 1262 end; 1263 f:=BsrQWord(8796093022251); 1264 if f<>43 then 1265 begin 1266 writeln('BsrQWord(8796093022251) returned ',f,', should be 43'); 1267 exit(false); 1268 end; 1269 f:=BsfQWord(334251534843904); 1270 if f<>44 then 1271 begin 1272 writeln('BsfQWord(334251534843904) returned ',f,', should be 44'); 1273 exit(false); 1274 end; 1275 f:=BsrQWord(17592186044460); 1276 if f<>44 then 1277 begin 1278 writeln('BsrQWord(17592186044460) returned ',f,', should be 44'); 1279 exit(false); 1280 end; 1281 f:=BsfQWord(668503069687808); 1282 if f<>45 then 1283 begin 1284 writeln('BsfQWord(668503069687808) returned ',f,', should be 45'); 1285 exit(false); 1286 end; 1287 f:=BsrQWord(35184372088877); 1288 if f<>45 then 1289 begin 1290 writeln('BsrQWord(35184372088877) returned ',f,', should be 45'); 1291 exit(false); 1292 end; 1293 f:=BsfQWord(1196268651020288); 1294 if f<>46 then 1295 begin 1296 writeln('BsfQWord(1196268651020288) returned ',f,', should be 46'); 1297 exit(false); 1298 end; 1299 f:=BsrQWord(70368744177710); 1300 if f<>46 then 1301 begin 1302 writeln('BsrQWord(70368744177710) returned ',f,', should be 46'); 1303 exit(false); 1304 end; 1305 f:=BsfQWord(2392537302040576); 1306 if f<>47 then 1307 begin 1308 writeln('BsfQWord(2392537302040576) returned ',f,', should be 47'); 1309 exit(false); 1310 end; 1311 f:=BsrQWord(140737488355375); 1312 if f<>47 then 1313 begin 1314 writeln('BsrQWord(140737488355375) returned ',f,', should be 47'); 1315 exit(false); 1316 end; 1317 f:=BsfQWord(4222124650659840); 1318 if f<>48 then 1319 begin 1320 writeln('BsfQWord(4222124650659840) returned ',f,', should be 48'); 1321 exit(false); 1322 end; 1323 f:=BsrQWord(281474976710704); 1324 if f<>48 then 1325 begin 1326 writeln('BsrQWord(281474976710704) returned ',f,', should be 48'); 1327 exit(false); 1328 end; 1329 f:=BsfQWord(8444249301319680); 1330 if f<>49 then 1331 begin 1332 writeln('BsfQWord(8444249301319680) returned ',f,', should be 49'); 1333 exit(false); 1334 end; 1335 f:=BsrQWord(562949953421361); 1336 if f<>49 then 1337 begin 1338 writeln('BsrQWord(562949953421361) returned ',f,', should be 49'); 1339 exit(false); 1340 end; 1341 f:=BsfQWord(14636698788954112); 1342 if f<>50 then 1343 begin 1344 writeln('BsfQWord(14636698788954112) returned ',f,', should be 50'); 1345 exit(false); 1346 end; 1347 f:=BsrQWord(1125899906842674); 1348 if f<>50 then 1349 begin 1350 writeln('BsrQWord(1125899906842674) returned ',f,', should be 50'); 1351 exit(false); 1352 end; 1353 f:=BsfQWord(29273397577908224); 1354 if f<>51 then 1355 begin 1356 writeln('BsfQWord(29273397577908224) returned ',f,', should be 51'); 1357 exit(false); 1358 end; 1359 f:=BsrQWord(2251799813685299); 1360 if f<>51 then 1361 begin 1362 writeln('BsrQWord(2251799813685299) returned ',f,', should be 51'); 1363 exit(false); 1364 end; 1365 f:=BsfQWord(49539595901075456); 1366 if f<>52 then 1367 begin 1368 writeln('BsfQWord(49539595901075456) returned ',f,', should be 52'); 1369 exit(false); 1370 end; 1371 f:=BsrQWord(4503599627370548); 1372 if f<>52 then 1373 begin 1374 writeln('BsrQWord(4503599627370548) returned ',f,', should be 52'); 1375 exit(false); 1376 end; 1377 f:=BsfQWord(99079191802150912); 1378 if f<>53 then 1379 begin 1380 writeln('BsfQWord(99079191802150912) returned ',f,', should be 53'); 1381 exit(false); 1382 end; 1383 f:=BsrQWord(9007199254741045); 1384 if f<>53 then 1385 begin 1386 writeln('BsrQWord(9007199254741045) returned ',f,', should be 53'); 1387 exit(false); 1388 end; 1389 f:=BsfQWord(162129586585337856); 1390 if f<>54 then 1391 begin 1392 writeln('BsfQWord(162129586585337856) returned ',f,', should be 54'); 1393 exit(false); 1394 end; 1395 f:=BsrQWord(18014398509482038); 1396 if f<>54 then 1397 begin 1398 writeln('BsrQWord(18014398509482038) returned ',f,', should be 54'); 1399 exit(false); 1400 end; 1401 f:=BsfQWord(324259173170675712); 1402 if f<>55 then 1403 begin 1404 writeln('BsfQWord(324259173170675712) returned ',f,', should be 55'); 1405 exit(false); 1406 end; 1407 f:=BsrQWord(36028797018964023); 1408 if f<>55 then 1409 begin 1410 writeln('BsrQWord(36028797018964023) returned ',f,', should be 55'); 1411 exit(false); 1412 end; 1413 f:=BsfQWord(504403158265495552); 1414 if f<>56 then 1415 begin 1416 writeln('BsfQWord(504403158265495552) returned ',f,', should be 56'); 1417 exit(false); 1418 end; 1419 f:=BsrQWord(72057594037927992); 1420 if f<>56 then 1421 begin 1422 writeln('BsrQWord(72057594037927992) returned ',f,', should be 56'); 1423 exit(false); 1424 end; 1425 f:=BsfQWord(1008806316530991104); 1426 if f<>57 then 1427 begin 1428 writeln('BsfQWord(1008806316530991104) returned ',f,', should be 57'); 1429 exit(false); 1430 end; 1431 f:=BsrQWord(144115188075855929); 1432 if f<>57 then 1433 begin 1434 writeln('BsrQWord(144115188075855929) returned ',f,', should be 57'); 1435 exit(false); 1436 end; 1437 f:=BsfQWord(1441151880758558720); 1438 if f<>58 then 1439 begin 1440 writeln('BsfQWord(1441151880758558720) returned ',f,', should be 58'); 1441 exit(false); 1442 end; 1443 f:=BsrQWord(288230376151711802); 1444 if f<>58 then 1445 begin 1446 writeln('BsrQWord(288230376151711802) returned ',f,', should be 58'); 1447 exit(false); 1448 end; 1449 f:=BsfQWord(2882303761517117440); 1450 if f<>59 then 1451 begin 1452 writeln('BsfQWord(2882303761517117440) returned ',f,', should be 59'); 1453 exit(false); 1454 end; 1455 f:=BsrQWord(576460752303423547); 1456 if f<>59 then 1457 begin 1458 writeln('BsrQWord(576460752303423547) returned ',f,', should be 59'); 1459 exit(false); 1460 end; 1461 f:=BsfQWord(3458764513820540928); 1462 if f<>60 then 1463 begin 1464 writeln('BsfQWord(3458764513820540928) returned ',f,', should be 60'); 1465 exit(false); 1466 end; 1467 f:=BsrQWord(1152921504606847036); 1468 if f<>60 then 1469 begin 1470 writeln('BsrQWord(1152921504606847036) returned ',f,', should be 60'); 1471 exit(false); 1472 end; 1473 f:=BsfQWord(6917529027641081856); 1474 if f<>61 then 1475 begin 1476 writeln('BsfQWord(6917529027641081856) returned ',f,', should be 61'); 1477 exit(false); 1478 end; 1479 f:=BsrQWord(2305843009213694013); 1480 if f<>61 then 1481 begin 1482 writeln('BsrQWord(2305843009213694013) returned ',f,', should be 61'); 1483 exit(false); 1484 end; 1485 f:=BsfQWord(4611686018427387904); 1486 if f<>62 then 1487 begin 1488 writeln('BsfQWord(4611686018427387904) returned ',f,', should be 62'); 1489 exit(false); 1490 end; 1491 f:=BsrQWord(4611686018427387966); 1492 if f<>62 then 1493 begin 1494 writeln('BsrQWord(4611686018427387966) returned ',f,', should be 62'); 1495 exit(false); 1496 end; 1497 f:=BsfQWord(9223372036854775808); 1498 if f<>63 then 1499 begin 1500 writeln('BsfQWord(9223372036854775808) returned ',f,', should be 63'); 1501 exit(false); 1502 end; 1503 f:=BsrQWord(9223372036854775871); 1504 if f<>63 then 1505 begin 1506 writeln('BsrQWord(9223372036854775871) returned ',f,', should be 63'); 1507 exit(false); 1508 end; 1509 1510 f:=BsfQWord(0); 1511 if (f<>$ff) then 1512 begin 1513 writeln('BsfQWord(0) returned ',f,', should be ',$ff); 1514 exit(false); 1515 end; 1516 r:=BsrQWord(0); 1517 if r<>$ff then 1518 begin 1519 writeln('BsrQWord(0) returned ',r,', should be ',$ff); 1520 exit(false); 1521 end; 1522 result:=true; 1523end; 1524 1525begin 1526 if test_byte then writeln('passed') else halt(1); 1527 if test_word then writeln('passed') else halt(1); 1528 if test_dword then writeln('passed') else halt(1); 1529 if test_qword then writeln('passed') else halt(1); 1530end. 1531