mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-23 16:49:42 +02:00
+ added a normalized huge pointer comparison test
git-svn-id: trunk@28215 -
This commit is contained in:
parent
5818451bb5
commit
6770301fe7
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -10862,6 +10862,7 @@ tests/test/cpu16/i8086/thugeptr1b.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/thugeptr2.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/thugeptr2a.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/thugeptr5.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/thugeptr5a.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tintr1.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tintr2.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tmmc.pp svneol=native#text/pascal
|
||||
|
194
tests/test/cpu16/i8086/thugeptr5a.pp
Normal file
194
tests/test/cpu16/i8086/thugeptr5a.pp
Normal file
@ -0,0 +1,194 @@
|
||||
{ %cpu=i8086 }
|
||||
|
||||
{ huge pointer normalized comparison tests (>, <, >= and <=) }
|
||||
|
||||
{$HugePointerComparisonNormalization On}
|
||||
|
||||
{ when huge pointer comparison normalization is on:
|
||||
|
||||
= and <> (not tested here) should compare
|
||||
the linear address of the huge pointers. In other words, different pairs of
|
||||
segment:offset that point to the same linear address are treated as equal.
|
||||
|
||||
>, <, >= and <= should compare based on their linear address as well }
|
||||
|
||||
var
|
||||
ErrorCode: Integer;
|
||||
|
||||
procedure Error(Code: Integer);
|
||||
begin
|
||||
Writeln('Error: ', code);
|
||||
ErrorCode := Code;
|
||||
end;
|
||||
|
||||
function HPtr(sel, off: Word): HugePointer; inline;
|
||||
begin
|
||||
HPtr := HugePointer(Ptr(sel, off));
|
||||
end;
|
||||
|
||||
type
|
||||
THugePtrRec = packed record
|
||||
offset: Word;
|
||||
segment: Word;
|
||||
end;
|
||||
|
||||
var
|
||||
HugePtr: HugePointer;
|
||||
HugePtr2: HugePointer;
|
||||
HugePtrRec: THugePtrRec absolute HugePtr;
|
||||
lt, gt, lteq, gteq: Boolean;
|
||||
begin
|
||||
ErrorCode := 0;
|
||||
|
||||
Writeln('var, var');
|
||||
HugePtr := HPtr($1230, $6876);
|
||||
HugePtr2 := HPtr($1234, $5678);
|
||||
lt := HugePtr < HugePtr2;
|
||||
lteq := HugePtr <= HugePtr2;
|
||||
gt := HugePtr > HugePtr2;
|
||||
gteq := HugePtr >= HugePtr2;
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(1);
|
||||
|
||||
HugePtr := HPtr($1234, $5678);
|
||||
HugePtr2 := HPtr($1230, $6876);
|
||||
lt := HugePtr < HugePtr2;
|
||||
lteq := HugePtr <= HugePtr2;
|
||||
gt := HugePtr > HugePtr2;
|
||||
gteq := HugePtr >= HugePtr2;
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(2);
|
||||
|
||||
HugePtr := HPtr($1234, $5678);
|
||||
HugePtr2 := HPtr($7230, $3876);
|
||||
lt := HugePtr < HugePtr2;
|
||||
lteq := HugePtr <= HugePtr2;
|
||||
gt := HugePtr > HugePtr2;
|
||||
gteq := HugePtr >= HugePtr2;
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(3);
|
||||
|
||||
HugePtr := HPtr($7230, $3876);
|
||||
HugePtr2 := HPtr($1234, $5678);
|
||||
lt := HugePtr < HugePtr2;
|
||||
lteq := HugePtr <= HugePtr2;
|
||||
gt := HugePtr > HugePtr2;
|
||||
gteq := HugePtr >= HugePtr2;
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(4);
|
||||
|
||||
HugePtr := HPtr($7230, $6876);
|
||||
HugePtr2 := HPtr($8234, $5678);
|
||||
lt := HugePtr < HugePtr2;
|
||||
lteq := HugePtr <= HugePtr2;
|
||||
gt := HugePtr > HugePtr2;
|
||||
gteq := HugePtr >= HugePtr2;
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(5);
|
||||
|
||||
HugePtr := HPtr($8234, $5678);
|
||||
HugePtr2 := HPtr($7230, $6876);
|
||||
lt := HugePtr < HugePtr2;
|
||||
lteq := HugePtr <= HugePtr2;
|
||||
gt := HugePtr > HugePtr2;
|
||||
gteq := HugePtr >= HugePtr2;
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(6);
|
||||
|
||||
Writeln('var, ptr(const)');
|
||||
HugePtr := HPtr($1230, $6876);
|
||||
lt := HugePtr < HPtr($1234, $5678);
|
||||
lteq := HugePtr <= HPtr($1234, $5678);
|
||||
gt := HugePtr > HPtr($1234, $5678);
|
||||
gteq := HugePtr >= HPtr($1234, $5678);
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(1);
|
||||
|
||||
HugePtr := HPtr($1234, $5678);
|
||||
lt := HugePtr < HPtr($1230, $6876);
|
||||
lteq := HugePtr <= HPtr($1230, $6876);
|
||||
gt := HugePtr > HPtr($1230, $6876);
|
||||
gteq := HugePtr >= HPtr($1230, $6876);
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(2);
|
||||
|
||||
HugePtr := HPtr($1234, $5678);
|
||||
lt := HugePtr < HPtr($7230, $3876);
|
||||
lteq := HugePtr <= HPtr($7230, $3876);
|
||||
gt := HugePtr > HPtr($7230, $3876);
|
||||
gteq := HugePtr >= HPtr($7230, $3876);
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(3);
|
||||
|
||||
HugePtr := HPtr($7230, $3876);
|
||||
lt := HugePtr < HPtr($1234, $5678);
|
||||
lteq := HugePtr <= HPtr($1234, $5678);
|
||||
gt := HugePtr > HPtr($1234, $5678);
|
||||
gteq := HugePtr >= HPtr($1234, $5678);
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(4);
|
||||
|
||||
HugePtr := HPtr($7230, $6876);
|
||||
lt := HugePtr < HPtr($8234, $5678);
|
||||
lteq := HugePtr <= HPtr($8234, $5678);
|
||||
gt := HugePtr > HPtr($8234, $5678);
|
||||
gteq := HugePtr >= HPtr($8234, $5678);
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(5);
|
||||
|
||||
HugePtr := HPtr($8234, $5678);
|
||||
lt := HugePtr < HPtr($7230, $6876);
|
||||
lteq := HugePtr <= HPtr($7230, $6876);
|
||||
gt := HugePtr > HPtr($7230, $6876);
|
||||
gteq := HugePtr >= HPtr($7230, $6876);
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(6);
|
||||
|
||||
Writeln('ptr(const), ptr(const)');
|
||||
lt := HPtr($1230, $6876) < HPtr($1234, $5678);
|
||||
lteq := HPtr($1230, $6876) <= HPtr($1234, $5678);
|
||||
gt := HPtr($1230, $6876) > HPtr($1234, $5678);
|
||||
gteq := HPtr($1230, $6876) >= HPtr($1234, $5678);
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(1);
|
||||
|
||||
lt := HPtr($1234, $5678) < HPtr($1230, $6876);
|
||||
lteq := HPtr($1234, $5678) <= HPtr($1230, $6876);
|
||||
gt := HPtr($1234, $5678) > HPtr($1230, $6876);
|
||||
gteq := HPtr($1234, $5678) >= HPtr($1230, $6876);
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(2);
|
||||
|
||||
lt := HPtr($1234, $5678) < HPtr($7230, $3876);
|
||||
lteq := HPtr($1234, $5678) <= HPtr($7230, $3876);
|
||||
gt := HPtr($1234, $5678) > HPtr($7230, $3876);
|
||||
gteq := HPtr($1234, $5678) >= HPtr($7230, $3876);
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(3);
|
||||
|
||||
lt := HPtr($7230, $3876) < HPtr($1234, $5678);
|
||||
lteq := HPtr($7230, $3876) <= HPtr($1234, $5678);
|
||||
gt := HPtr($7230, $3876) > HPtr($1234, $5678);
|
||||
gteq := HPtr($7230, $3876) >= HPtr($1234, $5678);
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(4);
|
||||
|
||||
lt := HPtr($7230, $6876) < HPtr($8234, $5678);
|
||||
lteq := HPtr($7230, $6876) <= HPtr($8234, $5678);
|
||||
gt := HPtr($7230, $6876) > HPtr($8234, $5678);
|
||||
gteq := HPtr($7230, $6876) >= HPtr($8234, $5678);
|
||||
if not lt or not lteq or gt or gteq then
|
||||
Error(5);
|
||||
|
||||
lt := HPtr($8234, $5678) < HPtr($7230, $6876);
|
||||
lteq := HPtr($8234, $5678) <= HPtr($7230, $6876);
|
||||
gt := HPtr($8234, $5678) > HPtr($7230, $6876);
|
||||
gteq := HPtr($8234, $5678) >= HPtr($7230, $6876);
|
||||
if lt or lteq or not gt or not gteq then
|
||||
Error(6);
|
||||
|
||||
if ErrorCode = 0 then
|
||||
Writeln('Success!')
|
||||
else
|
||||
Halt(ErrorCode);
|
||||
end.
|
Loading…
Reference in New Issue
Block a user