trange3.pp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. program trange3;
  2. {$mode objfpc}
  3. {$ifdef cpujvm}
  4. uses
  5. jdk15;
  6. {$macro on}
  7. {$define writeln:=jlsystem.fout.println}
  8. {$define write:=jlsystem.fout.println}
  9. {$else}
  10. uses
  11. SysUtils;
  12. {$endif}
  13. {$r+}
  14. var
  15. a1: array[-5..6] of byte;
  16. a2: array[-12..-1] of byte;
  17. a3: array[0..6] of byte;
  18. a4: array[1..12] of byte;
  19. c: cardinal;
  20. l: longint;
  21. b: byte;
  22. finalerror: boolean;
  23. function check_longint(l: longint; res1, res2, res3, res4: boolean): boolean;
  24. var
  25. caught,
  26. error: boolean;
  27. begin
  28. result := false;
  29. caught := false;
  30. try
  31. b := a1[l];
  32. except
  33. caught := true;
  34. end;
  35. error := caught <> res1;
  36. if error then writeln('long 1 failed for '+unicodestring(JLInteger.valueOf(l).toString));
  37. result := result or error;
  38. caught := false;
  39. try
  40. b := a2[l];
  41. except
  42. caught := true;
  43. end;
  44. error := caught <> res2;
  45. if error then writeln('long 2 failed for '+unicodestring(JLInteger.valueOf(l).toString));
  46. result := result or error;
  47. caught := false;
  48. try
  49. b := a3[l];
  50. except
  51. caught := true;
  52. end;
  53. error := caught <> res3;
  54. if error then writeln('long 3 failed for '+unicodestring(JLInteger.valueOf(l).toString));
  55. result := result or error;
  56. caught := false;
  57. try
  58. b := a4[l];
  59. except
  60. caught := true;
  61. end;
  62. error := caught <> res4;
  63. if error then writeln('long 4 failed for '+unicodestring(JLInteger.valueOf(l).toString));
  64. result := result or error;
  65. writeln;
  66. end;
  67. function check_cardinal(l: cardinal; res1, res2, res3, res4: boolean): boolean;
  68. var
  69. caught,
  70. error: boolean;
  71. begin
  72. result := false;
  73. caught := false;
  74. try
  75. b := a1[l];
  76. except
  77. caught := true;
  78. end;
  79. error := caught <> res1;
  80. if error then writeln('card 1 failed for '+unicodestring(JLLong.valueOf(l).toString));
  81. result := result or error;
  82. caught := false;
  83. try
  84. b := a2[l];
  85. except
  86. caught := true;
  87. end;
  88. error := caught <> res2;
  89. if error then writeln('card 2 failed for '+unicodestring(JLLong.valueOf(l).toString));
  90. result := result or error;
  91. caught := false;
  92. try
  93. b := a3[l];
  94. except
  95. caught := true;
  96. end;
  97. error := caught <> res3;
  98. if error then writeln('card 3 failed for '+unicodestring(JLLong.valueOf(l).toString));
  99. result := result or error;
  100. caught := false;
  101. try
  102. b := a4[l];
  103. except
  104. caught := true;
  105. end;
  106. error := caught <> res4;
  107. if error then writeln('card 4 failed for '+unicodestring(JLLong.valueOf(l).toString));
  108. result := result or error;
  109. writeln;
  110. end;
  111. begin
  112. finalerror :=
  113. check_longint(-1,false,false,true,true);
  114. finalerror :=
  115. check_longint(-6,true,false,true,true) or finalerror;
  116. finalerror :=
  117. check_longint(0,false,true,false,true) or finalerror;
  118. finalerror :=
  119. check_cardinal(0,false,true,false,true);
  120. finalerror :=
  121. check_cardinal(cardinal($ffffffff),true,true,true,true) or finalerror;
  122. finalerror :=
  123. check_cardinal(5,false,true,false,false) or finalerror;
  124. if finalerror then
  125. begin
  126. writeln('Still errors in range checking for array indexes');
  127. halt(1);
  128. end;
  129. end.