* fix by avk for issue #38513

+ test

git-svn-id: trunk@48752 -
This commit is contained in:
florian 2021-02-21 13:54:25 +00:00
parent 3d0eac3ee6
commit 17a3ca31ff
3 changed files with 82 additions and 4 deletions

1
.gitattributes vendored
View File

@ -16149,6 +16149,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

@ -429,8 +429,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;
@ -582,8 +581,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.