testreg1.pp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892
  1. {$IFDEF FPC}
  2. {$MODE OBJFPC}
  3. {$ENDIF}
  4. program testreg1;
  5. uses
  6. regexpr;
  7. var
  8. r : tregexprengine;
  9. index,len : longint;
  10. S : String;
  11. Dest : AnsiString;
  12. procedure do_error(i : longint);
  13. begin
  14. writeln('error near ',i,' index: ',index,' len: ',len);
  15. halt(1);
  16. end;
  17. var
  18. initok: boolean;
  19. begin
  20. writeln('*** Testing unit regexpr ***');
  21. writeln('*** Searching tests ***');
  22. { basic tests }
  23. initok:=GenerateRegExprEngine('.*',[],r);
  24. if not initok then
  25. do_error(90);
  26. if not(RegExprPos(r,'CXXXX',index,len)) or
  27. (index<>0) or (len<>5) then
  28. do_error(91);
  29. DestroyregExprEngine(r);
  30. { java package name }
  31. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  32. if not initok then
  33. do_error(92);
  34. if not(RegExprPos(r,'CXXXX',index,len)) or
  35. (index<>0) or (len<>5) then
  36. do_error(92);
  37. DestroyregExprEngine(r);
  38. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  39. if not initok then
  40. do_error(92);
  41. if not(RegExprPos(r,'CXXXX.A',index,len)) or
  42. (index<>0) or (len<>7) then
  43. do_error(92);
  44. DestroyregExprEngine(r);
  45. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  46. if not initok then
  47. do_error(92);
  48. if not(RegExprPos(r,'CXXXX.A9Package',index,len)) or
  49. (index<>0) or (len<>15) then
  50. do_error(92);
  51. DestroyregExprEngine(r);
  52. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  53. if not initok then
  54. do_error(92);
  55. if not(RegExprPos(r,'1CXXXX.A9Package',index,len)) or
  56. (index<>1) or (len<>15) then
  57. do_error(92);
  58. DestroyregExprEngine(r);
  59. { singleline }
  60. initok:=GenerateRegExprEngine('^TEST1',[],r);
  61. if not initok then
  62. do_error(101);
  63. if (RegExprPos(r,'THISISATEST1TEST1THIS',index,len)) then
  64. do_error(101);
  65. DestroyregExprEngine(r);
  66. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
  67. if not initok then
  68. do_error(102);
  69. if (RegExprPos(r,'THISISATEST1ANOTHER',index,len)) then
  70. do_error(102);
  71. DestroyregExprEngine(r);
  72. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
  73. if not initok then
  74. do_error(103);
  75. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  76. (index<>0) or (len<>12) then
  77. do_error(103);
  78. DestroyregExprEngine(r);
  79. { multiline }
  80. { UNIX Newline }
  81. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  82. if not initok then
  83. do_error(120);
  84. if not(RegExprPos(r,'THISISATEST1'#10'TEST12',index,len)) or
  85. (index<>13) or (len<>5) then
  86. do_error(120);
  87. DestroyregExprEngine(r);
  88. { Apple Newline }
  89. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  90. if not initok then
  91. do_error(121);
  92. if not(RegExprPos(r,'THISISATEST1'#13'TEST12',index,len)) or
  93. (index<>13) or (len<>5) then
  94. do_error(121);
  95. DestroyregExprEngine(r);
  96. { DOS Newline }
  97. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  98. if not initok then
  99. do_error(122);
  100. if not(RegExprPos(r,'THISISATEST1'#13#10'TEST12',index,len)) or
  101. (index<>14) or (len<>5) then
  102. do_error(122);
  103. DestroyregExprEngine(r);
  104. { IBM Mainframe Newline }
  105. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  106. if not initok then
  107. do_error(123);
  108. if not(RegExprPos(r,'THISISATEST1'#$85'TEST12',index,len)) or
  109. (index<>13) or (len<>5) then
  110. do_error(123);
  111. DestroyregExprEngine(r);
  112. { Some weird cases }
  113. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  114. if not initok then
  115. do_error(124);
  116. if not(RegExprPos(r,#13#10#13#10'TEST12',index,len)) or
  117. (index<>4) or (len<>5) then
  118. do_error(124);
  119. DestroyregExprEngine(r);
  120. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  121. if not initok then
  122. do_error(125);
  123. if RegExprPos(r,#13#10#13#10'F',index,len) then
  124. do_error(125);
  125. DestroyregExprEngine(r);
  126. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[ref_multiline],r);
  127. if not initok then
  128. do_error(102);
  129. if (RegExprPos(r,'THISISATEST1ANOTHER',index,len)) then
  130. do_error(102);
  131. DestroyregExprEngine(r);
  132. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
  133. if not initok then
  134. do_error(103);
  135. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  136. (index<>0) or (len<>12) then
  137. do_error(103);
  138. DestroyregExprEngine(r);
  139. { END OF LINE CASES }
  140. initok:=GenerateRegExprEngine('TEST1$',[],r);
  141. if not initok then
  142. do_error(101);
  143. if (RegExprPos(r,'THISISATEST1TEST1THIS',index,len)) then
  144. do_error(101);
  145. DestroyregExprEngine(r);
  146. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
  147. if not initok then
  148. do_error(102);
  149. if not(RegExprPos(r,'!TEST1ANOTHER',index,len)) or
  150. (index<>1) or (len<>12) then
  151. DestroyregExprEngine(r);
  152. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
  153. if not initok then
  154. do_error(102);
  155. if not(RegExprPos(r,'!TEST1ANOTHERFOOBARTEST1ANOTHER',index,len)) or
  156. (index<>19) or (len<>12) then
  157. DestroyregExprEngine(r);
  158. { UNIX Newline }
  159. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  160. if not initok then
  161. do_error(120);
  162. if not(RegExprPos(r,'THISISATEST1'#10'TEST12',index,len)) or
  163. (index<>7) or (len<>5) then
  164. do_error(120);
  165. DestroyregExprEngine(r);
  166. { Apple Newline }
  167. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  168. if not initok then
  169. do_error(121);
  170. if not(RegExprPos(r,'THISISATEST1'#13'TEST12',index,len)) or
  171. (index<>7) or (len<>5) then
  172. do_error(121);
  173. DestroyregExprEngine(r);
  174. { DOS Newline }
  175. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  176. if not initok then
  177. do_error(122);
  178. if not(RegExprPos(r,'THISISATEST1'#13#10'TEST12',index,len)) or
  179. (index<>7) or (len<>5) then
  180. do_error(122);
  181. DestroyregExprEngine(r);
  182. { IBM Mainframe Newline }
  183. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  184. if not initok then
  185. do_error(123);
  186. if not(RegExprPos(r,'THISISATEST1'#$85'TEST12',index,len)) or
  187. (index<>7) or (len<>5) then
  188. do_error(123);
  189. DestroyregExprEngine(r);
  190. { Some weird cases }
  191. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  192. if not initok then
  193. do_error(124);
  194. if not(RegExprPos(r,#13#10#13#10'TEST1'#13#10,index,len)) or
  195. (index<>4) or (len<>5) then
  196. do_error(124);
  197. DestroyregExprEngine(r);
  198. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  199. if not initok then
  200. do_error(125);
  201. if RegExprPos(r,#13#10#13#10'F'#13#10#13#10,index,len) then
  202. do_error(125);
  203. DestroyregExprEngine(r);
  204. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[ref_multiline],r);
  205. if not initok then
  206. do_error(102);
  207. if (RegExprPos(r,'THISISATEST1ANOTHERFOO',index,len)) then
  208. do_error(102);
  209. DestroyregExprEngine(r);
  210. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
  211. if not initok then
  212. do_error(103);
  213. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  214. (index<>0) or (len<>12) then
  215. do_error(103);
  216. DestroyregExprEngine(r);
  217. { start and end of string handling }
  218. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)$',[],r);
  219. if not initok then
  220. do_error(103);
  221. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  222. (index<>0) or (len<>12) then
  223. do_error(103);
  224. DestroyregExprEngine(r);
  225. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)$',[],r);
  226. if not initok then
  227. do_error(103);
  228. if RegExprPos(r,'FOOTEST1ANOTHER',index,len) then
  229. do_error(103);
  230. DestroyregExprEngine(r);
  231. (* {n,} tests *)
  232. initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
  233. if not initok then
  234. do_error(700);
  235. if not(RegExprPos(r,'C',index,len)) or
  236. (index<>0) or (len<>0) then
  237. do_error(700);
  238. DestroyregExprEngine(r);
  239. initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
  240. if not initok then
  241. do_error(701);
  242. if not(RegExprPos(r,'AZ',index,len)) or
  243. (index<>0) or (len<>2) then
  244. do_error(701);
  245. DestroyregExprEngine(r);
  246. initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
  247. if not initok then
  248. do_error(702);
  249. if not(RegExprPos(r,'AZAZ',index,len)) or
  250. (index<>0) or (len<>4) then
  251. do_error(702);
  252. DestroyregExprEngine(r);
  253. initok:=GenerateRegExprEngine('Cat(AZ){0,}',[],r);
  254. if not initok then
  255. do_error(703);
  256. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  257. (index<>0) or (len<>7) then
  258. do_error(703);
  259. DestroyregExprEngine(r);
  260. initok:=GenerateRegExprEngine('C(AZ){3,}',[],r);
  261. if not initok then
  262. do_error(704);
  263. if (RegExprPos(r,'AZAZAZ',index,len)) then
  264. do_error(704);
  265. DestroyregExprEngine(r);
  266. initok:=GenerateRegExprEngine('Cat(AZ){3,}',[],r);
  267. if not initok then
  268. do_error(705);
  269. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  270. (index<>1) or (len<>9) then
  271. do_error(705);
  272. DestroyregExprEngine(r);
  273. initok:=GenerateRegExprEngine('Cat(AZ){2,}Q',[],r);
  274. if not initok then
  275. do_error(705);
  276. if not(RegExprPos(r,'BCatAZAZAZAZQDABCD',index,len)) or
  277. (index<>1) or (len<>12) then
  278. do_error(705);
  279. DestroyregExprEngine(r);
  280. initok:=GenerateRegExprEngine('CatAZ{0,}',[],r);
  281. if not initok then
  282. do_error(706);
  283. if RegExprPos(r,'BCatDAZZZBCD',index,len) then
  284. do_error(706);
  285. DestroyregExprEngine(r);
  286. (* {n} tests *)
  287. initok:=GenerateRegExprEngine('Cat(AZ){3}',[],r);
  288. if not initok then
  289. do_error(715);
  290. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  291. (index<>1) or (len<>9) then
  292. do_error(715);
  293. DestroyregExprEngine(r);
  294. initok:=GenerateRegExprEngine('CatAz{5}',[],r);
  295. if not initok then
  296. do_error(716);
  297. if not(RegExprPos(r,'BCatAzzzzzDABCD',index,len)) or
  298. (index<>1) or (len<>9) then
  299. do_error(716);
  300. initok:=GenerateRegExprEngine('CatAz{5}',[],r);
  301. if not initok then
  302. do_error(717);
  303. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  304. do_error(717);
  305. DestroyregExprEngine(r);
  306. initok:=GenerateRegExprEngine('CatAz{0}',[],r);
  307. if not initok then
  308. do_error(718);
  309. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  310. do_error(718);
  311. DestroyregExprEngine(r);
  312. (* {n,m} tests *)
  313. initok:=GenerateRegExprEngine('Cat(AZ){1,3}',[],r);
  314. if not initok then
  315. do_error(725);
  316. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  317. (index<>1) or (len<>9) then
  318. do_error(725);
  319. DestroyregExprEngine(r);
  320. initok:=GenerateRegExprEngine('Cat(AZ){1,3}',[],r);
  321. if not initok then
  322. do_error(725);
  323. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  324. (index<>1) or (len<>7) then
  325. do_error(725);
  326. DestroyregExprEngine(r);
  327. initok:=GenerateRegExprEngine('CatAz{1,5}',[],r);
  328. if not initok then
  329. do_error(726);
  330. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  331. (index<>1) or (len<>9) then
  332. do_error(726);
  333. initok:=GenerateRegExprEngine('CatAz{1,1}',[],r);
  334. if not initok then
  335. do_error(727);
  336. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  337. (index<>1) or (len<>5) then
  338. do_error(727);
  339. DestroyregExprEngine(r);
  340. initok:=GenerateRegExprEngine('CatAz{3,4}',[],r);
  341. if not initok then
  342. do_error(728);
  343. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  344. (index<>1) or (len<>8) then
  345. do_error(728);
  346. DestroyregExprEngine(r);
  347. initok:=GenerateRegExprEngine('CatAz{0,0}',[],r);
  348. if not initok then
  349. do_error(729);
  350. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  351. do_error(729);
  352. DestroyregExprEngine(r);
  353. { ()* tests }
  354. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  355. if not initok then
  356. do_error(800);
  357. if not(RegExprPos(r,'C',index,len)) or
  358. (index<>0) or (len<>0) then
  359. do_error(800);
  360. DestroyregExprEngine(r);
  361. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  362. if not initok then
  363. do_error(801);
  364. if not(RegExprPos(r,'AZ',index,len)) or
  365. (index<>0) or (len<>2) then
  366. do_error(801);
  367. DestroyregExprEngine(r);
  368. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  369. if not initok then
  370. do_error(802);
  371. if not(RegExprPos(r,'AZAZ',index,len)) or
  372. (index<>0) or (len<>4) then
  373. do_error(802);
  374. DestroyregExprEngine(r);
  375. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  376. if not initok then
  377. do_error(803);
  378. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  379. (index<>0) or (len<>7) then
  380. do_error(803);
  381. DestroyregExprEngine(r);
  382. initok:=GenerateRegExprEngine('C(AZ)*',[],r);
  383. if not initok then
  384. do_error(804);
  385. if (RegExprPos(r,'AZAZ',index,len)) then
  386. do_error(804);
  387. DestroyregExprEngine(r);
  388. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  389. if not initok then
  390. do_error(805);
  391. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  392. (index<>1) or (len<>7) then
  393. do_error(805);
  394. DestroyregExprEngine(r);
  395. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  396. if not initok then
  397. do_error(806);
  398. if not(RegExprPos(r,'BCatDABCD',index,len)) or
  399. (index<>1) or (len<>3) then
  400. do_error(806);
  401. DestroyregExprEngine(r);
  402. { ()+ tests }
  403. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  404. if not initok then
  405. do_error(850);
  406. if (RegExprPos(r,'C',index,len)) then
  407. do_error(850);
  408. DestroyregExprEngine(r);
  409. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  410. if not initok then
  411. do_error(851);
  412. if not(RegExprPos(r,'AZ',index,len)) or
  413. (index<>0) or (len<>2) then
  414. do_error(851);
  415. DestroyregExprEngine(r);
  416. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  417. if not initok then
  418. do_error(852);
  419. if not(RegExprPos(r,'AZAZ',index,len)) or
  420. (index<>0) or (len<>4) then
  421. do_error(852);
  422. DestroyregExprEngine(r);
  423. initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
  424. if not initok then
  425. do_error(853);
  426. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  427. (index<>0) or (len<>7) then
  428. do_error(853);
  429. DestroyregExprEngine(r);
  430. initok:=GenerateRegExprEngine('C(AZ)+',[],r);
  431. if not initok then
  432. do_error(854);
  433. if (RegExprPos(r,'AZAZ',index,len)) then
  434. do_error(854);
  435. DestroyregExprEngine(r);
  436. initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
  437. if not initok then
  438. do_error(855);
  439. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  440. (index<>1) or (len<>7) then
  441. do_error(855);
  442. DestroyregExprEngine(r);
  443. { ()? tests }
  444. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  445. if not initok then
  446. do_error(900);
  447. if not(RegExprPos(r,'C',index,len)) or
  448. (index<>0) or (len<>0) then
  449. do_error(900);
  450. DestroyregExprEngine(r);
  451. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  452. if not initok then
  453. do_error(901);
  454. if not(RegExprPos(r,'AZ',index,len)) or
  455. (index<>0) or (len<>2) then
  456. do_error(901);
  457. DestroyregExprEngine(r);
  458. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  459. if not initok then
  460. do_error(902);
  461. if not(RegExprPos(r,'AZAZ',index,len)) or
  462. (index<>0) or (len<>2) then
  463. do_error(902);
  464. DestroyregExprEngine(r);
  465. GenerateRegExprEngine('Cat(AZ)?',[],r);
  466. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  467. (index<>0) or (len<>5) then
  468. do_error(903);
  469. DestroyregExprEngine(r);
  470. GenerateRegExprEngine('C(AZ)?',[],r);
  471. if (RegExprPos(r,'AZAZ',index,len)) then
  472. do_error(904);
  473. DestroyregExprEngine(r);
  474. GenerateRegExprEngine('Cat(AZ)?',[],r);
  475. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  476. (index<>1) or (len<>5) then
  477. do_error(905);
  478. DestroyregExprEngine(r);
  479. GenerateRegExprEngine('Cat(AZ)?',[],r);
  480. if not(RegExprPos(r,'BCatDABCD',index,len)) or
  481. (index<>1) or (len<>3) then
  482. do_error(906);
  483. DestroyregExprEngine(r);
  484. { Character classes tests }
  485. GenerateRegExprEngine('[A-Z]',[],r);
  486. if not(RegExprPos(r,'234578923457823659GHJK38',index,len)) or
  487. (index<>18) or (len<>1) then
  488. do_error(1000);
  489. DestroyregExprEngine(r);
  490. GenerateRegExprEngine('[A-Z]*',[],r);
  491. if not(RegExprPos(r,'2345ARTZU38',index,len)) or
  492. (index<>0) or (len<>0) then
  493. do_error(1002);
  494. DestroyregExprEngine(r);
  495. GenerateRegExprEngine('[A-Z]+',[],r);
  496. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  497. (index<>18) or (len<>5) then
  498. do_error(1003);
  499. DestroyregExprEngine(r);
  500. GenerateRegExprEngine('[A-Z][A-Z]*',[],r);
  501. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  502. (index<>18) or (len<>5) then
  503. do_error(1004);
  504. DestroyregExprEngine(r);
  505. GenerateRegExprEngine('[A-Z][A-Z]?',[],r);
  506. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  507. (index<>18) or (len<>2) then
  508. do_error(1005);
  509. DestroyregExprEngine(r);
  510. GenerateRegExprEngine('[^\d]+',[],r);
  511. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  512. (index<>18) or (len<>5) then
  513. do_error(1006);
  514. DestroyregExprEngine(r);
  515. { test chaining }
  516. GenerateRegExprEngine('[A-Z][A-Z]?[A-Z]',[],r);
  517. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  518. (index<>18) or (len<>3) then
  519. do_error(1007);
  520. DestroyregExprEngine(r);
  521. GenerateRegExprEngine('[A-Z][A-Z]*[0-9]',[],r);
  522. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  523. (index<>18) or (len<>6) then
  524. do_error(1008);
  525. DestroyregExprEngine(r);
  526. GenerateRegExprEngine('[A-Z]+[0-9]',[],r);
  527. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  528. (index<>18) or (len<>6) then
  529. do_error(1009);
  530. DestroyregExprEngine(r);
  531. { case insensitive: }
  532. GenerateRegExprEngine('[A-Z]',[ref_caseinsensitive],r);
  533. if not(RegExprPos(r,'234578923457823659a38',index,len)) or
  534. (index<>18) or (len<>1) then
  535. do_error(1100);
  536. DestroyregExprEngine(r);
  537. { case insensitive: }
  538. GenerateRegExprEngine('[a-z]',[ref_caseinsensitive],r);
  539. if not(RegExprPos(r,'234578923457823659A38',index,len)) or
  540. (index<>18) or (len<>1) then
  541. do_error(1101);
  542. DestroyregExprEngine(r);
  543. { with parenthsis }
  544. GenerateRegExprEngine('(foo)1234',[],r);
  545. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  546. (index<>7) or (len<>7) then
  547. do_error(1200);
  548. DestroyregExprEngine(r);
  549. GenerateRegExprEngine('(((foo)))1234',[],r);
  550. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  551. (index<>7) or (len<>7) then
  552. do_error(1201);
  553. DestroyregExprEngine(r);
  554. GenerateRegExprEngine('(foo)(1234)',[],r);
  555. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  556. (index<>7) or (len<>7) then
  557. do_error(1202);
  558. DestroyregExprEngine(r);
  559. { test real backtracking }
  560. r:=GenerateRegExprEngine('nofoo|foo',[]);
  561. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  562. (index<>7) or (len<>3) then
  563. do_error(1300);
  564. DestroyregExprEngine(r);
  565. GenerateRegExprEngine('abc\(123\)$',[],r);
  566. if not (RegExprPos(r,'1234 abc(123)', index, len)) or
  567. (index <> 5) or (len <> 8) then
  568. do_error (1400);
  569. DestroyregExprEngine(r);
  570. GenerateRegExprEngine('^\t$',[ref_singleline],r);
  571. if not (RegExprPos(r,#9, index, len)) or
  572. (index <> 0) or (len <> 1) then
  573. do_error (1401);
  574. DestroyregExprEngine(r);
  575. GenerateRegExprEngine('^\n$',[ref_singleline],r);
  576. if not (RegExprPos(r,#10, index, len)) or
  577. (index <> 0) or (len <> 1) then
  578. do_error (1402);
  579. DestroyregExprEngine(r);
  580. GenerateRegExprEngine('^\f$',[ref_singleline],r);
  581. if not (RegExprPos(r,#12, index, len)) or
  582. (index <> 0) or (len <> 1) then
  583. do_error (1403);
  584. DestroyregExprEngine(r);
  585. GenerateRegExprEngine('^\r$',[ref_singleline],r);
  586. if not (RegExprPos(r,#13, index, len)) or
  587. (index <> 0) or (len <> 1) then
  588. do_error (1404);
  589. DestroyregExprEngine(r);
  590. GenerateRegExprEngine('^\a$',[ref_singleline],r);
  591. if not (RegExprPos(r,#7, index, len)) or
  592. (index <> 0) or (len <> 1) then
  593. do_error (1405);
  594. DestroyregExprEngine(r);
  595. initok:=GenerateRegExprEngine('^(([^:/?#]+):)',[],r);
  596. if not (RegExprPos(r,'http:',index, len)) or
  597. (index <> 0) or (len <> 5) then
  598. do_error (1406);
  599. DestroyregExprEngine(r);
  600. initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?',[],r);
  601. if not initok then
  602. do_error(1407);
  603. if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
  604. (index <> 0) or (len <> 20) then
  605. do_error (1407);
  606. DestroyregExprEngine(r);
  607. initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?',[],r);
  608. if not initok then
  609. do_error(1408);
  610. if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
  611. (index <> 0) or (len <> 20) then
  612. do_error (1408);
  613. writeln('*** Escaping tests ***');
  614. s := '^Hello World \. [a-z] \D { } |() ?a*.*\\ 1 $';
  615. if RegExprEscapeStr(s)<>'\^Hello World \\\. \[a\-z\] \\D \{ \} \|\(\) \?a\*\.\*\\\\ 1 \$' then
  616. do_error(1450);
  617. writeln('*** More search tests ***');
  618. initok:=GenerateRegExprEngine('((nofoo)|(foo))1234',[],r);
  619. if not initok then
  620. do_error(1501);
  621. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  622. (index<>7) or (len<>9) then
  623. do_error(1501);
  624. DestroyregExprEngine(r);
  625. initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherbar))1234',[],r);
  626. if not initok then
  627. do_error(1502);
  628. if not(RegExprPos(r,'anotherbar1234XXXX',index,len)) or
  629. (index<>0) or (len<>14) then
  630. do_error(1502);
  631. DestroyregExprEngine(r);
  632. initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherfoo))1234',[],r);
  633. if not initok then
  634. do_error(1503);
  635. if not(RegExprPos(r,'1234 anotherfoo1234XXXX',index,len)) or
  636. (index<>7) or (len<>14) then
  637. do_error(1503);
  638. DestroyregExprEngine(r);
  639. initok:=GenerateRegExprEngine('(nofoo1234)|(foo1234)',[],r);
  640. if not initok then
  641. do_error(1504);
  642. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  643. (index<>7) or (len<>7) then
  644. do_error(1504);
  645. DestroyregExprEngine(r);
  646. initok:=GenerateRegExprEngine('((foo)|(nofoo))1234',[],r);
  647. if not initok then
  648. do_error(1505);
  649. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  650. (index<>7) or (len<>9) then
  651. do_error(1505);
  652. DestroyregExprEngine(r);
  653. initok:=GenerateRegExprEngine('\.localhost$',[],r);
  654. if not initok then
  655. do_error(1506);
  656. if not(RegExprPos(r,'exsample.localhost',index,len)) or
  657. (index<>8) or (len<>10) then
  658. do_error(1506);
  659. DestroyregExprEngine(r);
  660. initok:=GenerateRegExprEngine('[^e]\.localhost$',[],r);
  661. if not initok then
  662. do_error(1507);
  663. if RegExprPos(r,'exsample.localhost',index,len) then
  664. do_error(1507);
  665. DestroyregExprEngine(r);
  666. initok:=GenerateRegExprEngine('.*[^e]\.localhost$',[],r);
  667. if not initok then
  668. do_error(1508);
  669. if RegExprPos(r,'exsample.localhost',index,len) then
  670. do_error(1508);
  671. DestroyregExprEngine(r);
  672. initok:=GenerateRegExprEngine('x.*[^e]\.localhost$',[],r);
  673. if not initok then
  674. do_error(1509);
  675. if RegExprPos(r,'exsample.localhost',index,len) then
  676. do_error(1509);
  677. DestroyregExprEngine(r);
  678. initok:=GenerateRegExprEngine('(nofoo|foo)1234',[],r);
  679. if not initok then
  680. do_error(1500);
  681. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  682. (index<>7) or (len<>9) then
  683. do_error(1500);
  684. DestroyregExprEngine(r);
  685. r:=GenerateRegExprEngine('(nofoo|foo|anotherfoo)1234',[]);
  686. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  687. (index<>7) or (len<>9) then
  688. do_error(1009);
  689. DestroyregExprEngine(r);
  690. r:=GenerateRegExprEngine('nofoo1234|foo1234',[]);
  691. if {(r.data=nil) or} not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  692. (index<>7) or (len<>7) then
  693. do_error(1010);
  694. DestroyregExprEngine(r);
  695. { *************************************************************************
  696. replacement tests
  697. ************************************************************************* }
  698. writeln('*** Replacement tests ***');
  699. initok:=GenerateRegExprEngine('fa',[],r);
  700. if not initok then
  701. do_error(2000);
  702. if (RegExprReplaceAll(r,'asdfasdf','',Dest)<>1) or
  703. (Dest<>'asdsdf') then
  704. do_error(2001);
  705. DestroyregExprEngine(r);
  706. initok:=GenerateRegExprEngine('fa',[],r);
  707. if not initok then
  708. do_error(2002);
  709. if (RegExprReplaceAll(r,'fa','',Dest)<>1) or
  710. (Dest<>'') then
  711. do_error(2003);
  712. DestroyregExprEngine(r);
  713. initok:=GenerateRegExprEngine('fa',[],r);
  714. if not initok then
  715. do_error(2004);
  716. if RegExprReplaceAll(r,'','',Dest)<>0then
  717. do_error(2005);
  718. DestroyregExprEngine(r);
  719. initok:=GenerateRegExprEngine('fa',[],r);
  720. if not initok then
  721. do_error(2006);
  722. if (RegExprReplaceAll(r,'asdfafaasd','',Dest)<>2) or
  723. (Dest<>'asdasd') then
  724. do_error(2007);
  725. DestroyregExprEngine(r);
  726. initok:=GenerateRegExprEngine('fa',[],r);
  727. if not initok then
  728. do_error(2008);
  729. if (RegExprReplaceAll(r,'asdfafaasdasdfafaasd','',Dest)<>4) or
  730. (Dest<>'asdasdasdasd') then
  731. do_error(2009);
  732. DestroyregExprEngine(r);
  733. initok:=GenerateRegExprEngine('fa',[],r);
  734. if not initok then
  735. do_error(2000);
  736. if (RegExprReplaceAll(r,'fasdfasdf','',Dest)<>2) or
  737. (Dest<>'sdsdf') then
  738. do_error(2010);
  739. DestroyregExprEngine(r);
  740. initok:=GenerateRegExprEngine('fa',[],r);
  741. if not initok then
  742. do_error(2011);
  743. if (RegExprReplaceAll(r,'fasdfafaasdasdfafaasd','',Dest)<>5) or
  744. (Dest<>'sdasdasdasd') then
  745. do_error(2012);
  746. DestroyregExprEngine(r);
  747. writeln('*** Testing unit regexpr was successful ***');
  748. end.