tval5.pp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. {$mode objfpc}
  2. uses
  3. sysutils;
  4. procedure testcard;
  5. const
  6. h = 1;
  7. hexch : array[0..15] of char='0123456789ABCDEF';
  8. var
  9. c: cardinal;
  10. l: longint;
  11. s: shortstring;
  12. b, b2: byte;
  13. ch, ch2: char;
  14. {$ifdef cpu64}
  15. caught: boolean;
  16. {$endif cpu64}
  17. begin
  18. s:='$0fffffff';
  19. for b := low(hexch) to high(hexch) do
  20. begin
  21. s[2]:=hexch[b];
  22. val(s,c,l);
  23. if (l<>0) then
  24. halt(b+h);
  25. end;
  26. s:='$fffffff0';
  27. for b := low(hexch) to high(hexch) do
  28. begin
  29. s[length(s)]:=hexch[b];
  30. val(s,c,l);
  31. if (l<>0) then
  32. halt(b+16+h);
  33. end;
  34. setlength(s,10);
  35. s[1]:='$';
  36. for b2:= 1 to high(hexch) do
  37. begin
  38. for b := 2 to length(s)-1 do
  39. s[b]:=hexch[b2];
  40. for b := low(hexch) to high(hexch) do
  41. begin
  42. s[length(s)]:=hexch[b];
  43. {$ifdef cpu64}
  44. {$r+}
  45. try
  46. caught:=false;
  47. {$endif cpu64}
  48. val(s,c,l);
  49. {$ifdef cpu64}
  50. except on e : exception do
  51. caught:=true;
  52. end;
  53. if not caught then
  54. {$else cpu64}
  55. if (l=0) then
  56. {$endif}
  57. halt(b2+32+h);
  58. end;
  59. end;
  60. s:='0294967295';
  61. for ch := '0' to '4' do
  62. begin
  63. s[1]:=ch;
  64. val(s,c,l);
  65. if (l<>0) then
  66. halt(ord(ch)-ord('0')+b+49+h);
  67. end;
  68. s:='4294967290';
  69. for ch := '0' to '5' do
  70. begin
  71. s[length(s)]:=ch;
  72. val(s,c,l);
  73. if (l<>0) then
  74. halt(ord(ch)-ord('0')+b+54+h);
  75. end;
  76. s:='4294967290';
  77. for ch := '6' to '9' do
  78. begin
  79. s[length(s)]:=ch;
  80. {$ifdef cpu64}
  81. {$r+}
  82. try
  83. caught:=false;
  84. {$endif cpu64}
  85. val(s,c,l);
  86. {$ifdef cpu64}
  87. except on e : exception do
  88. caught:=true;
  89. end;
  90. if not caught then
  91. {$else cpu64}
  92. if (l=0) then
  93. {$endif cpu64}
  94. halt(ord(ch)-ord('0')+b+54+h);
  95. end;
  96. setlength(s,length('4294967295')+1);
  97. for ch2:= '1' to '3' do
  98. begin
  99. for b := 1 to length(s)-1 do
  100. s[b]:=ch2;
  101. for ch := '0' to '9' do
  102. begin
  103. s[length(s)]:=ch;
  104. {$ifdef cpu64}
  105. {$r+}
  106. try
  107. caught:=false;
  108. {$endif cpu64}
  109. val(s,c,l);
  110. {$ifdef cpu64}
  111. except on e : exception do
  112. caught:=true;
  113. end;
  114. if not caught then
  115. {$else cpu64}
  116. if (l=0) then
  117. {$endif cpu64}
  118. halt(ord(ch2)-ord('1')+65+h);
  119. end;
  120. end;
  121. end;
  122. procedure testqword;
  123. const
  124. h = 71;
  125. hexch : array[0..15] of char='0123456789ABCDEF';
  126. var
  127. c: qword;
  128. l: longint;
  129. s: shortstring;
  130. b, b2: byte;
  131. ch, ch2: char;
  132. begin
  133. s:='$0fffffffffffffff';
  134. for b := low(hexch) to high(hexch) do
  135. begin
  136. s[2]:=hexch[b];
  137. val(s,c,l);
  138. if (l<>0) then
  139. halt(b+h);
  140. end;
  141. s:='$fffffffffffffff0';
  142. for b := low(hexch) to high(hexch) do
  143. begin
  144. s[length(s)]:=hexch[b];
  145. val(s,c,l);
  146. if (l<>0) then
  147. halt(b+16+h);
  148. end;
  149. setlength(s,18);
  150. s[1]:='$';
  151. for b2:= 1 to high(hexch) do
  152. begin
  153. for b := 2 to length(s)-1 do
  154. s[b]:=hexch[b2];
  155. for b := low(hexch) to high(hexch) do
  156. begin
  157. s[length(s)]:=hexch[b];
  158. val(s,c,l);
  159. if (l=0) then
  160. halt(b2+32+h);
  161. end;
  162. end;
  163. s:='18446744073709551615';
  164. for ch := '0' to '1' do
  165. begin
  166. s[1]:=ch;
  167. val(s,c,l);
  168. if (l<>0) then
  169. halt(ord(ch)-ord('0')+b+49+h);
  170. end;
  171. s:='18446744073709551615';
  172. for ch := '0' to '5' do
  173. begin
  174. s[length(s)]:=ch;
  175. val(s,c,l);
  176. if (l<>0) then
  177. halt(ord(ch)-ord('0')+b+54+h);
  178. end;
  179. s:='18446744073709551615';
  180. for ch := '6' to '9' do
  181. begin
  182. s[length(s)]:=ch;
  183. val(s,c,l);
  184. if (l=0) then
  185. halt(ord(ch)-ord('0')+b+54+h);
  186. end;
  187. setlength(s,length('18446744073709551615')+1);
  188. for ch2:= '1' to '1' do
  189. begin
  190. for b := 1 to length(s)-1 do
  191. s[b]:=ch2;
  192. for ch := '0' to '9' do
  193. begin
  194. s[length(s)]:=ch;
  195. val(s,c,l);
  196. if (l=0) then
  197. halt(ord(ch2)-ord('1')+61+h);
  198. end;
  199. end;
  200. end;
  201. begin
  202. testcard;
  203. testqword;
  204. end.