testreg1.pp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. {$MODE OBJFPC}
  2. program testreg1;
  3. uses
  4. regexpr;
  5. var
  6. r : tregexprengine;
  7. index,len : longint;
  8. S : String;
  9. procedure do_error(i : longint);
  10. begin
  11. writeln('error near ',i,' index: ',index,' len: ',len);
  12. halt(1);
  13. end;
  14. begin
  15. writeln('*** Testing unit regexpr ***');
  16. { basic tests }
  17. r:=GenerateRegExprEngine('[A-Z]',[]);
  18. if not(RegExprPos(r,'234578923457823659GHJK38',index,len)) or
  19. (index<>18) or (len<>1) then
  20. do_error(1000);
  21. DestroyregExprEngine(r);
  22. r:=GenerateRegExprEngine('[A-Z]*',[]);
  23. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  24. { is this result correct ??? }
  25. (index<>0) or (len<>0) then
  26. do_error(1002);
  27. DestroyregExprEngine(r);
  28. r:=GenerateRegExprEngine('[A-Z]+',[]);
  29. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  30. (index<>18) or (len<>5) then
  31. do_error(1003);
  32. DestroyregExprEngine(r);
  33. r:=GenerateRegExprEngine('[A-Z][A-Z]*',[]);
  34. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  35. (index<>18) or (len<>5) then
  36. do_error(1004);
  37. DestroyregExprEngine(r);
  38. r:=GenerateRegExprEngine('[A-Z][A-Z]?',[]);
  39. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  40. (index<>18) or (len<>2) then
  41. do_error(1005);
  42. DestroyregExprEngine(r);
  43. r:=GenerateRegExprEngine('[^\d]+',[]);
  44. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  45. (index<>18) or (len<>5) then
  46. do_error(1006);
  47. DestroyregExprEngine(r);
  48. { test chaining }
  49. r:=GenerateRegExprEngine('[A-Z][A-Z]?[A-Z]',[]);
  50. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  51. (index<>18) or (len<>3) then
  52. do_error(1007);
  53. DestroyregExprEngine(r);
  54. r:=GenerateRegExprEngine('[A-Z][A-Z]*[0-9]',[]);
  55. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  56. (index<>18) or (len<>6) then
  57. do_error(1008);
  58. DestroyregExprEngine(r);
  59. r:=GenerateRegExprEngine('[A-Z]+[0-9]',[]);
  60. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  61. (index<>18) or (len<>6) then
  62. do_error(1009);
  63. DestroyregExprEngine(r);
  64. { case insensitive: }
  65. r:=GenerateRegExprEngine('[A-Z]',[ref_caseinsensitive]);
  66. if not(RegExprPos(r,'234578923457823659a38',index,len)) or
  67. (index<>18) or (len<>1) then
  68. do_error(1100);
  69. DestroyregExprEngine(r);
  70. { case insensitive: }
  71. r:=GenerateRegExprEngine('[a-z]',[ref_caseinsensitive]);
  72. if not(RegExprPos(r,'234578923457823659A38',index,len)) or
  73. (index<>18) or (len<>1) then
  74. do_error(1101);
  75. DestroyregExprEngine(r);
  76. { with parenthsis }
  77. r:=GenerateRegExprEngine('(foo)1234',[]);
  78. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  79. (index<>7) or (len<>7) then
  80. do_error(1200);
  81. DestroyregExprEngine(r);
  82. r:=GenerateRegExprEngine('(((foo)))1234',[]);
  83. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  84. (index<>7) or (len<>7) then
  85. do_error(1201);
  86. DestroyregExprEngine(r);
  87. r:=GenerateRegExprEngine('(foo)(1234)',[]);
  88. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  89. (index<>7) or (len<>7) then
  90. do_error(1202);
  91. DestroyregExprEngine(r);
  92. { test real backtracking }
  93. (* r:=GenerateRegExprEngine('nofoo|foo',[]);
  94. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  95. (index<>7) or (len<>3) then
  96. do_error(1300);
  97. DestroyregExprEngine(r);*)
  98. r := GenerateRegExprEngine('abc\(123\)$',[]);
  99. if not (RegExprPos(r,'1234 abc(123)', index, len)) or
  100. (index <> 5) or (len <> 8) then
  101. do_error (1400);
  102. DestroyregExprEngine(r);
  103. r := GenerateRegExprEngine('^\t$',[ref_singleline]);
  104. if not (RegExprPos(r,#9, index, len)) or
  105. (index <> 0) or (len <> 1) then
  106. do_error (1401);
  107. DestroyregExprEngine(r);
  108. r := GenerateRegExprEngine('^\n$',[ref_singleline]);
  109. if not (RegExprPos(r,#10, index, len)) or
  110. (index <> 0) or (len <> 1) then
  111. do_error (1402);
  112. DestroyregExprEngine(r);
  113. r := GenerateRegExprEngine('^\f$',[ref_singleline]);
  114. if not (RegExprPos(r,#12, index, len)) or
  115. (index <> 0) or (len <> 1) then
  116. do_error (1403);
  117. DestroyregExprEngine(r);
  118. r := GenerateRegExprEngine('^\r$',[ref_singleline]);
  119. if not (RegExprPos(r,#13, index, len)) or
  120. (index <> 0) or (len <> 1) then
  121. do_error (1404);
  122. DestroyregExprEngine(r);
  123. r := GenerateRegExprEngine('^\a$',[ref_singleline]);
  124. if not (RegExprPos(r,#7, index, len)) or
  125. (index <> 0) or (len <> 1) then
  126. do_error (1405);
  127. DestroyregExprEngine(r);
  128. s := '^Hello World \. [a-z] \D { } |() ?a*.*\\ 1 $';
  129. writeln ('Before Escaping: ', s);
  130. writeln ('Afther Escaping: ', RegExprEscapeStr(s));
  131. {
  132. r:=GenerateRegExprEngine('(nofoo|foo)1234',[]);
  133. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  134. (index<>8) or (len<>9) then
  135. do_error(1008);
  136. DestroyregExprEngine(r);
  137. r:=GenerateRegExprEngine('(nofoo|foo|anotherfoo)1234',[]);
  138. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  139. (index<>8) or (len<>9) then
  140. do_error(1009);
  141. DestroyregExprEngine(r);
  142. r:=GenerateRegExprEngine('nofoo1234|foo1234',[]);
  143. if (r.data=nil) or not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  144. (index<>7) or (len<>7) then
  145. do_error(1010);
  146. DestroyregExprEngine(r);
  147. }
  148. writeln('*** Testing unit regexpr was successful ***');
  149. end.