mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-04 18:41:35 +02:00
+ add test for the DynArray* functions (currently only DynArraySize() and DynArrayIndex() are tested)
git-svn-id: trunk@36943 -
This commit is contained in:
parent
c45f738081
commit
50f3479f64
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -12223,6 +12223,7 @@ tests/test/tarray1.pp svneol=native#text/plain
|
||||
tests/test/tarray10.pp svneol=native#text/plain
|
||||
tests/test/tarray11.pp svneol=native#text/pascal
|
||||
tests/test/tarray12.pp svneol=native#text/pascal
|
||||
tests/test/tarray13.pp svneol=native#text/pascal
|
||||
tests/test/tarray2.pp svneol=native#text/plain
|
||||
tests/test/tarray3.pp svneol=native#text/plain
|
||||
tests/test/tarray4.pp svneol=native#text/plain
|
||||
|
155
tests/test/tarray13.pp
Normal file
155
tests/test/tarray13.pp
Normal file
@ -0,0 +1,155 @@
|
||||
{ test for the various DynArray* functions }
|
||||
|
||||
program tarray13;
|
||||
|
||||
{$mode objfpc}
|
||||
|
||||
function TestDynArraySize: LongInt;
|
||||
type
|
||||
TTest = record
|
||||
value1: QWord;
|
||||
value2: LongInt;
|
||||
end;
|
||||
|
||||
var
|
||||
arr1: array of LongInt;
|
||||
arr2: array of QWord;
|
||||
arr3: array of TTest;
|
||||
begin
|
||||
SetLength(arr1, 5);
|
||||
SetLength(arr2, 8);
|
||||
SetLength(arr3, 6);
|
||||
|
||||
if DynArraySize(Pointer(arr1)) <> 5 then
|
||||
Halt(1);
|
||||
if DynArraySize(@arr1[0]) <> 5 then
|
||||
Halt(2);
|
||||
if DynArraySize(Pointer(arr2)) <> 8 then
|
||||
Halt(3);
|
||||
if DynArraySize(@arr2[0]) <> 8 then
|
||||
Halt(4);
|
||||
if DynArraySize(Pointer(arr3)) <> 6 then
|
||||
Halt(5);
|
||||
if DynArraySize(@arr3[0]) <> 6 then
|
||||
Halt(6);
|
||||
|
||||
Result := 7;
|
||||
end;
|
||||
|
||||
function TestDynArrayIndexSingle(aBaseCode: LongInt): LongInt;
|
||||
type
|
||||
TTest1 = record
|
||||
value1: QWord;
|
||||
value2: LongInt;
|
||||
end;
|
||||
|
||||
TTest2 = packed record
|
||||
value1: LongInt;
|
||||
value2: QWord;
|
||||
end;
|
||||
|
||||
var
|
||||
arr1: array of Byte;
|
||||
arr2: array of LongInt;
|
||||
arr3: array of QWord;
|
||||
arr4: array of TTest1;
|
||||
arr5: array of TTest2;
|
||||
i, basecode: LongInt;
|
||||
begin
|
||||
SetLength(arr1, 5);
|
||||
SetLength(arr2, 3);
|
||||
SetLength(arr3, 8);
|
||||
SetLength(arr4, 6);
|
||||
SetLength(arr5, 7);
|
||||
|
||||
basecode := aBaseCode;
|
||||
for i := Low(arr1) to High(arr1) do begin
|
||||
if @arr1[i] <> DynArrayIndex(Pointer(arr1), [i], TypeInfo(arr1)) then
|
||||
Halt(basecode + i * 2);
|
||||
if @arr1[i] <> DynArrayIndex(@arr1[0], [i], TypeInfo(arr1)) then
|
||||
Halt(basecode + i * 2 + 1);
|
||||
end;
|
||||
|
||||
basecode := basecode + 2 * Length(arr1);
|
||||
for i := Low(arr2) to High(arr2) do begin
|
||||
if @arr2[i] <> DynArrayIndex(Pointer(arr2), [i], TypeInfo(arr2)) then
|
||||
Halt(basecode + i * 2);
|
||||
if @arr2[i] <> DynArrayIndex(@arr2[0], [i], TypeInfo(arr2)) then
|
||||
Halt(basecode + i * 2 + 1);
|
||||
end;
|
||||
|
||||
basecode := basecode + 2 * Length(arr2);
|
||||
for i := Low(arr3) to High(arr3) do begin
|
||||
if @arr3[i] <> DynArrayIndex(Pointer(arr3), [i], TypeInfo(arr3)) then
|
||||
Halt(basecode + i * 2);
|
||||
if @arr3[i] <> DynArrayIndex(@arr3[0], [i], TypeInfo(arr3)) then
|
||||
Halt(basecode + i * 2 + 1);
|
||||
end;
|
||||
|
||||
basecode := basecode + 2 * Length(arr3);
|
||||
for i := Low(arr4) to High(arr4) do begin
|
||||
if @arr4[i] <> DynArrayIndex(Pointer(arr4), [i], TypeInfo(arr4)) then
|
||||
Halt(basecode + i * 2);
|
||||
if @arr4[i] <> DynArrayIndex(@arr4[0], [i], TypeInfo(arr4)) then
|
||||
Halt(basecode + i * 2 + 1);
|
||||
end;
|
||||
|
||||
basecode := basecode + 2 * Length(arr4);
|
||||
for i := Low(arr5) to High(arr5) do begin
|
||||
if @arr5[i] <> DynArrayIndex(Pointer(arr5), [i], TypeInfo(arr5)) then
|
||||
Halt(basecode + i * 2);
|
||||
if @arr5[i] <> DynArrayIndex(@arr5[0], [i], TypeInfo(arr5)) then
|
||||
Halt(basecode + i * 2 + 1);
|
||||
end;
|
||||
|
||||
Result := basecode + 2 * Length(arr5);
|
||||
end;
|
||||
|
||||
function TestDynArrayIndexMulti(aBaseCode: LongInt): LongInt;
|
||||
var
|
||||
arr1: array of array of LongInt;
|
||||
arr2: array of array of array of QWord;
|
||||
i, j, k, basecode: LongInt;
|
||||
begin
|
||||
SetLength(arr1, 4, 8);
|
||||
SetLength(arr2, 3, 5, 9);
|
||||
|
||||
basecode := aBaseCode;
|
||||
for i := Low(arr1) to High(arr1) do begin
|
||||
for j := Low(arr1[i]) to High(arr1[i]) do begin
|
||||
if @arr1[i, j] <> DynArrayIndex(Pointer(arr1), [i, j], TypeInfo(arr1)) then
|
||||
Halt(basecode + j * 2);
|
||||
if @arr1[i, j] <> DynArrayIndex(@arr1[0], [i, j], TypeInfo(arr1)) then
|
||||
Halt(basecode + j * 2 + 1);
|
||||
{ Note: @arr1[0, 0] would be different from @arr1[0] or arr1! }
|
||||
end;
|
||||
basecode := basecode + Length(arr1[i]) * 3;
|
||||
end;
|
||||
|
||||
for i := Low(arr2) to High(arr2) do begin
|
||||
for j := Low(arr2[i]) to High(arr2[i]) do begin
|
||||
for k := Low(arr2[i, j]) to High(arr2[i, j]) do begin
|
||||
if @arr2[i, j, k] <> DynArrayIndex(Pointer(arr2), [i, j, k], TypeInfo(arr2)) then
|
||||
Halt(basecode + k * 2);
|
||||
if @arr2[i, j, k] <> DynArrayIndex(@arr2[0], [i, j, k], TypeInfo(arr2)) then
|
||||
Halt(basecode + k * 2 + 1);
|
||||
{ Note: @arr2[0, 0] and @arr2[0, 0, 0] would be different from @arr2[0] or arr2! }
|
||||
end;
|
||||
basecode := basecode + Length(arr2[i, j]) * 2;
|
||||
end;
|
||||
end;
|
||||
|
||||
Result := basecode;
|
||||
end;
|
||||
|
||||
var
|
||||
basecode: LongInt;
|
||||
begin
|
||||
Writeln('TestDynArraySize errors starting at 1');
|
||||
basecode := TestDynArraySize;
|
||||
Writeln('TestDynArrayIndexSingle errors starting at ', basecode);
|
||||
basecode := TestDynArrayIndexSingle(basecode);
|
||||
Writeln('TestDynArrayIndexMulti errors starting at ', basecode);
|
||||
basecode := TestDynArrayIndexMulti(basecode);
|
||||
Writeln('ok');
|
||||
end.
|
Loading…
Reference in New Issue
Block a user