testreg1.pp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  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('CatAZ{0,}',[],r);
  274. if not initok then
  275. do_error(706);
  276. if RegExprPos(r,'BCatDAZZZBCD',index,len) then
  277. do_error(706);
  278. DestroyregExprEngine(r);
  279. (* {n} tests *)
  280. initok:=GenerateRegExprEngine('Cat(AZ){3}',[],r);
  281. if not initok then
  282. do_error(715);
  283. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  284. (index<>1) or (len<>9) then
  285. do_error(715);
  286. DestroyregExprEngine(r);
  287. initok:=GenerateRegExprEngine('CatAz{5}',[],r);
  288. if not initok then
  289. do_error(716);
  290. if not(RegExprPos(r,'BCatAzzzzzDABCD',index,len)) or
  291. (index<>1) or (len<>9) then
  292. do_error(716);
  293. initok:=GenerateRegExprEngine('CatAz{5}',[],r);
  294. if not initok then
  295. do_error(717);
  296. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  297. do_error(717);
  298. DestroyregExprEngine(r);
  299. initok:=GenerateRegExprEngine('CatAz{0}',[],r);
  300. if not initok then
  301. do_error(718);
  302. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  303. do_error(718);
  304. DestroyregExprEngine(r);
  305. (* {n,m} tests *)
  306. initok:=GenerateRegExprEngine('Cat(AZ){1,3}',[],r);
  307. if not initok then
  308. do_error(725);
  309. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  310. (index<>1) or (len<>9) then
  311. do_error(725);
  312. DestroyregExprEngine(r);
  313. initok:=GenerateRegExprEngine('CatAz{1,5}',[],r);
  314. if not initok then
  315. do_error(726);
  316. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  317. (index<>1) or (len<>9) then
  318. do_error(726);
  319. initok:=GenerateRegExprEngine('CatAz{1,1}',[],r);
  320. if not initok then
  321. do_error(727);
  322. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  323. (index<>1) or (len<>5) then
  324. do_error(727);
  325. DestroyregExprEngine(r);
  326. initok:=GenerateRegExprEngine('CatAz{3,4}',[],r);
  327. if not initok then
  328. do_error(728);
  329. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  330. (index<>1) or (len<>8) then
  331. do_error(728);
  332. DestroyregExprEngine(r);
  333. initok:=GenerateRegExprEngine('CatAz{0,0}',[],r);
  334. if not initok then
  335. do_error(729);
  336. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  337. do_error(729);
  338. DestroyregExprEngine(r);
  339. { ()* tests }
  340. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  341. if not initok then
  342. do_error(800);
  343. if not(RegExprPos(r,'C',index,len)) or
  344. (index<>0) or (len<>0) then
  345. do_error(800);
  346. DestroyregExprEngine(r);
  347. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  348. if not initok then
  349. do_error(801);
  350. if not(RegExprPos(r,'AZ',index,len)) or
  351. (index<>0) or (len<>2) then
  352. do_error(801);
  353. DestroyregExprEngine(r);
  354. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  355. if not initok then
  356. do_error(802);
  357. if not(RegExprPos(r,'AZAZ',index,len)) or
  358. (index<>0) or (len<>4) then
  359. do_error(802);
  360. DestroyregExprEngine(r);
  361. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  362. if not initok then
  363. do_error(803);
  364. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  365. (index<>0) or (len<>7) then
  366. do_error(803);
  367. DestroyregExprEngine(r);
  368. initok:=GenerateRegExprEngine('C(AZ)*',[],r);
  369. if not initok then
  370. do_error(804);
  371. if (RegExprPos(r,'AZAZ',index,len)) then
  372. do_error(804);
  373. DestroyregExprEngine(r);
  374. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  375. if not initok then
  376. do_error(805);
  377. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  378. (index<>1) or (len<>7) then
  379. do_error(805);
  380. DestroyregExprEngine(r);
  381. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  382. if not initok then
  383. do_error(806);
  384. if not(RegExprPos(r,'BCatDABCD',index,len)) or
  385. (index<>1) or (len<>3) then
  386. do_error(806);
  387. DestroyregExprEngine(r);
  388. { ()+ tests }
  389. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  390. if not initok then
  391. do_error(850);
  392. if (RegExprPos(r,'C',index,len)) then
  393. do_error(850);
  394. DestroyregExprEngine(r);
  395. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  396. if not initok then
  397. do_error(851);
  398. if not(RegExprPos(r,'AZ',index,len)) or
  399. (index<>0) or (len<>2) then
  400. do_error(851);
  401. DestroyregExprEngine(r);
  402. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  403. if not initok then
  404. do_error(852);
  405. if not(RegExprPos(r,'AZAZ',index,len)) or
  406. (index<>0) or (len<>4) then
  407. do_error(852);
  408. DestroyregExprEngine(r);
  409. initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
  410. if not initok then
  411. do_error(853);
  412. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  413. (index<>0) or (len<>7) then
  414. do_error(853);
  415. DestroyregExprEngine(r);
  416. initok:=GenerateRegExprEngine('C(AZ)+',[],r);
  417. if not initok then
  418. do_error(854);
  419. if (RegExprPos(r,'AZAZ',index,len)) then
  420. do_error(854);
  421. DestroyregExprEngine(r);
  422. initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
  423. if not initok then
  424. do_error(855);
  425. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  426. (index<>1) or (len<>7) then
  427. do_error(855);
  428. DestroyregExprEngine(r);
  429. { ()? tests }
  430. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  431. if not initok then
  432. do_error(900);
  433. if not(RegExprPos(r,'C',index,len)) or
  434. (index<>0) or (len<>0) then
  435. do_error(900);
  436. DestroyregExprEngine(r);
  437. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  438. if not initok then
  439. do_error(901);
  440. if not(RegExprPos(r,'AZ',index,len)) or
  441. (index<>0) or (len<>2) then
  442. do_error(901);
  443. DestroyregExprEngine(r);
  444. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  445. if not initok then
  446. do_error(902);
  447. if not(RegExprPos(r,'AZAZ',index,len)) or
  448. (index<>0) or (len<>2) then
  449. do_error(902);
  450. DestroyregExprEngine(r);
  451. GenerateRegExprEngine('Cat(AZ)?',[],r);
  452. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  453. (index<>0) or (len<>5) then
  454. do_error(903);
  455. DestroyregExprEngine(r);
  456. GenerateRegExprEngine('C(AZ)?',[],r);
  457. if (RegExprPos(r,'AZAZ',index,len)) then
  458. do_error(904);
  459. DestroyregExprEngine(r);
  460. GenerateRegExprEngine('Cat(AZ)?',[],r);
  461. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  462. (index<>1) or (len<>5) then
  463. do_error(905);
  464. DestroyregExprEngine(r);
  465. GenerateRegExprEngine('Cat(AZ)?',[],r);
  466. if not(RegExprPos(r,'BCatDABCD',index,len)) or
  467. (index<>1) or (len<>3) then
  468. do_error(906);
  469. DestroyregExprEngine(r);
  470. { Character classes tests }
  471. GenerateRegExprEngine('[A-Z]',[],r);
  472. if not(RegExprPos(r,'234578923457823659GHJK38',index,len)) or
  473. (index<>18) or (len<>1) then
  474. do_error(1000);
  475. DestroyregExprEngine(r);
  476. GenerateRegExprEngine('[A-Z]*',[],r);
  477. if not(RegExprPos(r,'2345ARTZU38',index,len)) or
  478. (index<>0) or (len<>0) then
  479. do_error(1002);
  480. DestroyregExprEngine(r);
  481. GenerateRegExprEngine('[A-Z]+',[],r);
  482. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  483. (index<>18) or (len<>5) then
  484. do_error(1003);
  485. DestroyregExprEngine(r);
  486. GenerateRegExprEngine('[A-Z][A-Z]*',[],r);
  487. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  488. (index<>18) or (len<>5) then
  489. do_error(1004);
  490. DestroyregExprEngine(r);
  491. GenerateRegExprEngine('[A-Z][A-Z]?',[],r);
  492. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  493. (index<>18) or (len<>2) then
  494. do_error(1005);
  495. DestroyregExprEngine(r);
  496. GenerateRegExprEngine('[^\d]+',[],r);
  497. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  498. (index<>18) or (len<>5) then
  499. do_error(1006);
  500. DestroyregExprEngine(r);
  501. { test chaining }
  502. GenerateRegExprEngine('[A-Z][A-Z]?[A-Z]',[],r);
  503. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  504. (index<>18) or (len<>3) then
  505. do_error(1007);
  506. DestroyregExprEngine(r);
  507. GenerateRegExprEngine('[A-Z][A-Z]*[0-9]',[],r);
  508. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  509. (index<>18) or (len<>6) then
  510. do_error(1008);
  511. DestroyregExprEngine(r);
  512. GenerateRegExprEngine('[A-Z]+[0-9]',[],r);
  513. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  514. (index<>18) or (len<>6) then
  515. do_error(1009);
  516. DestroyregExprEngine(r);
  517. { case insensitive: }
  518. GenerateRegExprEngine('[A-Z]',[ref_caseinsensitive],r);
  519. if not(RegExprPos(r,'234578923457823659a38',index,len)) or
  520. (index<>18) or (len<>1) then
  521. do_error(1100);
  522. DestroyregExprEngine(r);
  523. { case insensitive: }
  524. GenerateRegExprEngine('[a-z]',[ref_caseinsensitive],r);
  525. if not(RegExprPos(r,'234578923457823659A38',index,len)) or
  526. (index<>18) or (len<>1) then
  527. do_error(1101);
  528. DestroyregExprEngine(r);
  529. { with parenthsis }
  530. GenerateRegExprEngine('(foo)1234',[],r);
  531. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  532. (index<>7) or (len<>7) then
  533. do_error(1200);
  534. DestroyregExprEngine(r);
  535. GenerateRegExprEngine('(((foo)))1234',[],r);
  536. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  537. (index<>7) or (len<>7) then
  538. do_error(1201);
  539. DestroyregExprEngine(r);
  540. GenerateRegExprEngine('(foo)(1234)',[],r);
  541. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  542. (index<>7) or (len<>7) then
  543. do_error(1202);
  544. DestroyregExprEngine(r);
  545. { test real backtracking }
  546. (* r:=GenerateRegExprEngine('nofoo|foo',[]);
  547. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  548. (index<>7) or (len<>3) then
  549. do_error(1300);
  550. DestroyregExprEngine(r);*)
  551. GenerateRegExprEngine('abc\(123\)$',[],r);
  552. if not (RegExprPos(r,'1234 abc(123)', index, len)) or
  553. (index <> 5) or (len <> 8) then
  554. do_error (1400);
  555. DestroyregExprEngine(r);
  556. GenerateRegExprEngine('^\t$',[ref_singleline],r);
  557. if not (RegExprPos(r,#9, index, len)) or
  558. (index <> 0) or (len <> 1) then
  559. do_error (1401);
  560. DestroyregExprEngine(r);
  561. GenerateRegExprEngine('^\n$',[ref_singleline],r);
  562. if not (RegExprPos(r,#10, index, len)) or
  563. (index <> 0) or (len <> 1) then
  564. do_error (1402);
  565. DestroyregExprEngine(r);
  566. GenerateRegExprEngine('^\f$',[ref_singleline],r);
  567. if not (RegExprPos(r,#12, index, len)) or
  568. (index <> 0) or (len <> 1) then
  569. do_error (1403);
  570. DestroyregExprEngine(r);
  571. GenerateRegExprEngine('^\r$',[ref_singleline],r);
  572. if not (RegExprPos(r,#13, index, len)) or
  573. (index <> 0) or (len <> 1) then
  574. do_error (1404);
  575. DestroyregExprEngine(r);
  576. GenerateRegExprEngine('^\a$',[ref_singleline],r);
  577. if not (RegExprPos(r,#7, index, len)) or
  578. (index <> 0) or (len <> 1) then
  579. do_error (1405);
  580. DestroyregExprEngine(r);
  581. initok:=GenerateRegExprEngine('^(([^:/?#]+):)',[],r);
  582. if not (RegExprPos(r,'http:',index, len)) or
  583. (index <> 0) or (len <> 5) then
  584. do_error (1406);
  585. DestroyregExprEngine(r);
  586. initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?',[],r);
  587. if not initok then
  588. do_error(1407);
  589. if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
  590. (index <> 0) or (len <> 20) then
  591. do_error (1407);
  592. DestroyregExprEngine(r);
  593. initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?',[],r);
  594. if not initok then
  595. do_error(1408);
  596. if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
  597. (index <> 0) or (len <> 20) then
  598. do_error (1408);
  599. writeln('*** Escaping tests ***');
  600. s := '^Hello World \. [a-z] \D { } |() ?a*.*\\ 1 $';
  601. if RegExprEscapeStr(s)<>'\^Hello World \\\. \[a\-z\] \\D \{ \} \|\(\) \?a\*\.\*\\\\ 1 \$' then
  602. do_error(1450);
  603. writeln('*** More search tests ***');
  604. initok:=GenerateRegExprEngine('((nofoo)|(foo))1234',[],r);
  605. if not initok then
  606. do_error(1501);
  607. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  608. (index<>7) or (len<>9) then
  609. do_error(1501);
  610. DestroyregExprEngine(r);
  611. initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherbar))1234',[],r);
  612. if not initok then
  613. do_error(1502);
  614. if not(RegExprPos(r,'anotherbar1234XXXX',index,len)) or
  615. (index<>0) or (len<>14) then
  616. do_error(1502);
  617. DestroyregExprEngine(r);
  618. initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherfoo))1234',[],r);
  619. if not initok then
  620. do_error(1503);
  621. if not(RegExprPos(r,'1234 anotherfoo1234XXXX',index,len)) or
  622. (index<>7) or (len<>14) then
  623. do_error(1503);
  624. DestroyregExprEngine(r);
  625. initok:=GenerateRegExprEngine('(nofoo1234)|(foo1234)',[],r);
  626. if not initok then
  627. do_error(1504);
  628. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  629. (index<>7) or (len<>7) then
  630. do_error(1504);
  631. DestroyregExprEngine(r);
  632. initok:=GenerateRegExprEngine('((foo)|(nofoo))1234',[],r);
  633. if not initok then
  634. do_error(1505);
  635. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  636. (index<>7) or (len<>9) then
  637. do_error(1505);
  638. DestroyregExprEngine(r);
  639. {
  640. initok:=GenerateRegExprEngine('(nofoo|foo)1234',[],r);
  641. if not initok then
  642. do_error(1500);
  643. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  644. (index<>8) or (len<>9) then
  645. do_error(1500);
  646. DestroyregExprEngine(r);
  647. r:=GenerateRegExprEngine('(nofoo|foo|anotherfoo)1234',[]);
  648. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  649. (index<>8) or (len<>9) then
  650. do_error(1009);
  651. DestroyregExprEngine(r);
  652. r:=GenerateRegExprEngine('nofoo1234|foo1234',[]);
  653. if (r.data=nil) or not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  654. (index<>7) or (len<>7) then
  655. do_error(1010);
  656. DestroyregExprEngine(r);
  657. }
  658. { *************************************************************************
  659. replacement tests
  660. ************************************************************************* }
  661. writeln('*** Replacement tests ***');
  662. initok:=GenerateRegExprEngine('fa',[],r);
  663. if not initok then
  664. do_error(2000);
  665. if (RegExprReplaceAll(r,'asdfasdf','',Dest)<>1) or
  666. (Dest<>'asdsdf') then
  667. do_error(2001);
  668. DestroyregExprEngine(r);
  669. initok:=GenerateRegExprEngine('fa',[],r);
  670. if not initok then
  671. do_error(2002);
  672. if (RegExprReplaceAll(r,'fa','',Dest)<>1) or
  673. (Dest<>'') then
  674. do_error(2003);
  675. DestroyregExprEngine(r);
  676. initok:=GenerateRegExprEngine('fa',[],r);
  677. if not initok then
  678. do_error(2004);
  679. if RegExprReplaceAll(r,'','',Dest)<>0then
  680. do_error(2005);
  681. DestroyregExprEngine(r);
  682. initok:=GenerateRegExprEngine('fa',[],r);
  683. if not initok then
  684. do_error(2006);
  685. if (RegExprReplaceAll(r,'asdfafaasd','',Dest)<>2) or
  686. (Dest<>'asdasd') then
  687. do_error(2007);
  688. DestroyregExprEngine(r);
  689. initok:=GenerateRegExprEngine('fa',[],r);
  690. if not initok then
  691. do_error(2008);
  692. if (RegExprReplaceAll(r,'asdfafaasdasdfafaasd','',Dest)<>4) or
  693. (Dest<>'asdasdasdasd') then
  694. do_error(2009);
  695. DestroyregExprEngine(r);
  696. writeln('*** Testing unit regexpr was successful ***');
  697. end.