tcstrutils.pp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. unit tcstrutils;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testutils, testregistry, strutils;
  6. type
  7. { TTestSearchBuf }
  8. TTestSearchBuf= class(TTestCase)
  9. Private
  10. Procedure TestSearch(Sub:String; Start : Integer; O : TStringSearchOptions; Expected : Integer);
  11. published
  12. procedure TestSimple;
  13. procedure TestSimpleNoRes;
  14. procedure TestSimpleDown;
  15. procedure TestSimpleDownNoRes;
  16. procedure TestNotExistDown;
  17. procedure TestNotExist;
  18. procedure TestSimpleDownPos;
  19. procedure TestSimplePos;
  20. procedure TestSimpleCaseSensitive;
  21. procedure TestSimpleCaseSensitiveDown;
  22. procedure TestSimpleWholeWord;
  23. procedure TestSimpleWholeWordDown;
  24. procedure TestSimplePartialend;
  25. procedure TestSimplePartialStart;
  26. procedure TestEndMatchDown;
  27. procedure TestEndMatch;
  28. end;
  29. implementation
  30. Const
  31. // Don't move this comment, it indicates the positions.
  32. // 1 2 3 4
  33. // 1234567890123456789012345678901234567890123456789
  34. S = 'Some very long string with some words in it';
  35. SLen = Length(S);
  36. Starts : Array[1..3] of Integer = (0,10,41);
  37. {$define usenew}
  38. {$ifdef usenew}
  39. {$i searchbuf.inc}
  40. {$endif}
  41. procedure TTestSearchBuf.TestSearch(Sub: String; Start: Integer;
  42. O: TStringSearchOptions; Expected: Integer);
  43. Var
  44. P,PR : PChar;
  45. I : Integer;
  46. begin
  47. P:=PChar(S);
  48. PR:=SearchBuf(P,Length(S),Start,0,Sub,O);
  49. If (PR=Nil) then
  50. begin
  51. If (Expected<>-1) then
  52. Fail(Format('Search for "%s" failed, expected result at %d',[Sub,Expected]));
  53. end
  54. else
  55. begin
  56. I:=(PR-P)+1;
  57. If (I<>Expected) then
  58. Fail(Format('Wrong result for search for "%s", expected result at %d, got %d',[Sub,Expected,I]));
  59. end;
  60. end;
  61. procedure TTestSearchBuf.TestSimpleNoRes;
  62. begin
  63. TestSearch('very',0,[],-1);
  64. end;
  65. procedure TTestSearchBuf.TestSimple;
  66. begin
  67. TestSearch('very',SLen,[],6);
  68. end;
  69. procedure TTestSearchBuf.TestSimpleDownNoRes;
  70. begin
  71. TestSearch('very',0,[soDown],6);
  72. end;
  73. procedure TTestSearchBuf.TestSimpleDown;
  74. begin
  75. TestSearch('very',SLen,[soDown],-1);
  76. end;
  77. procedure TTestSearchBuf.TestSimplePartialend;
  78. begin
  79. TestSearch('its',0,[soDown],-1);
  80. end;
  81. procedure TTestSearchBuf.TestSimplePartialStart;
  82. begin
  83. TestSearch('Tso',SLen,[],-1);
  84. end;
  85. procedure TTestSearchBuf.TestEndMatchDown;
  86. begin
  87. TestSearch('it',30,[soDown],42);
  88. end;
  89. procedure TTestSearchBuf.TestEndMatch;
  90. begin
  91. TestSearch('it',SLen,[],42);
  92. end;
  93. procedure TTestSearchBuf.TestSimpleDownPos;
  94. begin
  95. TestSearch('it',30,[soDown],42);
  96. end;
  97. procedure TTestSearchBuf.TestSimplePos;
  98. begin
  99. TestSearch('it',30,[],24);
  100. end;
  101. procedure TTestSearchBuf.TestNotExist;
  102. begin
  103. TestSearch('quid',SLen,[],-1);
  104. end;
  105. procedure TTestSearchBuf.TestNotExistDown;
  106. begin
  107. TestSearch('quid',0,[soDown],-1);
  108. end;
  109. procedure TTestSearchBuf.TestSimpleCaseSensitive;
  110. begin
  111. TestSearch('Very',SLen,[soMatchCase],-1);
  112. end;
  113. procedure TTestSearchBuf.TestSimpleCaseSensitiveDown;
  114. begin
  115. TestSearch('Very',0,[soMatchCase,soDown],-1);
  116. end;
  117. procedure TTestSearchBuf.TestSimpleWholeWord;
  118. begin
  119. TestSearch('in',SLen,[soWholeWord],39);
  120. end;
  121. procedure TTestSearchBuf.TestSimpleWholeWordDown;
  122. begin
  123. TestSearch('in',0,[soWholeWord,soDown],39);
  124. end;
  125. initialization
  126. RegisterTest(TTestSearchBuf);
  127. end.