mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-23 20:09:32 +02:00
* Added tests for various strutils functions by Karl-Michael Schindler (bug ID 25756)
git-svn-id: trunk@26833 -
This commit is contained in:
parent
1c930b5d24
commit
ff2b6a90d9
.gitattributes
tests/test/units/strutils
7
.gitattributes
vendored
7
.gitattributes
vendored
@ -12268,7 +12268,14 @@ tests/test/units/sharemem/test1.pp svneol=native#text/plain
|
||||
tests/test/units/softfpu/sfttst.pp svneol=native#text/plain
|
||||
tests/test/units/strings/tstrcopy.pp svneol=native#text/plain
|
||||
tests/test/units/strings/tstrings1.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/taddchar.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/taddcharr.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/tbintohex.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/thextobin.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/tiswild.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/tpadcenter.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/tpadleft.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/tpadright.pp svneol=native#text/plain
|
||||
tests/test/units/strutils/tposextest.pp svneol=native#text/plain
|
||||
tests/test/units/system/interlocked1.pp svneol=native#text/plain
|
||||
tests/test/units/system/tabs.pp svneol=native#text/plain
|
||||
|
41
tests/test/units/strutils/taddchar.pp
Normal file
41
tests/test/units/strutils/taddchar.pp
Normal file
@ -0,0 +1,41 @@
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$hints on}
|
||||
{$warnings on}
|
||||
|
||||
uses
|
||||
StrUtils;
|
||||
|
||||
var
|
||||
exitCode: integer = 0;
|
||||
|
||||
procedure addCharTest(c: char;
|
||||
const s: ansistring;
|
||||
n: integer;
|
||||
const expectation: ansistring;
|
||||
const testnr: integer);
|
||||
|
||||
begin
|
||||
if AddChar(c, s, n) <> expectation then
|
||||
begin
|
||||
writeln('Testing strUtils/AddChar: Test ', testnr,
|
||||
' with N = ', n, ' failed.');
|
||||
exitCode := 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
i, j: integer;
|
||||
testString: ansistring;
|
||||
|
||||
begin
|
||||
for i := 1 to 1024 do
|
||||
begin
|
||||
testString := 'abcd';
|
||||
for j := 1 to i - 4 do
|
||||
testString := 'A' + testString;
|
||||
addCharTest('A', 'abcd', i, testString, i);
|
||||
end;
|
||||
|
||||
halt(exitCode);
|
||||
end.
|
41
tests/test/units/strutils/taddcharr.pp
Normal file
41
tests/test/units/strutils/taddcharr.pp
Normal file
@ -0,0 +1,41 @@
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$hints on}
|
||||
{$warnings on}
|
||||
|
||||
uses
|
||||
StrUtils;
|
||||
|
||||
var
|
||||
exitCode: integer = 0;
|
||||
|
||||
procedure addCharRTest(c: char;
|
||||
const s: ansistring;
|
||||
n: integer;
|
||||
const expectation: ansistring;
|
||||
const testnr: integer);
|
||||
|
||||
begin
|
||||
if AddCharR(c, s, n) <> expectation then
|
||||
begin
|
||||
writeln('Testing strUtils/AddCharR: Test ', testnr,
|
||||
' with N = ', n, ' failed.');
|
||||
exitCode := 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
i, j: integer;
|
||||
testString: ansistring;
|
||||
|
||||
begin
|
||||
for i := 1 to 1024 do
|
||||
begin
|
||||
testString := 'abcd';
|
||||
for j := 1 to i - 4 do
|
||||
testString := testString + 'A';
|
||||
addCharRTest('A', 'abcd', i, testString, i);
|
||||
end;
|
||||
|
||||
halt(exitCode);
|
||||
end.
|
80
tests/test/units/strutils/tbintohex.pp
Normal file
80
tests/test/units/strutils/tbintohex.pp
Normal file
@ -0,0 +1,80 @@
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$hints on}
|
||||
{$warnings on}
|
||||
|
||||
uses
|
||||
Strings,
|
||||
StrUtils;
|
||||
|
||||
var
|
||||
exitCode: integer = 0;
|
||||
|
||||
Function Memblock(Size : Integer) : PChar;
|
||||
|
||||
begin
|
||||
Result:=getmem(Size);
|
||||
fillchar(Result^,Size,0);
|
||||
end;
|
||||
|
||||
procedure BinToHexTest(const binValue: Pchar;
|
||||
const binBufSize: integer;
|
||||
const expectation: Pchar;
|
||||
const testnr: integer);
|
||||
var
|
||||
hexValue: Pchar;
|
||||
begin
|
||||
hexValue := memblock(2*binBufSize + 1);
|
||||
BinToHex(binValue, hexValue, binBufSize);
|
||||
if strcomp(hexValue, expectation) <> 0 then
|
||||
begin
|
||||
writeln('Testing strUtils/BinToHex: Test ', testnr, ' failed.');
|
||||
writeln('Returned String: ', hexValue);
|
||||
writeln('Expected String: ', expectation);
|
||||
exitCode := 1;
|
||||
end;
|
||||
FreeMem(hexValue);
|
||||
end;
|
||||
|
||||
const
|
||||
maxLen = 512;
|
||||
codes: array[0..15] of char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
|
||||
|
||||
var
|
||||
i, j, binBufSize, value: integer;
|
||||
testbin: Pchar;
|
||||
testhex: Pchar;
|
||||
|
||||
begin
|
||||
binBufSize := 1;
|
||||
testbin := memblock(binBufSize + 1);
|
||||
testhex := memblock(2*binBufSize + 1);
|
||||
for i := 0 to 255 do
|
||||
begin
|
||||
testbin[0] := char(i);
|
||||
testhex[0] := codes[i div 16];
|
||||
testhex[1] := codes[i mod 16];
|
||||
BinToHexTest(testbin, binBufSize, testhex, 1 + i);
|
||||
end;
|
||||
FreeMem(TestBin);
|
||||
FreeMem(TestHex);
|
||||
randomize;
|
||||
for i := 1 to 1000 do
|
||||
begin
|
||||
binBufSize := 1 + random(maxLen);
|
||||
testbin := memblock(binBufSize + 1);
|
||||
testhex := memblock(2*binBufSize + 1);
|
||||
for j := 0 to binBufSize - 1 do
|
||||
begin
|
||||
value := random(256);
|
||||
testbin[j] := char(value);
|
||||
testhex[2*j] := codes[value div 16];
|
||||
testhex[2*j + 1] := codes[value mod 16];
|
||||
end;
|
||||
BinToHexTest(testbin, binBufSize, testhex, 255 + i);
|
||||
FreeMem(TestBin);
|
||||
FreeMem(TestHex);
|
||||
end;
|
||||
|
||||
halt(exitCode);
|
||||
end.
|
89
tests/test/units/strutils/thextobin.pp
Normal file
89
tests/test/units/strutils/thextobin.pp
Normal file
@ -0,0 +1,89 @@
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$hints on}
|
||||
{$warnings on}
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
StrUtils;
|
||||
|
||||
var
|
||||
exitCode: integer = 0;
|
||||
|
||||
Function Memblock(Size : Integer) : PChar;
|
||||
|
||||
begin
|
||||
Result:=getmem(Size);
|
||||
fillchar(Result^,Size,0);
|
||||
end;
|
||||
|
||||
|
||||
procedure HexToBinTest(const hexValue: Pchar;
|
||||
const binBufSize: integer;
|
||||
const expectation: Pchar;
|
||||
const testnr: integer);
|
||||
var
|
||||
binValue: Pchar;
|
||||
l : Integer;
|
||||
begin
|
||||
L:=(binBufSize - 1 ) div 2 + 1;
|
||||
binValue := memblock(L);
|
||||
HexToBin(hexValue, binValue,L-1);
|
||||
if strcomp(binValue, expectation) <> 0 then
|
||||
begin
|
||||
writeln('Testing strUtils/HexToBin: Test ', testnr, ' failed.');
|
||||
writeln(binBufSize);
|
||||
writeln(strlen(hexValue));
|
||||
writeln(strlen(expectation));
|
||||
writeln(strlen(binValue));
|
||||
write('Hex Input: ', hexValue);
|
||||
writeln('Returned list: ', byte(binValue[0]));
|
||||
writeln('Expected list: ', byte(expectation[0]));
|
||||
exitCode := 1;
|
||||
end;
|
||||
FreeMem(binvalue);
|
||||
end;
|
||||
|
||||
const
|
||||
maxLen = 512;
|
||||
codes: array[0..15] of char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
|
||||
|
||||
var
|
||||
i, j, binBufSize, value: integer;
|
||||
testbin: Pchar;
|
||||
testhex: Pchar;
|
||||
|
||||
begin
|
||||
binBufSize := 3;
|
||||
testhex := memblock(binBufSize);
|
||||
testbin := memblock(2);
|
||||
for i := 0 to 17 do
|
||||
begin
|
||||
testbin[0] := char(i);
|
||||
testhex[0] := codes[i div 16];
|
||||
testhex[1] := codes[i mod 16];
|
||||
HexToBinTest(testhex, binbufsize, testbin, 1 + i);
|
||||
end;
|
||||
FreeMem(testbin);
|
||||
FreeMem(testhex);
|
||||
randomize;
|
||||
for i := 1 to 1000 do
|
||||
begin
|
||||
binBufSize := 1 + random(maxLen);
|
||||
binBufSize := binBufSize * 2;
|
||||
testbin := memblock(binBufSize + 1);
|
||||
testhex := memblock(binBufSize * 2 + 1);
|
||||
for j := 0 to binBufSize - 1 do
|
||||
begin
|
||||
value := random(256);
|
||||
testbin[j] := char(value);
|
||||
testhex[2*j] := codes[value div 16];
|
||||
testhex[2*j + 1] := codes[value mod 16];
|
||||
end;
|
||||
HexToBinTest(testhex, binBufSize * 2 + 1, testbin, 255 + i);
|
||||
FreeMem(testbin);
|
||||
FreeMem(testhex);
|
||||
end;
|
||||
|
||||
halt(exitCode);
|
||||
end.
|
43
tests/test/units/strutils/tpadcenter.pp
Normal file
43
tests/test/units/strutils/tpadcenter.pp
Normal file
@ -0,0 +1,43 @@
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$hints on}
|
||||
{$warnings on}
|
||||
|
||||
uses
|
||||
StrUtils;
|
||||
|
||||
var
|
||||
exitCode: integer = 0;
|
||||
|
||||
procedure padCenterTest(const s: ansistring;
|
||||
n: integer;
|
||||
const expectation: ansistring;
|
||||
const testnr: integer);
|
||||
|
||||
begin
|
||||
if padCenter(s, n) <> expectation then
|
||||
begin
|
||||
writeln('Testing strUtils/PadCenter: Test ', testnr,
|
||||
' with N = ', n, ' failed.');
|
||||
exitCode := 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
i, j: integer;
|
||||
testString: ansistring;
|
||||
|
||||
begin
|
||||
for i := 1 to 1024 do
|
||||
begin
|
||||
testString := 'abcd';
|
||||
for j := 1 to i - 4 do
|
||||
if odd(j) then
|
||||
testString := testString + ' '
|
||||
else
|
||||
testString := ' ' + testString;
|
||||
padCenterTest('abcd', i, testString, i);
|
||||
end;
|
||||
|
||||
halt(exitCode);
|
||||
end.
|
40
tests/test/units/strutils/tpadleft.pp
Normal file
40
tests/test/units/strutils/tpadleft.pp
Normal file
@ -0,0 +1,40 @@
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$hints on}
|
||||
{$warnings on}
|
||||
|
||||
uses
|
||||
StrUtils;
|
||||
|
||||
var
|
||||
exitCode: integer = 0;
|
||||
|
||||
procedure padLeftTest(const s: ansistring;
|
||||
n: integer;
|
||||
const expectation: ansistring;
|
||||
const testnr: integer);
|
||||
|
||||
begin
|
||||
if padLeft(s, n) <> expectation then
|
||||
begin
|
||||
writeln('Testing strUtils/PadLeft: Test ', testnr,
|
||||
' with N = ', n, ' failed.');
|
||||
exitCode := 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
i, j: integer;
|
||||
testString: ansistring;
|
||||
|
||||
begin
|
||||
for i := 1 to 1024 do
|
||||
begin
|
||||
testString := 'abcd';
|
||||
for j := 1 to i - 4 do
|
||||
testString := ' ' + testString;
|
||||
padLeftTest('abcd', i, testString, i);
|
||||
end;
|
||||
|
||||
halt(exitCode);
|
||||
end.
|
40
tests/test/units/strutils/tpadright.pp
Normal file
40
tests/test/units/strutils/tpadright.pp
Normal file
@ -0,0 +1,40 @@
|
||||
{$mode objfpc}
|
||||
{$h+}
|
||||
{$hints on}
|
||||
{$warnings on}
|
||||
|
||||
uses
|
||||
StrUtils;
|
||||
|
||||
var
|
||||
exitCode: integer = 0;
|
||||
|
||||
procedure padRightTest(const s: ansistring;
|
||||
n: integer;
|
||||
const expectation: ansistring;
|
||||
const testnr: integer);
|
||||
|
||||
begin
|
||||
if padRight(s, n) <> expectation then
|
||||
begin
|
||||
writeln('Testing strUtils/PadRight: Test ', testnr,
|
||||
' with N = ', n, ' failed.');
|
||||
exitCode := 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
i, j: integer;
|
||||
testString: ansistring;
|
||||
|
||||
begin
|
||||
for i := 1 to 1024 do
|
||||
begin
|
||||
testString := 'abcd';
|
||||
for j := 1 to i - 4 do
|
||||
testString := testString + ' ';
|
||||
padRightTest('abcd', i, testString, i);
|
||||
end;
|
||||
|
||||
halt(exitCode);
|
||||
end.
|
Loading…
Reference in New Issue
Block a user