dromaeo-object-regexp-modern.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. startTest("dromaeo-object-regexp", '812dde38');
  2. // Try to force real results
  3. let str = [], tmp, ret, re;
  4. const testStrings = [];
  5. var i = 65536;
  6. const randomChar = () => String.fromCharCode((25 * Math.random()) + 97);
  7. for (let i = 0; i < 16384; i++)
  8. str.push(randomChar());
  9. str = str.join("");
  10. str += str;
  11. str += str;
  12. const generateTestStrings = count => {
  13. let t, nest;
  14. if (testStrings.length >= count)
  15. return testStrings.slice(0, count);
  16. for (let i = testStrings.length; i < count; i++) {
  17. // Make all tested strings different
  18. t = randomChar() + str + randomChar();
  19. nest = Math.floor(4 * Math.random());
  20. for (let j = 0; j < nest; j++) {
  21. t = randomChar() + t + randomChar();
  22. }
  23. // Try to minimize benchmark order dependencies by
  24. // exercising the strings
  25. for (let j = 0; j < t.length; j += 100) {
  26. ret = t[j];
  27. ret = t.substring(j, j + 100);
  28. }
  29. testStrings[i] = t;
  30. }
  31. return testStrings;
  32. };
  33. // TESTS: split
  34. prep(() => {
  35. // It's impossible to specify empty regexp by simply
  36. // using two slashes as this will be interpreted as a
  37. // comment start. See note to ECMA-262 5th 7.8.5.
  38. re = /(?:)/;
  39. tmp = generateTestStrings(30);
  40. });
  41. test("Compiled Object Empty Split", () => {
  42. for (let i = 0; i < 30; i++)
  43. ret = tmp[i].split(re);
  44. });
  45. prep(() => {
  46. re = /a/;
  47. tmp = generateTestStrings(30);
  48. });
  49. test("Compiled Object Char Split", () => {
  50. for (let i = 0; i < 30; i++)
  51. ret = tmp[i].split(re);
  52. });
  53. prep(() => {
  54. re = /.*/;
  55. tmp = generateTestStrings(100);
  56. });
  57. test("Compiled Object Variable Split", () => {
  58. for (let i = 0; i < 100; i++)
  59. ret = tmp[i].split(re);
  60. });
  61. // TESTS: Compiled RegExps
  62. prep(() => {
  63. re = /aaaaaaaaaa/g;
  64. tmp = generateTestStrings(100);
  65. });
  66. test("Compiled Match", () => {
  67. for (let i = 0; i < 100; i++)
  68. ret = tmp[i].match(re);
  69. });
  70. prep(() => {
  71. tmp = generateTestStrings(100);
  72. });
  73. test("Compiled Test", () => {
  74. for (let i = 0; i < 100; i++)
  75. ret = re.test(tmp[i]);
  76. });
  77. prep(() => {
  78. tmp = generateTestStrings(100);
  79. });
  80. test("Compiled Empty Replace", () => {
  81. for (let i = 0; i < 50; i++)
  82. ret = tmp[i].replace(re, "");
  83. });
  84. prep(() => {
  85. tmp = generateTestStrings(50);
  86. });
  87. test("Compiled 12 Char Replace", () => {
  88. for (let i = 0; i < 50; i++)
  89. ret = tmp[i].replace(re, "asdfasdfasdf");
  90. });
  91. prep(() => {
  92. re = new RegExp("aaaaaaaaaa", "g");
  93. tmp = generateTestStrings(100);
  94. });
  95. test("Compiled Object Match", () => {
  96. for (let i = 0; i < 100; i++)
  97. ret = tmp[i].match(re);
  98. });
  99. prep(() => {
  100. tmp = generateTestStrings(100);
  101. });
  102. test("Compiled Object Test", () => {
  103. for (let i = 0; i < 100; i++)
  104. ret = re.test(tmp[i]);
  105. });
  106. prep(() => {
  107. tmp = generateTestStrings(50);
  108. });
  109. test("Compiled Object Empty Replace", () => {
  110. for (let i = 0; i < 50; i++)
  111. ret = tmp[i].replace(re, "");
  112. });
  113. prep(() => {
  114. tmp = generateTestStrings(50);
  115. });
  116. test("Compiled Object 12 Char Replace", () => {
  117. for (let i = 0; i < 50; i++)
  118. ret = tmp[i].replace(re, "asdfasdfasdf");
  119. });
  120. prep(() => {
  121. tmp = generateTestStrings(50);
  122. });
  123. test("Compiled Object 12 Char Replace Function", () => {
  124. for (let i = 0; i < 50; i++)
  125. ret = tmp[i].replace(re, all => "asdfasdfasdf");
  126. });
  127. // TESTS: Variable Length
  128. prep(() => {
  129. re = /a.*a/;
  130. tmp = generateTestStrings(100);
  131. });
  132. test("Compiled Variable Match", () => {
  133. for (let i = 0; i < 100; i++)
  134. ret = tmp[i].match(re);
  135. });
  136. prep(() => {
  137. tmp = generateTestStrings(100);
  138. });
  139. test("Compiled Variable Test", () => {
  140. for (let i = 0; i < 100; i++)
  141. ret = re.test(tmp[i]);
  142. });
  143. prep(() => {
  144. tmp = generateTestStrings(50);
  145. });
  146. test("Compiled Variable Empty Replace", () => {
  147. for (let i = 0; i < 50; i++)
  148. ret = tmp[i].replace(re, "");
  149. });
  150. prep(() => {
  151. tmp = generateTestStrings(50);
  152. });
  153. test("Compiled Variable 12 Char Replace", () => {
  154. for (let i = 0; i < 50; i++)
  155. ret = tmp[i].replace(re, "asdfasdfasdf");
  156. });
  157. prep(() => {
  158. re = new RegExp("aaaaaaaaaa", "g");
  159. tmp = generateTestStrings(100);
  160. });
  161. test("Compiled Variable Object Match", () => {
  162. for (let i = 0; i < 100; i++)
  163. ret = tmp[i].match(re);
  164. });
  165. prep(() => {
  166. tmp = generateTestStrings(100);
  167. });
  168. test("Compiled Variable Object Test", () => {
  169. for (let i = 0; i < 100; i++)
  170. ret = re.test(tmp[i]);
  171. });
  172. prep(() => {
  173. tmp = generateTestStrings(50);
  174. });
  175. test("Compiled Variable Object Empty Replace", () => {
  176. for (let i = 0; i < 50; i++)
  177. ret = tmp[i].replace(re, "");
  178. });
  179. prep(() => {
  180. tmp = generateTestStrings(50);
  181. });
  182. test("Compiled Variable Object 12 Char Replace", () => {
  183. for (let i = 0; i < 50; i++)
  184. ret = tmp[i].replace(re, "asdfasdfasdf");
  185. });
  186. prep(() => {
  187. tmp = generateTestStrings(50);
  188. });
  189. test("Compiled Variable Object 12 Char Replace Function", () => {
  190. for (let i = 0; i < 50; i++)
  191. ret = tmp[i].replace(re, all => "asdfasdfasdf");
  192. });
  193. // TESTS: Capturing
  194. prep(() => {
  195. re = /aa(b)aa/g;
  196. tmp = generateTestStrings(100);
  197. });
  198. test("Compiled Capture Match", () => {
  199. for (let i = 0; i < 100; i++)
  200. ret = tmp[i].match(re);
  201. });
  202. prep(() => {
  203. tmp = generateTestStrings(50);
  204. });
  205. test("Compiled Capture Replace", () => {
  206. for (let i = 0; i < 50; i++)
  207. ret = tmp[i].replace(re, "asdfasdfasdf");
  208. });
  209. prep(() => {
  210. tmp = generateTestStrings(50);
  211. });
  212. test("Compiled Capture Replace with Capture", () => {
  213. for (let i = 0; i < 50; i++)
  214. ret = tmp[i].replace(re, "asdf\\1asdfasdf");
  215. });
  216. prep(() => {
  217. tmp = generateTestStrings(50);
  218. });
  219. test("Compiled Capture Replace with Capture Function", () => {
  220. for (let i = 0; i < 50; i++)
  221. ret = tmp[i].replace(re, (all, capture) => "asdf" + capture + "asdfasdf");
  222. });
  223. prep(() => {
  224. tmp = generateTestStrings(50);
  225. });
  226. test("Compiled Capture Replace with Upperase Capture Function", () => {
  227. for (let i = 0; i < 50; i++)
  228. ret = tmp[i].replace(re, (all, capture) => capture.toUpperCase());
  229. });
  230. // TESTS: Uncompiled RegExps
  231. prep(() => {
  232. tmp = generateTestStrings(100);
  233. });
  234. test("Uncompiled Match", () => {
  235. for (let i = 0; i < 100; i++)
  236. ret = tmp[i].match(/aaaaaaaaaa/g);
  237. });
  238. prep(() => {
  239. tmp = generateTestStrings(100);
  240. });
  241. test("Uncompiled Test", () => {
  242. for (let i = 0; i < 100; i++)
  243. ret = (/aaaaaaaaaa/g).test(tmp[i]);
  244. });
  245. prep(() => {
  246. tmp = generateTestStrings(50);
  247. });
  248. test("Uncompiled Empty Replace", () => {
  249. for (let i = 0; i < 50; i++)
  250. ret = tmp[i].replace(/aaaaaaaaaa/g, "");
  251. });
  252. prep(() => {
  253. tmp = generateTestStrings(50);
  254. });
  255. test("Uncompiled 12 Char Replace", () => {
  256. for (let i = 0; i < 50; i++)
  257. ret = tmp[i].replace(/aaaaaaaaaa/g, "asdfasdfasdf");
  258. });
  259. prep(() => {
  260. tmp = generateTestStrings(100);
  261. });
  262. test("Uncompiled Object Match", () => {
  263. for (let i = 0; i < 100; i++)
  264. ret = tmp[i].match(new RegExp("aaaaaaaaaa", "g"));
  265. });
  266. prep(() => {
  267. tmp = generateTestStrings(100);
  268. });
  269. test("Uncompiled Object Test", () => {
  270. for (let i = 0; i < 100; i++)
  271. ret = (new RegExp("aaaaaaaaaa", "g")).test(tmp[i]);
  272. });
  273. prep(() => {
  274. tmp = generateTestStrings(50);
  275. });
  276. test("Uncompiled Object Empty Replace", () => {
  277. for (let i = 0; i < 50; i++)
  278. ret = tmp[i].replace(new RegExp("aaaaaaaaaa", "g"), "");
  279. });
  280. prep(() => {
  281. tmp = generateTestStrings(50);
  282. });
  283. test("Uncompiled Object 12 Char Replace", () => {
  284. for (let i = 0; i < 50; i++)
  285. ret = tmp[i].replace(new RegExp("aaaaaaaaaa", "g"), "asdfasdfasdf");
  286. });
  287. endTest();