From 7f24e436a68f6297571db58022e44ed1dec46b1a Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Fri, 8 Dec 2000 16:56:41 +0000 Subject: [PATCH] + trange5.pp --- tests/test/README | 2 + tests/test/trange5.pp | 121 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 tests/test/trange5.pp diff --git a/tests/test/README b/tests/test/README index 4a64be972d..f90a054c20 100644 --- a/tests/test/README +++ b/tests/test/README @@ -51,6 +51,8 @@ Range checking ........ trange1.pp range checking when converting int64/ trange2.pp range checking when converting between longint and cardinal trange3.pp range checking for array + trange4.pp range checking when assigning + values to int64/qword Random ................ trandom.pp tests random (interactive) Floating Point ........ tfpu1.pp tfpu2.pp diff --git a/tests/test/trange5.pp b/tests/test/trange5.pp new file mode 100644 index 0000000000..a1c13306a2 --- /dev/null +++ b/tests/test/trange5.pp @@ -0,0 +1,121 @@ +{$mode objfpc} +uses sysutils; + +type + int64rec = record lo,hi:cardinal end; + +var + haserror, + error: boolean; + b: byte; + s: shortint; + i: smallint; + w: word; + l: longint; + c: cardinal; + t: int64; + q: qword; + +{$r+} + +begin + haserror := false; + b := 255; + t := b; + q := b; + b := 0; + t := b; + q := b; + + s := 127; + t := s; + q := s; + s := -128; + t := s; + try + error := true; + q := s; + except + error := false; + end; + haserror := haserror or error; + + w := 0; + t := w; + q := w; + w := 65535; + t := w; + q := w; + + i := 32767; + t := i; + q := i; + i := -32768; + t := i; + try + error := true; + q := i; + except + error := false; + end; + haserror := haserror or error; + + c := 0; + t := c; + q := c; + c := $ffffffff; + t := c; + q := c; + + l := -maxlongint-1; + t := l; + try + error := true; + q := l; + except + error := false; + end; + haserror := haserror or error; + l := maxlongint; + t := l; + q := l; + + q := 0; + t := q; + with int64rec(q) do + begin + lo := 0; + hi := $ffffffff; + end; + try + error := true; + t := q; + except + error := false; + end; + haserror := haserror or error; + + with int64rec(t) do + begin + lo := 0; + hi := $80000000; + end; + try + error := true; + q := t; + except + error := false; + end; + haserror := haserror or error; + with int64rec(t) do + begin + lo := $ffffffff; + hi := $7fffffff; + end; + q := t; + if haserror then + begin + writeln('64bit range checking still buggy!'); + halt(1); + end; +end.