trange5.pp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. {$mode objfpc}
  2. uses sysutils;
  3. type
  4. int64rec = record lo,hi:cardinal end;
  5. var
  6. haserror,
  7. error: boolean;
  8. b: byte;
  9. s: shortint;
  10. i: smallint;
  11. w: word;
  12. l: longint;
  13. c: cardinal;
  14. t: int64;
  15. q: qword;
  16. {$r+}
  17. begin
  18. haserror := false;
  19. b := 255;
  20. t := b;
  21. q := b;
  22. b := 0;
  23. t := b;
  24. q := b;
  25. s := 127;
  26. t := s;
  27. q := s;
  28. s := -128;
  29. t := s;
  30. try
  31. error := true;
  32. q := s;
  33. except
  34. error := false;
  35. end;
  36. haserror := haserror or error;
  37. w := 0;
  38. t := w;
  39. q := w;
  40. w := 65535;
  41. t := w;
  42. q := w;
  43. i := 32767;
  44. t := i;
  45. q := i;
  46. i := -32768;
  47. t := i;
  48. try
  49. error := true;
  50. q := i;
  51. except
  52. error := false;
  53. end;
  54. haserror := haserror or error;
  55. c := 0;
  56. t := c;
  57. q := c;
  58. c := $ffffffff;
  59. t := c;
  60. q := c;
  61. l := -maxlongint-1;
  62. t := l;
  63. try
  64. error := true;
  65. q := l;
  66. except
  67. error := false;
  68. end;
  69. haserror := haserror or error;
  70. l := maxlongint;
  71. t := l;
  72. q := l;
  73. q := 0;
  74. t := q;
  75. with int64rec(q) do
  76. begin
  77. lo := 0;
  78. hi := $ffffffff;
  79. end;
  80. try
  81. error := true;
  82. t := q;
  83. except
  84. error := false;
  85. end;
  86. haserror := haserror or error;
  87. with int64rec(t) do
  88. begin
  89. lo := 0;
  90. hi := $80000000;
  91. end;
  92. try
  93. error := true;
  94. q := t;
  95. except
  96. error := false;
  97. end;
  98. haserror := haserror or error;
  99. with int64rec(t) do
  100. begin
  101. lo := $ffffffff;
  102. hi := $7fffffff;
  103. end;
  104. q := t;
  105. if haserror then
  106. begin
  107. writeln('64bit range checking still buggy!');
  108. halt(1);
  109. end;
  110. end.