awk.pass.cpp 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. // <regex>
  9. // template <class BidirectionalIterator, class Allocator, class charT,
  10. // class traits>
  11. // bool regex_match(BidirectionalIterator first, BidirectionalIterator last,
  12. // match_results<BidirectionalIterator, Allocator>& m,
  13. // const basic_regex<charT, traits>& e,
  14. // regex_constants::match_flag_type flags
  15. // = regex_constants::match_default);
  16. // TODO: investigation needed
  17. // TODO(netbsd): incomplete support for locales
  18. // XFAIL: linux-gnu, netbsd
  19. // REQUIRES: locale.cs_CZ.ISO8859-2
  20. #include <regex>
  21. #include <cassert>
  22. #include "test_macros.h"
  23. #include "test_iterators.h"
  24. #include "platform_support.h" // locale name macros
  25. int main(int, char**)
  26. {
  27. {
  28. std::cmatch m;
  29. const char s[] = "a";
  30. assert(std::regex_match(s, m, std::regex("a", std::regex_constants::awk)));
  31. assert(m.size() == 1);
  32. assert(!m.empty());
  33. assert(!m.prefix().matched);
  34. assert(m.prefix().first == s);
  35. assert(m.prefix().second == m[0].first);
  36. assert(!m.suffix().matched);
  37. assert(m.suffix().first == m[0].second);
  38. assert(m.suffix().second == s+1);
  39. assert(m.length(0) == 1);
  40. assert(m.position(0) == 0);
  41. assert(m.str(0) == "a");
  42. }
  43. {
  44. std::cmatch m;
  45. const char s[] = "ab";
  46. assert(std::regex_match(s, m, std::regex("ab", std::regex_constants::awk)));
  47. assert(m.size() == 1);
  48. assert(!m.prefix().matched);
  49. assert(m.prefix().first == s);
  50. assert(m.prefix().second == m[0].first);
  51. assert(!m.suffix().matched);
  52. assert(m.suffix().first == m[0].second);
  53. assert(m.suffix().second == s+2);
  54. assert(m.length(0) == 2);
  55. assert(m.position(0) == 0);
  56. assert(m.str(0) == "ab");
  57. }
  58. {
  59. std::cmatch m;
  60. const char s[] = "ab";
  61. assert(!std::regex_match(s, m, std::regex("ba", std::regex_constants::awk)));
  62. assert(m.size() == 0);
  63. assert(m.empty());
  64. }
  65. {
  66. std::cmatch m;
  67. const char s[] = "aab";
  68. assert(!std::regex_match(s, m, std::regex("ab", std::regex_constants::awk)));
  69. assert(m.size() == 0);
  70. }
  71. {
  72. std::cmatch m;
  73. const char s[] = "aab";
  74. assert(!std::regex_match(s, m, std::regex("ab", std::regex_constants::awk),
  75. std::regex_constants::match_continuous));
  76. assert(m.size() == 0);
  77. }
  78. {
  79. std::cmatch m;
  80. const char s[] = "abcd";
  81. assert(!std::regex_match(s, m, std::regex("bc", std::regex_constants::awk)));
  82. assert(m.size() == 0);
  83. }
  84. {
  85. std::cmatch m;
  86. const char s[] = "abbc";
  87. assert(std::regex_match(s, m, std::regex("ab*c", std::regex_constants::awk)));
  88. assert(m.size() == 1);
  89. assert(!m.prefix().matched);
  90. assert(m.prefix().first == s);
  91. assert(m.prefix().second == m[0].first);
  92. assert(!m.suffix().matched);
  93. assert(m.suffix().first == m[0].second);
  94. assert(m.suffix().second == s+4);
  95. assert(m.length(0) == 4);
  96. assert(m.position(0) == 0);
  97. assert(m.str(0) == s);
  98. }
  99. {
  100. std::cmatch m;
  101. const char s[] = "ababc";
  102. assert(std::regex_match(s, m, std::regex("(ab)*c", std::regex_constants::awk)));
  103. assert(m.size() == 2);
  104. assert(!m.prefix().matched);
  105. assert(m.prefix().first == s);
  106. assert(m.prefix().second == m[0].first);
  107. assert(!m.suffix().matched);
  108. assert(m.suffix().first == m[0].second);
  109. assert(m.suffix().second == s+5);
  110. assert(m.length(0) == 5);
  111. assert(m.position(0) == 0);
  112. assert(m.str(0) == s);
  113. assert(m.length(1) == 2);
  114. assert(m.position(1) == 2);
  115. assert(m.str(1) == "ab");
  116. }
  117. {
  118. std::cmatch m;
  119. const char s[] = "abcdefghijk";
  120. assert(!std::regex_match(s, m, std::regex("cd((e)fg)hi",
  121. std::regex_constants::awk)));
  122. assert(m.size() == 0);
  123. }
  124. {
  125. std::cmatch m;
  126. const char s[] = "abc";
  127. assert(std::regex_match(s, m, std::regex("^abc", std::regex_constants::awk)));
  128. assert(m.size() == 1);
  129. assert(!m.prefix().matched);
  130. assert(m.prefix().first == s);
  131. assert(m.prefix().second == m[0].first);
  132. assert(!m.suffix().matched);
  133. assert(m.suffix().first == m[0].second);
  134. assert(m.suffix().second == s+3);
  135. assert(m.length(0) == 3);
  136. assert(m.position(0) == 0);
  137. assert(m.str(0) == s);
  138. }
  139. {
  140. std::cmatch m;
  141. const char s[] = "abcd";
  142. assert(!std::regex_match(s, m, std::regex("^abc", std::regex_constants::awk)));
  143. assert(m.size() == 0);
  144. }
  145. {
  146. std::cmatch m;
  147. const char s[] = "aabc";
  148. assert(!std::regex_match(s, m, std::regex("^abc", std::regex_constants::awk)));
  149. assert(m.size() == 0);
  150. }
  151. {
  152. std::cmatch m;
  153. const char s[] = "abc";
  154. assert(std::regex_match(s, m, std::regex("abc$", std::regex_constants::awk)));
  155. assert(m.size() == 1);
  156. assert(!m.prefix().matched);
  157. assert(m.prefix().first == s);
  158. assert(m.prefix().second == m[0].first);
  159. assert(!m.suffix().matched);
  160. assert(m.suffix().first == m[0].second);
  161. assert(m.suffix().second == s+3);
  162. assert(m.length(0) == 3);
  163. assert(m.position(0) == 0);
  164. assert(m.str(0) == s);
  165. }
  166. {
  167. std::cmatch m;
  168. const char s[] = "efabc";
  169. assert(!std::regex_match(s, m, std::regex("abc$", std::regex_constants::awk)));
  170. assert(m.size() == 0);
  171. }
  172. {
  173. std::cmatch m;
  174. const char s[] = "efabcg";
  175. assert(!std::regex_match(s, m, std::regex("abc$", std::regex_constants::awk)));
  176. assert(m.size() == 0);
  177. }
  178. {
  179. std::cmatch m;
  180. const char s[] = "abc";
  181. assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::awk)));
  182. assert(m.size() == 1);
  183. assert(!m.prefix().matched);
  184. assert(m.prefix().first == s);
  185. assert(m.prefix().second == m[0].first);
  186. assert(!m.suffix().matched);
  187. assert(m.suffix().first == m[0].second);
  188. assert(m.suffix().second == s+3);
  189. assert(m.length(0) == 3);
  190. assert(m.position(0) == 0);
  191. assert(m.str(0) == s);
  192. }
  193. {
  194. std::cmatch m;
  195. const char s[] = "acc";
  196. assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::awk)));
  197. assert(m.size() == 1);
  198. assert(!m.prefix().matched);
  199. assert(m.prefix().first == s);
  200. assert(m.prefix().second == m[0].first);
  201. assert(!m.suffix().matched);
  202. assert(m.suffix().first == m[0].second);
  203. assert(m.suffix().second == s+3);
  204. assert(m.length(0) == 3);
  205. assert(m.position(0) == 0);
  206. assert(m.str(0) == s);
  207. }
  208. {
  209. std::cmatch m;
  210. const char s[] = "acc";
  211. assert(std::regex_match(s, m, std::regex("a.c", std::regex_constants::awk)));
  212. assert(m.size() == 1);
  213. assert(!m.prefix().matched);
  214. assert(m.prefix().first == s);
  215. assert(m.prefix().second == m[0].first);
  216. assert(!m.suffix().matched);
  217. assert(m.suffix().first == m[0].second);
  218. assert(m.suffix().second == s+3);
  219. assert(m.length(0) == 3);
  220. assert(m.position(0) == 0);
  221. assert(m.str(0) == s);
  222. }
  223. {
  224. std::cmatch m;
  225. const char s[] = "abcdef";
  226. assert(std::regex_match(s, m, std::regex("(.*).*", std::regex_constants::awk)));
  227. assert(m.size() == 2);
  228. assert(!m.prefix().matched);
  229. assert(m.prefix().first == s);
  230. assert(m.prefix().second == m[0].first);
  231. assert(!m.suffix().matched);
  232. assert(m.suffix().first == m[0].second);
  233. assert(m.suffix().second == s+6);
  234. assert(m.length(0) == 6);
  235. assert(m.position(0) == 0);
  236. assert(m.str(0) == s);
  237. assert(m.length(1) == 6);
  238. assert(m.position(1) == 0);
  239. assert(m.str(1) == s);
  240. }
  241. {
  242. std::cmatch m;
  243. const char s[] = "bc";
  244. assert(!std::regex_match(s, m, std::regex("(a*)*", std::regex_constants::awk)));
  245. assert(m.size() == 0);
  246. }
  247. {
  248. std::cmatch m;
  249. const char s[] = "abbc";
  250. assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
  251. assert(m.size() == 0);
  252. }
  253. {
  254. std::cmatch m;
  255. const char s[] = "abbbc";
  256. assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
  257. assert(m.size() == 1);
  258. assert(!m.prefix().matched);
  259. assert(m.prefix().first == s);
  260. assert(m.prefix().second == m[0].first);
  261. assert(!m.suffix().matched);
  262. assert(m.suffix().first == m[0].second);
  263. assert(m.suffix().second == m[0].second);
  264. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  265. assert(m.position(0) == 0);
  266. assert(m.str(0) == s);
  267. }
  268. {
  269. std::cmatch m;
  270. const char s[] = "abbbbc";
  271. assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
  272. assert(m.size() == 1);
  273. assert(!m.prefix().matched);
  274. assert(m.prefix().first == s);
  275. assert(m.prefix().second == m[0].first);
  276. assert(!m.suffix().matched);
  277. assert(m.suffix().first == m[0].second);
  278. assert(m.suffix().second == m[0].second);
  279. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  280. assert(m.position(0) == 0);
  281. assert(m.str(0) == s);
  282. }
  283. {
  284. std::cmatch m;
  285. const char s[] = "abbbbbc";
  286. assert(std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
  287. assert(m.size() == 1);
  288. assert(!m.prefix().matched);
  289. assert(m.prefix().first == s);
  290. assert(m.prefix().second == m[0].first);
  291. assert(!m.suffix().matched);
  292. assert(m.suffix().first == m[0].second);
  293. assert(m.suffix().second == m[0].second);
  294. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  295. assert(m.position(0) == 0);
  296. assert(m.str(0) == s);
  297. }
  298. {
  299. std::cmatch m;
  300. const char s[] = "adefc";
  301. assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
  302. assert(m.size() == 0);
  303. }
  304. {
  305. std::cmatch m;
  306. const char s[] = "abbbbbbc";
  307. assert(!std::regex_match(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
  308. assert(m.size() == 0);
  309. }
  310. {
  311. std::cmatch m;
  312. const char s[] = "adec";
  313. assert(!std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
  314. assert(m.size() == 0);
  315. }
  316. {
  317. std::cmatch m;
  318. const char s[] = "adefc";
  319. assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
  320. assert(m.size() == 1);
  321. assert(!m.prefix().matched);
  322. assert(m.prefix().first == s);
  323. assert(m.prefix().second == m[0].first);
  324. assert(!m.suffix().matched);
  325. assert(m.suffix().first == m[0].second);
  326. assert(m.suffix().second == m[0].second);
  327. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  328. assert(m.position(0) == 0);
  329. assert(m.str(0) == s);
  330. }
  331. {
  332. std::cmatch m;
  333. const char s[] = "adefgc";
  334. assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
  335. assert(m.size() == 1);
  336. assert(!m.prefix().matched);
  337. assert(m.prefix().first == s);
  338. assert(m.prefix().second == m[0].first);
  339. assert(!m.suffix().matched);
  340. assert(m.suffix().first == m[0].second);
  341. assert(m.suffix().second == m[0].second);
  342. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  343. assert(m.position(0) == 0);
  344. assert(m.str(0) == s);
  345. }
  346. {
  347. std::cmatch m;
  348. const char s[] = "adefghc";
  349. assert(std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
  350. assert(m.size() == 1);
  351. assert(!m.prefix().matched);
  352. assert(m.prefix().first == s);
  353. assert(m.prefix().second == m[0].first);
  354. assert(!m.suffix().matched);
  355. assert(m.suffix().first == m[0].second);
  356. assert(m.suffix().second == m[0].second);
  357. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  358. assert(m.position(0) == 0);
  359. assert(m.str(0) == s);
  360. }
  361. {
  362. std::cmatch m;
  363. const char s[] = "adefghic";
  364. assert(!std::regex_match(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
  365. assert(m.size() == 0);
  366. }
  367. {
  368. std::cmatch m;
  369. const char s[] = "tournament";
  370. assert(std::regex_match(s, m, std::regex("tour|to|tournament",
  371. std::regex_constants::awk)));
  372. assert(m.size() == 1);
  373. assert(!m.prefix().matched);
  374. assert(m.prefix().first == s);
  375. assert(m.prefix().second == m[0].first);
  376. assert(!m.suffix().matched);
  377. assert(m.suffix().first == m[0].second);
  378. assert(m.suffix().second == m[0].second);
  379. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  380. assert(m.position(0) == 0);
  381. assert(m.str(0) == s);
  382. }
  383. {
  384. std::cmatch m;
  385. const char s[] = "tournamenttotour";
  386. assert(std::regex_match(s, m, std::regex("(tour|to|tournament)+",
  387. std::regex_constants::awk | std::regex_constants::nosubs)));
  388. assert(m.size() == 1);
  389. assert(!m.prefix().matched);
  390. assert(m.prefix().first == s);
  391. assert(m.prefix().second == m[0].first);
  392. assert(!m.suffix().matched);
  393. assert(m.suffix().first == m[0].second);
  394. assert(m.suffix().second == m[0].second);
  395. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  396. assert(m.position(0) == 0);
  397. assert(m.str(0) == s);
  398. }
  399. {
  400. std::cmatch m;
  401. const char s[] = "ttotour";
  402. assert(std::regex_match(s, m, std::regex("(tour|to|t)+",
  403. std::regex_constants::awk)));
  404. assert(m.size() == 2);
  405. assert(!m.prefix().matched);
  406. assert(m.prefix().first == s);
  407. assert(m.prefix().second == m[0].first);
  408. assert(!m.suffix().matched);
  409. assert(m.suffix().first == m[0].second);
  410. assert(m.suffix().second == m[0].second);
  411. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  412. assert(m.position(0) == 0);
  413. assert(m.str(0) == s);
  414. assert(m.length(1) == 4);
  415. assert(m.position(1) == 3);
  416. assert(m.str(1) == "tour");
  417. }
  418. {
  419. std::cmatch m;
  420. const char s[] = "-ab,ab-";
  421. assert(!std::regex_match(s, m, std::regex("-(.*),\1-", std::regex_constants::awk)));
  422. assert(m.size() == 0);
  423. }
  424. {
  425. std::cmatch m;
  426. const char s[] = "-ab,ab-";
  427. assert(std::regex_match(s, m, std::regex("-.*,.*-", std::regex_constants::awk)));
  428. assert(m.size() == 1);
  429. assert(!m.prefix().matched);
  430. assert(m.prefix().first == s);
  431. assert(m.prefix().second == m[0].first);
  432. assert(!m.suffix().matched);
  433. assert(m.suffix().first == m[0].second);
  434. assert(m.suffix().second == m[0].second);
  435. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  436. assert(m.position(0) == 0);
  437. assert(m.str(0) == s);
  438. }
  439. {
  440. std::cmatch m;
  441. const char s[] = "a";
  442. assert(std::regex_match(s, m, std::regex("^[a]$",
  443. std::regex_constants::awk)));
  444. assert(m.size() == 1);
  445. assert(!m.prefix().matched);
  446. assert(m.prefix().first == s);
  447. assert(m.prefix().second == m[0].first);
  448. assert(!m.suffix().matched);
  449. assert(m.suffix().first == m[0].second);
  450. assert(m.suffix().second == m[0].second);
  451. assert(m.length(0) == 1);
  452. assert(m.position(0) == 0);
  453. assert(m.str(0) == "a");
  454. }
  455. {
  456. std::cmatch m;
  457. const char s[] = "a";
  458. assert(std::regex_match(s, m, std::regex("^[ab]$",
  459. std::regex_constants::awk)));
  460. assert(m.size() == 1);
  461. assert(!m.prefix().matched);
  462. assert(m.prefix().first == s);
  463. assert(m.prefix().second == m[0].first);
  464. assert(!m.suffix().matched);
  465. assert(m.suffix().first == m[0].second);
  466. assert(m.suffix().second == m[0].second);
  467. assert(m.length(0) == 1);
  468. assert(m.position(0) == 0);
  469. assert(m.str(0) == "a");
  470. }
  471. {
  472. std::cmatch m;
  473. const char s[] = "c";
  474. assert(std::regex_match(s, m, std::regex("^[a-f]$",
  475. std::regex_constants::awk)));
  476. assert(m.size() == 1);
  477. assert(!m.prefix().matched);
  478. assert(m.prefix().first == s);
  479. assert(m.prefix().second == m[0].first);
  480. assert(!m.suffix().matched);
  481. assert(m.suffix().first == m[0].second);
  482. assert(m.suffix().second == m[0].second);
  483. assert(m.length(0) == 1);
  484. assert(m.position(0) == 0);
  485. assert(m.str(0) == s);
  486. }
  487. {
  488. std::cmatch m;
  489. const char s[] = "g";
  490. assert(!std::regex_match(s, m, std::regex("^[a-f]$",
  491. std::regex_constants::awk)));
  492. assert(m.size() == 0);
  493. }
  494. {
  495. std::cmatch m;
  496. const char s[] = "Iraqi";
  497. assert(!std::regex_match(s, m, std::regex("q[^u]",
  498. std::regex_constants::awk)));
  499. assert(m.size() == 0);
  500. }
  501. {
  502. std::cmatch m;
  503. const char s[] = "Iraq";
  504. assert(!std::regex_match(s, m, std::regex("q[^u]",
  505. std::regex_constants::awk)));
  506. assert(m.size() == 0);
  507. }
  508. {
  509. std::cmatch m;
  510. const char s[] = "AmB";
  511. assert(std::regex_match(s, m, std::regex("A[[:lower:]]B",
  512. std::regex_constants::awk)));
  513. assert(m.size() == 1);
  514. assert(!m.prefix().matched);
  515. assert(m.prefix().first == s);
  516. assert(m.prefix().second == m[0].first);
  517. assert(!m.suffix().matched);
  518. assert(m.suffix().first == m[0].second);
  519. assert(m.suffix().second == m[0].second);
  520. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  521. assert(m.position(0) == 0);
  522. assert(m.str(0) == s);
  523. }
  524. {
  525. std::cmatch m;
  526. const char s[] = "AMB";
  527. assert(!std::regex_match(s, m, std::regex("A[[:lower:]]B",
  528. std::regex_constants::awk)));
  529. assert(m.size() == 0);
  530. }
  531. {
  532. std::cmatch m;
  533. const char s[] = "AMB";
  534. assert(std::regex_match(s, m, std::regex("A[^[:lower:]]B",
  535. std::regex_constants::awk)));
  536. assert(m.size() == 1);
  537. assert(!m.prefix().matched);
  538. assert(m.prefix().first == s);
  539. assert(m.prefix().second == m[0].first);
  540. assert(!m.suffix().matched);
  541. assert(m.suffix().first == m[0].second);
  542. assert(m.suffix().second == m[0].second);
  543. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  544. assert(m.position(0) == 0);
  545. assert(m.str(0) == s);
  546. }
  547. {
  548. std::cmatch m;
  549. const char s[] = "AmB";
  550. assert(!std::regex_match(s, m, std::regex("A[^[:lower:]]B",
  551. std::regex_constants::awk)));
  552. assert(m.size() == 0);
  553. }
  554. {
  555. std::cmatch m;
  556. const char s[] = "A5B";
  557. assert(!std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B",
  558. std::regex_constants::awk)));
  559. assert(m.size() == 0);
  560. }
  561. {
  562. std::cmatch m;
  563. const char s[] = "A?B";
  564. assert(std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B",
  565. std::regex_constants::awk)));
  566. assert(m.size() == 1);
  567. assert(!m.prefix().matched);
  568. assert(m.prefix().first == s);
  569. assert(m.prefix().second == m[0].first);
  570. assert(!m.suffix().matched);
  571. assert(m.suffix().first == m[0].second);
  572. assert(m.suffix().second == m[0].second);
  573. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  574. assert(m.position(0) == 0);
  575. assert(m.str(0) == s);
  576. }
  577. {
  578. std::cmatch m;
  579. const char s[] = "-";
  580. assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
  581. std::regex_constants::awk)));
  582. assert(m.size() == 1);
  583. assert(!m.prefix().matched);
  584. assert(m.prefix().first == s);
  585. assert(m.prefix().second == m[0].first);
  586. assert(!m.suffix().matched);
  587. assert(m.suffix().first == m[0].second);
  588. assert(m.suffix().second == m[0].second);
  589. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  590. assert(m.position(0) == 0);
  591. assert(m.str(0) == s);
  592. }
  593. {
  594. std::cmatch m;
  595. const char s[] = "z";
  596. assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
  597. std::regex_constants::awk)));
  598. assert(m.size() == 1);
  599. assert(!m.prefix().matched);
  600. assert(m.prefix().first == s);
  601. assert(m.prefix().second == m[0].first);
  602. assert(!m.suffix().matched);
  603. assert(m.suffix().first == m[0].second);
  604. assert(m.suffix().second == m[0].second);
  605. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  606. assert(m.position(0) == 0);
  607. assert(m.str(0) == s);
  608. }
  609. {
  610. std::cmatch m;
  611. const char s[] = "m";
  612. assert(!std::regex_match(s, m, std::regex("[a[.hyphen.]z]",
  613. std::regex_constants::awk)));
  614. assert(m.size() == 0);
  615. }
  616. std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
  617. {
  618. std::cmatch m;
  619. const char s[] = "m";
  620. assert(std::regex_match(s, m,
  621. std::regex("[a[=M=]z]", std::regex_constants::awk)));
  622. assert(m.size() == 1);
  623. assert(!m.prefix().matched);
  624. assert(m.prefix().first == s);
  625. assert(m.prefix().second == m[0].first);
  626. assert(!m.suffix().matched);
  627. assert(m.suffix().first == m[0].second);
  628. assert(m.suffix().second == m[0].second);
  629. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  630. assert(m.position(0) == 0);
  631. assert(m.str(0) == s);
  632. }
  633. {
  634. std::cmatch m;
  635. const char s[] = "Ch";
  636. assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
  637. std::regex_constants::awk | std::regex_constants::icase)));
  638. assert(m.size() == 1);
  639. assert(!m.prefix().matched);
  640. assert(m.prefix().first == s);
  641. assert(m.prefix().second == m[0].first);
  642. assert(!m.suffix().matched);
  643. assert(m.suffix().first == m[0].second);
  644. assert(m.suffix().second == m[0].second);
  645. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  646. assert(m.position(0) == 0);
  647. assert(m.str(0) == s);
  648. }
  649. std::locale::global(std::locale("C"));
  650. {
  651. std::cmatch m;
  652. const char s[] = "m";
  653. assert(!std::regex_match(s, m, std::regex("[a[=M=]z]",
  654. std::regex_constants::awk)));
  655. assert(m.size() == 0);
  656. }
  657. {
  658. std::cmatch m;
  659. const char s[] = "01a45cef9";
  660. assert(!std::regex_match(s, m, std::regex("[ace1-9]*",
  661. std::regex_constants::awk)));
  662. assert(m.size() == 0);
  663. }
  664. {
  665. std::cmatch m;
  666. const char s[] = "01a45cef9";
  667. assert(!std::regex_match(s, m, std::regex("[ace1-9]+",
  668. std::regex_constants::awk)));
  669. assert(m.size() == 0);
  670. }
  671. {
  672. const char r[] = "^[-+]?[0-9]+[CF]$";
  673. std::ptrdiff_t sr = std::char_traits<char>::length(r);
  674. typedef forward_iterator<const char*> FI;
  675. typedef bidirectional_iterator<const char*> BI;
  676. std::regex regex(FI(r), FI(r+sr), std::regex_constants::awk);
  677. std::match_results<BI> m;
  678. const char s[] = "-40C";
  679. std::ptrdiff_t ss = std::char_traits<char>::length(s);
  680. assert(std::regex_match(BI(s), BI(s+ss), m, regex));
  681. assert(m.size() == 1);
  682. assert(!m.prefix().matched);
  683. assert(m.prefix().first == BI(s));
  684. assert(m.prefix().second == m[0].first);
  685. assert(!m.suffix().matched);
  686. assert(m.suffix().first == m[0].second);
  687. assert(m.suffix().second == m[0].second);
  688. assert((size_t)m.length(0) == 4);
  689. assert(m.position(0) == 0);
  690. assert(m.str(0) == s);
  691. }
  692. {
  693. std::cmatch m;
  694. const char s[] = "\n\n\n";
  695. assert(std::regex_match(s, m, std::regex("[\\n]+",
  696. std::regex_constants::awk)));
  697. assert(m.size() == 1);
  698. assert(!m.prefix().matched);
  699. assert(m.prefix().first == s);
  700. assert(m.prefix().second == m[0].first);
  701. assert(!m.suffix().matched);
  702. assert(m.suffix().first == m[0].second);
  703. assert(m.suffix().second == s + std::char_traits<char>::length(s));
  704. assert((size_t)m.length(0) == std::char_traits<char>::length(s));
  705. assert(m.position(0) == 0);
  706. assert(m.str(0) == s);
  707. }
  708. {
  709. std::wcmatch m;
  710. const wchar_t s[] = L"a";
  711. assert(std::regex_match(s, m, std::wregex(L"a", std::regex_constants::awk)));
  712. assert(m.size() == 1);
  713. assert(!m.empty());
  714. assert(!m.prefix().matched);
  715. assert(m.prefix().first == s);
  716. assert(m.prefix().second == m[0].first);
  717. assert(!m.suffix().matched);
  718. assert(m.suffix().first == m[0].second);
  719. assert(m.suffix().second == s+1);
  720. assert((size_t)m.length(0) == 1);
  721. assert(m.position(0) == 0);
  722. assert(m.str(0) == L"a");
  723. }
  724. {
  725. std::wcmatch m;
  726. const wchar_t s[] = L"ab";
  727. assert(std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::awk)));
  728. assert(m.size() == 1);
  729. assert(!m.prefix().matched);
  730. assert(m.prefix().first == s);
  731. assert(m.prefix().second == m[0].first);
  732. assert(!m.suffix().matched);
  733. assert(m.suffix().first == m[0].second);
  734. assert(m.suffix().second == s+2);
  735. assert((size_t)m.length(0) == 2);
  736. assert(m.position(0) == 0);
  737. assert(m.str(0) == L"ab");
  738. }
  739. {
  740. std::wcmatch m;
  741. const wchar_t s[] = L"ab";
  742. assert(!std::regex_match(s, m, std::wregex(L"ba", std::regex_constants::awk)));
  743. assert(m.size() == 0);
  744. assert(m.empty());
  745. }
  746. {
  747. std::wcmatch m;
  748. const wchar_t s[] = L"aab";
  749. assert(!std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::awk)));
  750. assert(m.size() == 0);
  751. }
  752. {
  753. std::wcmatch m;
  754. const wchar_t s[] = L"aab";
  755. assert(!std::regex_match(s, m, std::wregex(L"ab", std::regex_constants::awk),
  756. std::regex_constants::match_continuous));
  757. assert(m.size() == 0);
  758. }
  759. {
  760. std::wcmatch m;
  761. const wchar_t s[] = L"abcd";
  762. assert(!std::regex_match(s, m, std::wregex(L"bc", std::regex_constants::awk)));
  763. assert(m.size() == 0);
  764. }
  765. {
  766. std::wcmatch m;
  767. const wchar_t s[] = L"abbc";
  768. assert(std::regex_match(s, m, std::wregex(L"ab*c", std::regex_constants::awk)));
  769. assert(m.size() == 1);
  770. assert(!m.prefix().matched);
  771. assert(m.prefix().first == s);
  772. assert(m.prefix().second == m[0].first);
  773. assert(!m.suffix().matched);
  774. assert(m.suffix().first == m[0].second);
  775. assert(m.suffix().second == s+4);
  776. assert(m.length(0) == 4);
  777. assert(m.position(0) == 0);
  778. assert(m.str(0) == s);
  779. }
  780. {
  781. std::wcmatch m;
  782. const wchar_t s[] = L"ababc";
  783. assert(std::regex_match(s, m, std::wregex(L"(ab)*c", std::regex_constants::awk)));
  784. assert(m.size() == 2);
  785. assert(!m.prefix().matched);
  786. assert(m.prefix().first == s);
  787. assert(m.prefix().second == m[0].first);
  788. assert(!m.suffix().matched);
  789. assert(m.suffix().first == m[0].second);
  790. assert(m.suffix().second == s+5);
  791. assert(m.length(0) == 5);
  792. assert(m.position(0) == 0);
  793. assert(m.str(0) == s);
  794. assert(m.length(1) == 2);
  795. assert(m.position(1) == 2);
  796. assert(m.str(1) == L"ab");
  797. }
  798. {
  799. std::wcmatch m;
  800. const wchar_t s[] = L"abcdefghijk";
  801. assert(!std::regex_match(s, m, std::wregex(L"cd((e)fg)hi",
  802. std::regex_constants::awk)));
  803. assert(m.size() == 0);
  804. }
  805. {
  806. std::wcmatch m;
  807. const wchar_t s[] = L"abc";
  808. assert(std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
  809. assert(m.size() == 1);
  810. assert(!m.prefix().matched);
  811. assert(m.prefix().first == s);
  812. assert(m.prefix().second == m[0].first);
  813. assert(!m.suffix().matched);
  814. assert(m.suffix().first == m[0].second);
  815. assert(m.suffix().second == s+3);
  816. assert(m.length(0) == 3);
  817. assert(m.position(0) == 0);
  818. assert(m.str(0) == s);
  819. }
  820. {
  821. std::wcmatch m;
  822. const wchar_t s[] = L"abcd";
  823. assert(!std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
  824. assert(m.size() == 0);
  825. }
  826. {
  827. std::wcmatch m;
  828. const wchar_t s[] = L"aabc";
  829. assert(!std::regex_match(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
  830. assert(m.size() == 0);
  831. }
  832. {
  833. std::wcmatch m;
  834. const wchar_t s[] = L"abc";
  835. assert(std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
  836. assert(m.size() == 1);
  837. assert(!m.prefix().matched);
  838. assert(m.prefix().first == s);
  839. assert(m.prefix().second == m[0].first);
  840. assert(!m.suffix().matched);
  841. assert(m.suffix().first == m[0].second);
  842. assert(m.suffix().second == s+3);
  843. assert(m.length(0) == 3);
  844. assert(m.position(0) == 0);
  845. assert(m.str(0) == s);
  846. }
  847. {
  848. std::wcmatch m;
  849. const wchar_t s[] = L"efabc";
  850. assert(!std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
  851. assert(m.size() == 0);
  852. }
  853. {
  854. std::wcmatch m;
  855. const wchar_t s[] = L"efabcg";
  856. assert(!std::regex_match(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
  857. assert(m.size() == 0);
  858. }
  859. {
  860. std::wcmatch m;
  861. const wchar_t s[] = L"abc";
  862. assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
  863. assert(m.size() == 1);
  864. assert(!m.prefix().matched);
  865. assert(m.prefix().first == s);
  866. assert(m.prefix().second == m[0].first);
  867. assert(!m.suffix().matched);
  868. assert(m.suffix().first == m[0].second);
  869. assert(m.suffix().second == s+3);
  870. assert(m.length(0) == 3);
  871. assert(m.position(0) == 0);
  872. assert(m.str(0) == s);
  873. }
  874. {
  875. std::wcmatch m;
  876. const wchar_t s[] = L"acc";
  877. assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
  878. assert(m.size() == 1);
  879. assert(!m.prefix().matched);
  880. assert(m.prefix().first == s);
  881. assert(m.prefix().second == m[0].first);
  882. assert(!m.suffix().matched);
  883. assert(m.suffix().first == m[0].second);
  884. assert(m.suffix().second == s+3);
  885. assert(m.length(0) == 3);
  886. assert(m.position(0) == 0);
  887. assert(m.str(0) == s);
  888. }
  889. {
  890. std::wcmatch m;
  891. const wchar_t s[] = L"acc";
  892. assert(std::regex_match(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
  893. assert(m.size() == 1);
  894. assert(!m.prefix().matched);
  895. assert(m.prefix().first == s);
  896. assert(m.prefix().second == m[0].first);
  897. assert(!m.suffix().matched);
  898. assert(m.suffix().first == m[0].second);
  899. assert(m.suffix().second == s+3);
  900. assert(m.length(0) == 3);
  901. assert(m.position(0) == 0);
  902. assert(m.str(0) == s);
  903. }
  904. {
  905. std::wcmatch m;
  906. const wchar_t s[] = L"abcdef";
  907. assert(std::regex_match(s, m, std::wregex(L"(.*).*", std::regex_constants::awk)));
  908. assert(m.size() == 2);
  909. assert(!m.prefix().matched);
  910. assert(m.prefix().first == s);
  911. assert(m.prefix().second == m[0].first);
  912. assert(!m.suffix().matched);
  913. assert(m.suffix().first == m[0].second);
  914. assert(m.suffix().second == s+6);
  915. assert(m.length(0) == 6);
  916. assert(m.position(0) == 0);
  917. assert(m.str(0) == s);
  918. assert(m.length(1) == 6);
  919. assert(m.position(1) == 0);
  920. assert(m.str(1) == s);
  921. }
  922. {
  923. std::wcmatch m;
  924. const wchar_t s[] = L"bc";
  925. assert(!std::regex_match(s, m, std::wregex(L"(a*)*", std::regex_constants::awk)));
  926. assert(m.size() == 0);
  927. }
  928. {
  929. std::wcmatch m;
  930. const wchar_t s[] = L"abbc";
  931. assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
  932. assert(m.size() == 0);
  933. }
  934. {
  935. std::wcmatch m;
  936. const wchar_t s[] = L"abbbc";
  937. assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
  938. assert(m.size() == 1);
  939. assert(!m.prefix().matched);
  940. assert(m.prefix().first == s);
  941. assert(m.prefix().second == m[0].first);
  942. assert(!m.suffix().matched);
  943. assert(m.suffix().first == m[0].second);
  944. assert(m.suffix().second == m[0].second);
  945. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  946. assert(m.position(0) == 0);
  947. assert(m.str(0) == s);
  948. }
  949. {
  950. std::wcmatch m;
  951. const wchar_t s[] = L"abbbbc";
  952. assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
  953. assert(m.size() == 1);
  954. assert(!m.prefix().matched);
  955. assert(m.prefix().first == s);
  956. assert(m.prefix().second == m[0].first);
  957. assert(!m.suffix().matched);
  958. assert(m.suffix().first == m[0].second);
  959. assert(m.suffix().second == m[0].second);
  960. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  961. assert(m.position(0) == 0);
  962. assert(m.str(0) == s);
  963. }
  964. {
  965. std::wcmatch m;
  966. const wchar_t s[] = L"abbbbbc";
  967. assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
  968. assert(m.size() == 1);
  969. assert(!m.prefix().matched);
  970. assert(m.prefix().first == s);
  971. assert(m.prefix().second == m[0].first);
  972. assert(!m.suffix().matched);
  973. assert(m.suffix().first == m[0].second);
  974. assert(m.suffix().second == m[0].second);
  975. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  976. assert(m.position(0) == 0);
  977. assert(m.str(0) == s);
  978. }
  979. {
  980. std::wcmatch m;
  981. const wchar_t s[] = L"adefc";
  982. assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
  983. assert(m.size() == 0);
  984. }
  985. {
  986. std::wcmatch m;
  987. const wchar_t s[] = L"abbbbbbc";
  988. assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
  989. assert(m.size() == 0);
  990. }
  991. {
  992. std::wcmatch m;
  993. const wchar_t s[] = L"adec";
  994. assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
  995. assert(m.size() == 0);
  996. }
  997. {
  998. std::wcmatch m;
  999. const wchar_t s[] = L"adefc";
  1000. assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
  1001. assert(m.size() == 1);
  1002. assert(!m.prefix().matched);
  1003. assert(m.prefix().first == s);
  1004. assert(m.prefix().second == m[0].first);
  1005. assert(!m.suffix().matched);
  1006. assert(m.suffix().first == m[0].second);
  1007. assert(m.suffix().second == m[0].second);
  1008. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1009. assert(m.position(0) == 0);
  1010. assert(m.str(0) == s);
  1011. }
  1012. {
  1013. std::wcmatch m;
  1014. const wchar_t s[] = L"adefgc";
  1015. assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
  1016. assert(m.size() == 1);
  1017. assert(!m.prefix().matched);
  1018. assert(m.prefix().first == s);
  1019. assert(m.prefix().second == m[0].first);
  1020. assert(!m.suffix().matched);
  1021. assert(m.suffix().first == m[0].second);
  1022. assert(m.suffix().second == m[0].second);
  1023. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1024. assert(m.position(0) == 0);
  1025. assert(m.str(0) == s);
  1026. }
  1027. {
  1028. std::wcmatch m;
  1029. const wchar_t s[] = L"adefghc";
  1030. assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
  1031. assert(m.size() == 1);
  1032. assert(!m.prefix().matched);
  1033. assert(m.prefix().first == s);
  1034. assert(m.prefix().second == m[0].first);
  1035. assert(!m.suffix().matched);
  1036. assert(m.suffix().first == m[0].second);
  1037. assert(m.suffix().second == m[0].second);
  1038. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1039. assert(m.position(0) == 0);
  1040. assert(m.str(0) == s);
  1041. }
  1042. {
  1043. std::wcmatch m;
  1044. const wchar_t s[] = L"adefghic";
  1045. assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
  1046. assert(m.size() == 0);
  1047. }
  1048. {
  1049. std::wcmatch m;
  1050. const wchar_t s[] = L"tournament";
  1051. assert(std::regex_match(s, m, std::wregex(L"tour|to|tournament",
  1052. std::regex_constants::awk)));
  1053. assert(m.size() == 1);
  1054. assert(!m.prefix().matched);
  1055. assert(m.prefix().first == s);
  1056. assert(m.prefix().second == m[0].first);
  1057. assert(!m.suffix().matched);
  1058. assert(m.suffix().first == m[0].second);
  1059. assert(m.suffix().second == m[0].second);
  1060. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1061. assert(m.position(0) == 0);
  1062. assert(m.str(0) == s);
  1063. }
  1064. {
  1065. std::wcmatch m;
  1066. const wchar_t s[] = L"tournamenttotour";
  1067. assert(std::regex_match(s, m, std::wregex(L"(tour|to|tournament)+",
  1068. std::regex_constants::awk | std::regex_constants::nosubs)));
  1069. assert(m.size() == 1);
  1070. assert(!m.prefix().matched);
  1071. assert(m.prefix().first == s);
  1072. assert(m.prefix().second == m[0].first);
  1073. assert(!m.suffix().matched);
  1074. assert(m.suffix().first == m[0].second);
  1075. assert(m.suffix().second == m[0].second);
  1076. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1077. assert(m.position(0) == 0);
  1078. assert(m.str(0) == s);
  1079. }
  1080. {
  1081. std::wcmatch m;
  1082. const wchar_t s[] = L"ttotour";
  1083. assert(std::regex_match(s, m, std::wregex(L"(tour|to|t)+",
  1084. std::regex_constants::awk)));
  1085. assert(m.size() == 2);
  1086. assert(!m.prefix().matched);
  1087. assert(m.prefix().first == s);
  1088. assert(m.prefix().second == m[0].first);
  1089. assert(!m.suffix().matched);
  1090. assert(m.suffix().first == m[0].second);
  1091. assert(m.suffix().second == m[0].second);
  1092. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1093. assert(m.position(0) == 0);
  1094. assert(m.str(0) == s);
  1095. assert(m.length(1) == 4);
  1096. assert(m.position(1) == 3);
  1097. assert(m.str(1) == L"tour");
  1098. }
  1099. {
  1100. std::wcmatch m;
  1101. const wchar_t s[] = L"-ab,ab-";
  1102. assert(!std::regex_match(s, m, std::wregex(L"-(.*),\1-", std::regex_constants::awk)));
  1103. assert(m.size() == 0);
  1104. }
  1105. {
  1106. std::wcmatch m;
  1107. const wchar_t s[] = L"-ab,ab-";
  1108. assert(std::regex_match(s, m, std::wregex(L"-.*,.*-", std::regex_constants::awk)));
  1109. assert(m.size() == 1);
  1110. assert(!m.prefix().matched);
  1111. assert(m.prefix().first == s);
  1112. assert(m.prefix().second == m[0].first);
  1113. assert(!m.suffix().matched);
  1114. assert(m.suffix().first == m[0].second);
  1115. assert(m.suffix().second == m[0].second);
  1116. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1117. assert(m.position(0) == 0);
  1118. assert(m.str(0) == s);
  1119. }
  1120. {
  1121. std::wcmatch m;
  1122. const wchar_t s[] = L"a";
  1123. assert(std::regex_match(s, m, std::wregex(L"^[a]$",
  1124. std::regex_constants::awk)));
  1125. assert(m.size() == 1);
  1126. assert(!m.prefix().matched);
  1127. assert(m.prefix().first == s);
  1128. assert(m.prefix().second == m[0].first);
  1129. assert(!m.suffix().matched);
  1130. assert(m.suffix().first == m[0].second);
  1131. assert(m.suffix().second == m[0].second);
  1132. assert(m.length(0) == 1);
  1133. assert(m.position(0) == 0);
  1134. assert(m.str(0) == L"a");
  1135. }
  1136. {
  1137. std::wcmatch m;
  1138. const wchar_t s[] = L"a";
  1139. assert(std::regex_match(s, m, std::wregex(L"^[ab]$",
  1140. std::regex_constants::awk)));
  1141. assert(m.size() == 1);
  1142. assert(!m.prefix().matched);
  1143. assert(m.prefix().first == s);
  1144. assert(m.prefix().second == m[0].first);
  1145. assert(!m.suffix().matched);
  1146. assert(m.suffix().first == m[0].second);
  1147. assert(m.suffix().second == m[0].second);
  1148. assert(m.length(0) == 1);
  1149. assert(m.position(0) == 0);
  1150. assert(m.str(0) == L"a");
  1151. }
  1152. {
  1153. std::wcmatch m;
  1154. const wchar_t s[] = L"c";
  1155. assert(std::regex_match(s, m, std::wregex(L"^[a-f]$",
  1156. std::regex_constants::awk)));
  1157. assert(m.size() == 1);
  1158. assert(!m.prefix().matched);
  1159. assert(m.prefix().first == s);
  1160. assert(m.prefix().second == m[0].first);
  1161. assert(!m.suffix().matched);
  1162. assert(m.suffix().first == m[0].second);
  1163. assert(m.suffix().second == m[0].second);
  1164. assert(m.length(0) == 1);
  1165. assert(m.position(0) == 0);
  1166. assert(m.str(0) == s);
  1167. }
  1168. {
  1169. std::wcmatch m;
  1170. const wchar_t s[] = L"g";
  1171. assert(!std::regex_match(s, m, std::wregex(L"^[a-f]$",
  1172. std::regex_constants::awk)));
  1173. assert(m.size() == 0);
  1174. }
  1175. {
  1176. std::wcmatch m;
  1177. const wchar_t s[] = L"Iraqi";
  1178. assert(!std::regex_match(s, m, std::wregex(L"q[^u]",
  1179. std::regex_constants::awk)));
  1180. assert(m.size() == 0);
  1181. }
  1182. {
  1183. std::wcmatch m;
  1184. const wchar_t s[] = L"Iraq";
  1185. assert(!std::regex_match(s, m, std::wregex(L"q[^u]",
  1186. std::regex_constants::awk)));
  1187. assert(m.size() == 0);
  1188. }
  1189. {
  1190. std::wcmatch m;
  1191. const wchar_t s[] = L"AmB";
  1192. assert(std::regex_match(s, m, std::wregex(L"A[[:lower:]]B",
  1193. std::regex_constants::awk)));
  1194. assert(m.size() == 1);
  1195. assert(!m.prefix().matched);
  1196. assert(m.prefix().first == s);
  1197. assert(m.prefix().second == m[0].first);
  1198. assert(!m.suffix().matched);
  1199. assert(m.suffix().first == m[0].second);
  1200. assert(m.suffix().second == m[0].second);
  1201. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1202. assert(m.position(0) == 0);
  1203. assert(m.str(0) == s);
  1204. }
  1205. {
  1206. std::wcmatch m;
  1207. const wchar_t s[] = L"AMB";
  1208. assert(!std::regex_match(s, m, std::wregex(L"A[[:lower:]]B",
  1209. std::regex_constants::awk)));
  1210. assert(m.size() == 0);
  1211. }
  1212. {
  1213. std::wcmatch m;
  1214. const wchar_t s[] = L"AMB";
  1215. assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B",
  1216. std::regex_constants::awk)));
  1217. assert(m.size() == 1);
  1218. assert(!m.prefix().matched);
  1219. assert(m.prefix().first == s);
  1220. assert(m.prefix().second == m[0].first);
  1221. assert(!m.suffix().matched);
  1222. assert(m.suffix().first == m[0].second);
  1223. assert(m.suffix().second == m[0].second);
  1224. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1225. assert(m.position(0) == 0);
  1226. assert(m.str(0) == s);
  1227. }
  1228. {
  1229. std::wcmatch m;
  1230. const wchar_t s[] = L"AmB";
  1231. assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B",
  1232. std::regex_constants::awk)));
  1233. assert(m.size() == 0);
  1234. }
  1235. {
  1236. std::wcmatch m;
  1237. const wchar_t s[] = L"A5B";
  1238. assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B",
  1239. std::regex_constants::awk)));
  1240. assert(m.size() == 0);
  1241. }
  1242. {
  1243. std::wcmatch m;
  1244. const wchar_t s[] = L"A?B";
  1245. assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B",
  1246. std::regex_constants::awk)));
  1247. assert(m.size() == 1);
  1248. assert(!m.prefix().matched);
  1249. assert(m.prefix().first == s);
  1250. assert(m.prefix().second == m[0].first);
  1251. assert(!m.suffix().matched);
  1252. assert(m.suffix().first == m[0].second);
  1253. assert(m.suffix().second == m[0].second);
  1254. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1255. assert(m.position(0) == 0);
  1256. assert(m.str(0) == s);
  1257. }
  1258. {
  1259. std::wcmatch m;
  1260. const wchar_t s[] = L"-";
  1261. assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
  1262. std::regex_constants::awk)));
  1263. assert(m.size() == 1);
  1264. assert(!m.prefix().matched);
  1265. assert(m.prefix().first == s);
  1266. assert(m.prefix().second == m[0].first);
  1267. assert(!m.suffix().matched);
  1268. assert(m.suffix().first == m[0].second);
  1269. assert(m.suffix().second == m[0].second);
  1270. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1271. assert(m.position(0) == 0);
  1272. assert(m.str(0) == s);
  1273. }
  1274. {
  1275. std::wcmatch m;
  1276. const wchar_t s[] = L"z";
  1277. assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
  1278. std::regex_constants::awk)));
  1279. assert(m.size() == 1);
  1280. assert(!m.prefix().matched);
  1281. assert(m.prefix().first == s);
  1282. assert(m.prefix().second == m[0].first);
  1283. assert(!m.suffix().matched);
  1284. assert(m.suffix().first == m[0].second);
  1285. assert(m.suffix().second == m[0].second);
  1286. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1287. assert(m.position(0) == 0);
  1288. assert(m.str(0) == s);
  1289. }
  1290. {
  1291. std::wcmatch m;
  1292. const wchar_t s[] = L"m";
  1293. assert(!std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]",
  1294. std::regex_constants::awk)));
  1295. assert(m.size() == 0);
  1296. }
  1297. std::locale::global(std::locale(LOCALE_cs_CZ_ISO8859_2));
  1298. {
  1299. std::wcmatch m;
  1300. const wchar_t s[] = L"m";
  1301. assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
  1302. std::regex_constants::awk)));
  1303. assert(m.size() == 1);
  1304. assert(!m.prefix().matched);
  1305. assert(m.prefix().first == s);
  1306. assert(m.prefix().second == m[0].first);
  1307. assert(!m.suffix().matched);
  1308. assert(m.suffix().first == m[0].second);
  1309. assert(m.suffix().second == m[0].second);
  1310. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1311. assert(m.position(0) == 0);
  1312. assert(m.str(0) == s);
  1313. }
  1314. {
  1315. std::wcmatch m;
  1316. const wchar_t s[] = L"Ch";
  1317. assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
  1318. std::regex_constants::awk | std::regex_constants::icase)));
  1319. assert(m.size() == 1);
  1320. assert(!m.prefix().matched);
  1321. assert(m.prefix().first == s);
  1322. assert(m.prefix().second == m[0].first);
  1323. assert(!m.suffix().matched);
  1324. assert(m.suffix().first == m[0].second);
  1325. assert(m.suffix().second == m[0].second);
  1326. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1327. assert(m.position(0) == 0);
  1328. assert(m.str(0) == s);
  1329. }
  1330. std::locale::global(std::locale("C"));
  1331. {
  1332. std::wcmatch m;
  1333. const wchar_t s[] = L"m";
  1334. assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]",
  1335. std::regex_constants::awk)));
  1336. assert(m.size() == 0);
  1337. }
  1338. {
  1339. std::wcmatch m;
  1340. const wchar_t s[] = L"01a45cef9";
  1341. assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]*",
  1342. std::regex_constants::awk)));
  1343. assert(m.size() == 0);
  1344. }
  1345. {
  1346. std::wcmatch m;
  1347. const wchar_t s[] = L"01a45cef9";
  1348. assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]+",
  1349. std::regex_constants::awk)));
  1350. assert(m.size() == 0);
  1351. }
  1352. {
  1353. const wchar_t r[] = L"^[-+]?[0-9]+[CF]$";
  1354. std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r);
  1355. typedef forward_iterator<const wchar_t*> FI;
  1356. typedef bidirectional_iterator<const wchar_t*> BI;
  1357. std::wregex regex(FI(r), FI(r+sr), std::regex_constants::awk);
  1358. std::match_results<BI> m;
  1359. const wchar_t s[] = L"-40C";
  1360. std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s);
  1361. assert(std::regex_match(BI(s), BI(s+ss), m, regex));
  1362. assert(m.size() == 1);
  1363. assert(!m.prefix().matched);
  1364. assert(m.prefix().first == BI(s));
  1365. assert(m.prefix().second == m[0].first);
  1366. assert(!m.suffix().matched);
  1367. assert(m.suffix().first == m[0].second);
  1368. assert(m.suffix().second == m[0].second);
  1369. assert(m.length(0) == 4);
  1370. assert(m.position(0) == 0);
  1371. assert(m.str(0) == s);
  1372. }
  1373. {
  1374. std::wcmatch m;
  1375. const wchar_t s[] = L"\n\n\n";
  1376. assert(std::regex_match(s, m, std::wregex(L"[\\n]+",
  1377. std::regex_constants::awk)));
  1378. assert(m.size() == 1);
  1379. assert(!m.prefix().matched);
  1380. assert(m.prefix().first == s);
  1381. assert(m.prefix().second == m[0].first);
  1382. assert(!m.suffix().matched);
  1383. assert(m.suffix().first == m[0].second);
  1384. assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
  1385. assert((size_t)m.length(0) == std::char_traits<wchar_t>::length(s));
  1386. assert(m.position(0) == 0);
  1387. assert(m.str(0) == s);
  1388. }
  1389. return 0;
  1390. }