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