mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 21:28:21 +02:00
106 lines
2.5 KiB
ObjectPascal
106 lines
2.5 KiB
ObjectPascal
{ %norun }
|
|
{ Exit code:
|
|
= 0 - pass
|
|
= 1 - incorrect input for test (first three characters are not abc)
|
|
>= 2 - fail (but can be caused by incorrect test input too)
|
|
}
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
unit uw19851;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes;
|
|
|
|
function Test(AStream: TStream): Integer;
|
|
|
|
implementation
|
|
|
|
function Test(AStream: TStream): Integer;
|
|
var
|
|
AString: string;
|
|
begin
|
|
try
|
|
Result := 0;
|
|
SetLength(AString, 3);
|
|
|
|
// Test reading first 3 characters
|
|
AStream.ReadBuffer(AString[1], Length(AString));
|
|
if AString <> 'abc' then
|
|
Exit(1);
|
|
if AStream.Position <> 3 then
|
|
Exit(2);
|
|
|
|
// Test 32-bit seek from current
|
|
if AStream.Seek(Longint(3), soFromCurrent) <> 6 then
|
|
Exit(3);
|
|
|
|
// Read & make sure position is correct
|
|
AStream.ReadBuffer(AString[1], Length(AString));
|
|
if AString <> 'ghi' then
|
|
Exit(4);
|
|
if AStream.Position <> AStream.Seek(Longint(0), soFromCurrent) then
|
|
Exit(5);
|
|
if AStream.Position <> AStream.Seek(Int64(0), soCurrent) then
|
|
Exit(6);
|
|
if AStream.Position <> 9 then
|
|
Exit(7);
|
|
|
|
// Test 64-bit seek from current
|
|
if AStream.Seek(Int64(3), soCurrent) <> 12 then
|
|
Exit(8);
|
|
|
|
// Read & make sure position is correct
|
|
AStream.ReadBuffer(AString[1], Length(AString));
|
|
if AString <> 'mno' then
|
|
Exit(9);
|
|
if AStream.Position <> 15 then
|
|
Exit(10);
|
|
if AStream.Seek(Longint(0), soFromCurrent) <> 15 then
|
|
Exit(11);
|
|
if AStream.Seek(Int64(15), soBeginning) <> 15 then
|
|
Exit(12);
|
|
if AStream.Seek(Longint(15), soFromBeginning) <> 15 then
|
|
Exit(13);
|
|
if AStream.Seek(Int64(0), soCurrent) <> 15 then
|
|
Exit(14);
|
|
|
|
// Test 32-bit seek from beginning
|
|
if AStream.Seek(Longint(18), soFromBeginning) <> 18 then
|
|
Exit(15);
|
|
|
|
// Read & make sure position is correct
|
|
AStream.ReadBuffer(AString[1], Length(AString));
|
|
if AString <> 'stu' then
|
|
Exit(16);
|
|
if AStream.Position <> 21 then
|
|
Exit(17);
|
|
|
|
// Test 64-bit seek from beginning
|
|
if AStream.Seek(Int64(24), soBeginning) <> 24 then
|
|
Exit(18);
|
|
if AStream.Position <> 24 then
|
|
Exit(19);
|
|
if AStream.Seek(Longint(0), soFromCurrent) <> 24 then
|
|
Exit(20);
|
|
|
|
// Read & make sure position is correct
|
|
AStream.ReadBuffer(AString[1], Length(AString));
|
|
if AString <> 'yz1' then
|
|
Exit(21);
|
|
if AStream.Position <> 27 then
|
|
Exit(22);
|
|
finally
|
|
{on E: EStreamError do
|
|
begin
|
|
Result := 23;
|
|
WriteLn(E.Message);
|
|
end;}
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|