mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-04 18:30:36 +02:00
+ added another far pointer arithmetic test
git-svn-id: trunk@27490 -
This commit is contained in:
parent
cef4092f3d
commit
bf1e15fd39
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -10839,6 +10839,7 @@ tests/test/cpu16/i8086/tfarcal1.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tfarptr1.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tfarptr2.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tfarptr3.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tfarptr4.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/i8086/tptrsize.pp svneol=native#text/pascal
|
||||
tests/test/cpu16/taddint1.pp svneol=native#text/pascal
|
||||
tests/test/dumpclass.pp svneol=native#text/plain
|
||||
|
183
tests/test/cpu16/i8086/tfarptr4.pp
Normal file
183
tests/test/cpu16/i8086/tfarptr4.pp
Normal file
@ -0,0 +1,183 @@
|
||||
{ %cpu=i8086 }
|
||||
|
||||
{ far pointer arithmetic tests }
|
||||
|
||||
{ far pointer arithmetic should work only on the offset,
|
||||
without changing the segment }
|
||||
|
||||
{ this test is the same as tfarptr3, but with different numbers, designed to
|
||||
expose buggy far pointer arithmetic, where the int16 int is treated as a
|
||||
signed int and is sign extended to 32-bit and then added to the far pointer
|
||||
as a 32-bit int }
|
||||
|
||||
{$R-}
|
||||
|
||||
var
|
||||
ErrorCode: Integer;
|
||||
|
||||
procedure Error(Code: Integer);
|
||||
begin
|
||||
Writeln('Error: ', code);
|
||||
ErrorCode := Code;
|
||||
end;
|
||||
|
||||
var
|
||||
FarPtr: FarPointer;
|
||||
FarPtr2: FarPointer;
|
||||
int16: Integer;
|
||||
int32: LongInt;
|
||||
begin
|
||||
ErrorCode := 0;
|
||||
|
||||
Writeln('farptr + int16_var');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
int16 := $7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr + int16;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(1);
|
||||
Writeln('int16_var + farptr');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
int16 := $7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := int16 + FarPtr;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(2);
|
||||
Writeln('farptr + int32_var');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
int32 := $55AA7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr + int32;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(3);
|
||||
Writeln('int32_var + farptr');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
int32 := $55AA7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := int32 + FarPtr;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(4);
|
||||
Writeln('farptr + int16_const');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr + $7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(5);
|
||||
Writeln('int16_const + farptr');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := $7FFF + FarPtr;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(6);
|
||||
Writeln('farptr + int32_const');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr + $55AA7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(7);
|
||||
Writeln('int32_const + farptr');
|
||||
FarPtr := Ptr($1234, $F678);
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := $55AA7FFF + FarPtr;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(8);
|
||||
{ const }
|
||||
Writeln('farptr_const + int16_var');
|
||||
int16 := $7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($1234F678) + int16;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(9);
|
||||
Writeln('int16_var + farptr_const');
|
||||
int16 := $7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := int16 + FarPointer($1234F678);
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(10);
|
||||
Writeln('farptr_const + int32_var');
|
||||
int32 := $55AA7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($1234F678) + int32;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(11);
|
||||
Writeln('int32_var + farptr_const');
|
||||
int32 := $55AA7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := int32 + FarPointer($1234F678);
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(12);
|
||||
Writeln('farptr_const + int16_const');
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($1234F678) + $7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(13);
|
||||
Writeln('int16_const + farptr_const');
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := $7FFF + FarPointer($1234F678);
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(14);
|
||||
Writeln('farptr_const + int32_const');
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($1234F678) + $55AA7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(15);
|
||||
Writeln('int32_const + farptr_const');
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := $55AA7FFF + FarPointer($1234F678);
|
||||
if FarPtr2 <> Ptr($1234, $7677) then
|
||||
Error(16);
|
||||
|
||||
Writeln('farptr - int16_var');
|
||||
FarPtr := Ptr($1234, $0678);
|
||||
int16 := $7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr - int16;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(17);
|
||||
Writeln('farptr - int32_var');
|
||||
FarPtr := Ptr($1234, $0678);
|
||||
int32 := $55AA7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr - int32;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(18);
|
||||
Writeln('farptr - int16_const');
|
||||
FarPtr := Ptr($1234, $0678);
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr - $7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(19);
|
||||
Writeln('farptr - int32_const');
|
||||
FarPtr := Ptr($1234, $0678);
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPtr - $55AA7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(20);
|
||||
Writeln('farptr_const - int16_var');
|
||||
int16 := $7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($12340678) - int16;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(21);
|
||||
Writeln('farptr_const - int32_var');
|
||||
int32 := $55AA7FFF;
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($12340678) - int32;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(22);
|
||||
Writeln('farptr_const - int16_const');
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($12340678) - $7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(23);
|
||||
Writeln('farptr_const - int32_const');
|
||||
FarPtr2 := nil;
|
||||
FarPtr2 := FarPointer($12340678) - $55AA7FFF;
|
||||
if FarPtr2 <> Ptr($1234, $8679) then
|
||||
Error(24);
|
||||
|
||||
if ErrorCode = 0 then
|
||||
Writeln('Success!')
|
||||
else
|
||||
Halt(ErrorCode);
|
||||
end.
|
Loading…
Reference in New Issue
Block a user