--- Merging r48752 into '.':

U    packages/rtl-objpas/src/inc/strutils.pp
A    tests/test/units/strutils/tboyer.pp
--- Recording mergeinfo for merge of r48752 into '.':
 U   .

# revisions: 48752
r48752 | florian | 2021-02-21 14:54:25 +0100 (Sun, 21 Feb 2021) | 2 lines
Changed paths:
   M /trunk/packages/rtl-objpas/src/inc/strutils.pp
   A /trunk/tests/test/units/strutils/tboyer.pp

  * fix by avk for issue #38513
  + test

git-svn-id: branches/fixes_3_2@49050 -
This commit is contained in:
marco 2021-03-25 12:57:35 +00:00
parent 7eaac123c0
commit fabc7fb50f
3 changed files with 82 additions and 4 deletions

1
.gitattributes vendored
View File

@ -15470,6 +15470,7 @@ 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/tboyer.pp svneol=native#text/pascal
tests/test/units/strutils/tdec2numb.pp svneol=native#text/plain
tests/test/units/strutils/thex2dec.pp svneol=native#text/plain
tests/test/units/strutils/thextobin.pp svneol=native#text/plain

View File

@ -436,8 +436,7 @@ begin
AddMatch(i+1);
//Only first match ?
if not aMatchAll then break;
inc(i,OldPatternSize);
inc(i,OldPatternSize);
inc(i,DeltaJumpTable2[0]);
end else begin
i:=i + Max(DeltaJumpTable1[ord(s[i])],DeltaJumpTable2[j]);
end;
@ -589,8 +588,7 @@ begin
AddMatch(i+1);
//Only first match ?
if not aMatchAll then break;
inc(i,OldPatternSize);
inc(i,OldPatternSize);
inc(i,DeltaJumpTable2[0]);
end else begin
i:=i + Max(DeltaJumpTable1[Ord(lCaseArray[Ord(s[i])])],DeltaJumpTable2[j]);
end;

View File

@ -0,0 +1,79 @@
{$mode objfpc}
uses
StrUtils;
const
result1 : array of SizeInt = (1, 4, 7, 10, 13, 16);
var
a : array of SizeInt;
i : LongInt;
begin
if FindMatchesBoyerMooreCaseSensitive('abcabcabcabcabcabcab','abcab',a,false) then
begin
if Length(a)<>1 then
halt(2);
if a[0]<>result1[0] then
halt(3);
end
else
halt(1);
if FindMatchesBoyerMooreCaseSensitive('abcabcabcabcabcabcab','abcab',a,true) then
begin
if Length(a)<>Length(result1) then
halt(12);
for i:=Low(a) to High(a) do
if a[i]<>result1[i] then
halt(13);
end
else
halt(11);
if FindMatchesBoyerMooreCaseInSensitive('abcabcabcabcabcabcab','abcab',a,false) then
begin
if Length(a)<>1 then
halt(22);
if a[0]<>result1[0] then
halt(23);
end
else
halt(21);
{
apparently not working yet:
if FindMatchesBoyerMooreCaseInSensitive('abcabcabcabcabcabcab','abcab',a,true) then
begin
if Length(a)<>Length(result1) then
halt(32);
for i:=Low(a) to High(a) do
if a[i]<>result1[i] then
halt(33);
end
else
halt(31);
if FindMatchesBoyerMooreCaseInSensitive('abcabcabcAbcabcAbcab','abcaB',a,false) then
begin
if Length(a)<>1 then
halt(42);
if a[0]<>result1[0] then
halt(43);
end
else
halt(41);
if FindMatchesBoyerMooreCaseInSensitive('abcabCabcAbcabcABcab','abcaB',a,true) then
begin
if Length(a)<>Length(result1) then
halt(52);
for i:=Low(a) to High(a) do
if a[i]<>result1[i] then
halt(53);
end
else
halt(51);
}
writeln('ok');
end.