testreg1.pp 22 KB

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