mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-20 02:42:33 +02:00
300 lines
6.2 KiB
ObjectPascal
300 lines
6.2 KiB
ObjectPascal
program WatchesFuncStringPrg;
|
|
{$mode objfpc}{$H+}
|
|
|
|
uses SysUtils;
|
|
|
|
var
|
|
CurMemUsed: ptruint;
|
|
SomeInt: Integer;
|
|
s1, s2, s3, s4, x: String;
|
|
ws1, ws2, ws3, ws4, wx: WideString;
|
|
|
|
|
|
function UsedMem: ptruint;
|
|
var
|
|
mm: TMemoryManager;
|
|
hs: TFPCHeapStatus;
|
|
i: integer;
|
|
begin
|
|
// ensure global vars are in mem
|
|
i := SomeInt + Length(s1) + Length(s2) + Length(s3) + Length(s4);
|
|
x := IntToStr(i);
|
|
GetMemoryManager(mm);
|
|
hs := mm.GetFPCHeapStatus();
|
|
Result := hs.CurrHeapUsed;
|
|
end;
|
|
|
|
var
|
|
Cnt: Integer;
|
|
|
|
function TestStrRes: String;
|
|
begin
|
|
Result := '#'+IntToStr(Cnt);
|
|
inc(Cnt);
|
|
end;
|
|
|
|
function TestIntToStrRes(AVal: Integer): String;
|
|
begin
|
|
Result := '$'+IntToHex(AVal, 8);
|
|
end;
|
|
|
|
function TestIntSumToStrRes(AVal, AVal2: Integer): String;
|
|
begin
|
|
Result := '$'+IntToHex(AVal+AVal2, 8);
|
|
end;
|
|
|
|
function TestStrToIntRes(AVal: String): Integer;
|
|
begin
|
|
if Length(AVal) = 1 then
|
|
AVal := AVal + 'abc'
|
|
else
|
|
if AVal <> '' then
|
|
AVal[1] := 'X';
|
|
|
|
Result := Length(AVal);
|
|
end;
|
|
|
|
function TestStrToStrRes(AVal: String): String;
|
|
begin
|
|
if Length(AVal) = 1 then
|
|
AVal := AVal + 'abc'
|
|
else
|
|
if AVal <> '' then
|
|
AVal[1] := 'X';
|
|
|
|
Result := '"' + IntToStr(Length(AVal)) + '"';
|
|
end;
|
|
|
|
function conc(AVal, BVal: String): String;
|
|
begin
|
|
Result := AVal + BVal;
|
|
end;
|
|
|
|
// Widestring
|
|
|
|
function WTestStrRes: WideString;
|
|
begin
|
|
Result := '#'+IntToStr(Cnt);
|
|
inc(Cnt);
|
|
end;
|
|
|
|
function WTestIntToStrRes(AVal: Integer): WideString;
|
|
begin
|
|
Result := '$'+IntToHex(AVal, 8);
|
|
end;
|
|
|
|
function WTestIntSumToStrRes(AVal, AVal2: Integer): WideString;
|
|
begin
|
|
Result := '$'+IntToHex(AVal+AVal2, 8);
|
|
end;
|
|
|
|
function WTestStrToIntRes(AVal: WideString): Integer;
|
|
begin
|
|
if Length(AVal) = 1 then
|
|
AVal := AVal + 'abc'
|
|
else
|
|
if AVal <> '' then
|
|
AVal[1] := 'X';
|
|
|
|
Result := Length(AVal);
|
|
end;
|
|
|
|
function WTestStrToStrRes(AVal: WideString): WideString;
|
|
begin
|
|
if Length(AVal) = 1 then
|
|
AVal := AVal + 'abc'
|
|
else
|
|
if AVal <> '' then
|
|
AVal[1] := 'X';
|
|
|
|
Result := '"' + IntToStr(Length(AVal)) + '"';
|
|
end;
|
|
|
|
function Wconc(AVal, BVal: WideString): WideString;
|
|
begin
|
|
Result := AVal + BVal;
|
|
end;
|
|
|
|
|
|
begin
|
|
// Call all functions, so they are used in the exe
|
|
TestStrRes;
|
|
TestIntToStrRes(1);
|
|
TestIntSumToStrRes(1,2);
|
|
TestStrToIntRes('a');
|
|
TestStrToStrRes('a');
|
|
conc('a', 'b');
|
|
|
|
wTestStrRes;
|
|
wTestIntToStrRes(1);
|
|
wTestIntSumToStrRes(1,2);
|
|
wTestStrToIntRes('a');
|
|
wTestStrToStrRes('a');
|
|
wconc('a', 'b');
|
|
|
|
Cnt := 0;
|
|
SomeInt := 126;
|
|
s1 := '';
|
|
s2 := 'A';
|
|
s3 := 'abc';
|
|
s4 := 'def';
|
|
|
|
ws1 := '';
|
|
ws2 := 'A';
|
|
ws3 := 'abc';
|
|
ws4 := 'def';
|
|
|
|
// After each test the debugger can check the memusage
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem; // TEST_BREAKPOINT=main
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
CurMemUsed := UsedMem;
|
|
|
|
// access variables again
|
|
TestIntToStrRes(SomeInt);
|
|
TestStrToIntRes(s1);
|
|
TestStrToIntRes(s2);
|
|
TestStrToIntRes(s3);
|
|
TestStrToIntRes(s4);
|
|
|
|
TestStrToIntRes(ws1);
|
|
TestStrToIntRes(ws2);
|
|
TestStrToIntRes(ws3);
|
|
TestStrToIntRes(ws4);
|
|
|
|
|
|
end.
|