tindex.pp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. const
  2. err: boolean = false;
  3. var
  4. a, b: array[0..515] of byte;
  5. bw: array[0..258] of word absolute b;
  6. bd: array[0..129] of dword absolute b;
  7. procedure test_index;
  8. type
  9. pword = ^word;
  10. pdword = ^cardinal;
  11. var
  12. i, j, k: longint;
  13. index: longint;
  14. l: dword;
  15. begin
  16. for i := 0 to 512 do
  17. a[i] := byte(i);
  18. for i := 0 to 256 do
  19. for j := 0 to 31 do
  20. for k := 0 to 31 do
  21. begin
  22. fillchar(b,sizeof(b),0);
  23. move(a[j],b[k+4],i);
  24. { for i = 256, every element appears in the array }
  25. if (byte(i)>0) then
  26. index:=i-1
  27. else
  28. index:=0;
  29. if indexbyte(b[k+4],index,a[j+i])<>-1 then
  30. begin
  31. writeln(indexbyte(b[k+4],index,a[j+1]),' <> -1');
  32. writeln('indexbyte error 1 for (',i,',',j,',',k,')');
  33. halt(1);
  34. end;
  35. if b[k+4]=0 then
  36. index:=0
  37. else if (b[k+4]+i>=256) then
  38. index:=256-b[k+4]
  39. else
  40. index:=i;
  41. if indexbyte(b[k+4],i+1,0)<>index then
  42. begin
  43. writeln(indexbyte(b[k+4],i+1,0),' <> ',index);
  44. writeln('indexbyte error 2 for (',i,',',j,',',k,')');
  45. halt(2);
  46. end;
  47. if indexbyte(b[k+4],i,b[k+4+i-1])<>i-1 then
  48. begin
  49. writeln('indexbyte error 3 for (',i,',',j,',',k,')');
  50. halt(3);
  51. end;
  52. if (i<1) then
  53. index:=-1
  54. else
  55. index:=i shr 1;
  56. if indexbyte(b[k+4],i,b[k+4+i shr 1])<>index then
  57. begin
  58. writeln(indexbyte(b[k+4],i,b[k+4+i shr 1]),' <> ',index);
  59. writeln('indexbyte error 4 for (',i,',',j,',',k,')');
  60. halt(4);
  61. end;
  62. if (i=0) then
  63. index:=-1
  64. else
  65. index:=0;
  66. if indexbyte(b[k+4],i,b[k+4])<>index then
  67. begin
  68. writeln('indexbyte error 5 for (',i,',',j,',',k,')');
  69. halt(3);
  70. end;
  71. if indexword(b[k+4],i shr 1,0)<>-1 then
  72. begin
  73. writeln('indexword error 6 for (',i,',',j,',',k,')');
  74. halt(6);
  75. end;
  76. if (unaligned(pword(@b[k+4])^)=0) then
  77. index:=0
  78. else if (i=0) then
  79. index:=-1
  80. else if (b[k+4+i-1] = 0) and
  81. odd(i) then
  82. index:=((i+1) shr 1)-1
  83. else
  84. index:=((i+1) shr 1);
  85. if indexword(b[k+4],(i+1) shr 1 + 1,0)<>index then
  86. begin
  87. writeln(indexword(b[k+4],(i+1) shr 1 + 1,0),' <> ',index);
  88. writeln('indexword error 7 for (',i,',',j,',',k,')');
  89. halt(7);
  90. end;
  91. if (i=0) then
  92. index:=0
  93. else
  94. index:=i shr 1;
  95. l:=unaligned(pword(@(b[k+4+(i and not 1)]))^);
  96. if indexword(b[k+4],i shr 1+1,l)<>index then
  97. begin
  98. writeln(indexword(b[k+4],((i and not 1)+1) shr 1+1,l),' <> ',index);
  99. writeln('indexword error 8 for (',i,',',j,',',k,')');
  100. halt(8);
  101. end;
  102. l:=unaligned(pword(@(b[k+4+((i shr 2) and not 1)-2]))^);
  103. if (i>=8) then
  104. index:=((i shr 2) and not 1) shr 1 - 1
  105. else
  106. index:=-1;
  107. if indexword(b[k+4],i shr 1,l)<>index then
  108. begin
  109. writeln(indexword(b[k+4],i shr 1,l),' <> ',index);
  110. writeln('indexword error 9 for (',i,',',j,',',k,')');
  111. halt(9);
  112. end;
  113. l:=unaligned(pword(@(b[k+4]))^);
  114. if (i<2) then
  115. index:=-1
  116. else
  117. index:=0;
  118. if indexword(b[k+4],i shr 1,l)<>index then
  119. begin
  120. writeln('indexword error 10 for (',i,',',j,',',k,')');
  121. halt(10);
  122. end;
  123. if (unaligned(pdword(@b[k+4])^)=0) then
  124. index:=0
  125. else if (i=0) then
  126. index:=-1
  127. else if (b[k+4+i-1] = 0) and
  128. ((i mod 4) = 1) then
  129. index:=((i+3) shr 2)-1
  130. else
  131. index:=((i+3) shr 2);
  132. if indexdword(b[k+4],(i+3) shr 2 + 1,0)<>index then
  133. begin
  134. writeln(indexdword(b[k+4],(i+3) shr 2 + 1,0),' <> ',index);
  135. writeln('indexdword error 11 for (',i,',',j,',',k,')');
  136. halt(11);
  137. end;
  138. if (i=0) then
  139. index:=0
  140. else
  141. index:=i shr 2;
  142. l:=unaligned(pdword(@(b[k+4+(i and not 3)]))^);
  143. if indexdword(b[k+4],i shr 2+1,l)<>index then
  144. begin
  145. writeln('indexdword error 12 for (',i,',',j,',',k,')');
  146. halt(12);
  147. end;
  148. l:=unaligned(pdword(@(b[k+4+((i shr 3) and not 3)-4]))^);
  149. if (i>=32) then
  150. index:=((i shr 3) and not 3) shr 2 - 1
  151. else
  152. index:=-1;
  153. if indexdword(b[k+4],i shr 2,l)<>index then
  154. begin
  155. writeln(indexdword(b[k+4],i shr 2,l),' <> ',index);
  156. writeln('indexword error 13 for (',i,',',j,',',k,')');
  157. halt(13);
  158. end;
  159. l:=unaligned(pword(@(b[k+4]))^);
  160. if (i<4) then
  161. index:=-1
  162. else
  163. index:=0;
  164. if indexword(b[k+4],i shr 2,l)<>index then
  165. begin
  166. writeln('indexdword error 14 for (',i,',',j,',',k,')');
  167. halt(14);
  168. end;
  169. end;
  170. end;
  171. begin
  172. test_index;
  173. end.