initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / ecma_3 / RegExp / perlstress-001.js
1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: NPL 1.1/GPL 2.0/LGPL 2.1
3 *
4 * The contents of this file are subject to the Netscape Public License
5 * Version 1.1 (the "License"); you may not use this file except in
6 * compliance with the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/NPL/
8 *
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
12 * License.
13 *
14 * The Original Code is JavaScript Engine testing utilities.
15 *
16 * The Initial Developer of the Original Code is Netscape Communications Corp.
17 * Portions created by the Initial Developer are Copyright (C) 2002
18 * the Initial Developer. All Rights Reserved.
19 *
20 * Contributor(s): pschwartau@netscape.com, rogerl@netscape.com
21 *
22 * Alternatively, the contents of this file may be used under the terms of
23 * either the GNU General Public License Version 2 or later (the "GPL"), or
24 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
25 * in which case the provisions of the GPL or the LGPL are applicable instead
26 * of those above. If you wish to allow use of your version of this file only
27 * under the terms of either the GPL or the LGPL, and not to allow others to
28 * use your version of this file under the terms of the NPL, indicate your
29 * decision by deleting the provisions above and replace them with the notice
30 * and other provisions required by the GPL or the LGPL. If you do not delete
31 * the provisions above, a recipient may use your version of this file under
32 * the terms of any one of the NPL, the GPL or the LGPL.
33 *
34 * ***** END LICENSE BLOCK *****
35 *
36 *
37 * Date:    2002-07-07
38 * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine.
39 * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested.
40 *
41 * This test was created by running various patterns and strings through the
42 * Perl 5 RegExp engine. We saved the results below to test the JS engine.
43 *
44 * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented
45 * out such sections altogether, or modified them to fit what we expect from JS.
46 *
47 * EXAMPLES:
48 *
49 * - In JS, regexp captures (/(a) etc./) must hold |undefined| if not used.
50 *   See http://bugzilla.mozilla.org/show_bug.cgi?id=123437.
51 *   By contrast, in Perl, unmatched captures hold the empty string.
52 *   We have modified such sections accordingly. Example:
53
54     pattern = /^([^a-z])|(\^)$/;
55     string = '.';
56     actualmatch = string.match(pattern);
57   //expectedmatch = Array('.', '.', '');        <<<--- Perl
58     expectedmatch = Array('.', '.', undefined); <<<--- JS
59     addThis();
60
61
62 * - In JS, you can't refer to a capture before it's encountered & completed
63 *
64 * - Perl supports ] & ^] inside a [], ECMA does not
65 *
66 * - ECMA does support (?: (?= and (?! operators, but doesn't support (?<  etc.
67 *
68 * - ECMA doesn't support (?imsx or (?-imsx
69 *
70 * - ECMA doesn't support (?(condition)
71 *
72 * - Perl has \Z has end-of-line, ECMA doesn't
73 *
74 * - In ECMA, ^ matches only the empty string before the first character
75 *
76 * - In ECMA, $ matches only the empty string at end of input (unless multiline)
77 *
78 * - ECMA spec says that each atom in a range must be a single character
79 *
80 * - ECMA doesn't support \A
81 *
82 * - ECMA doesn't have rules for [:
83 *
84 */
85 //-----------------------------------------------------------------------------
86 var i = 0;
87 var bug = 85721;
88 var summary = 'Testing regular expression edge cases';
89 var cnSingleSpace = ' ';
90 var status = '';
91 var statusmessages = new Array();
92 var pattern = '';
93 var patterns = new Array();
94 var string = '';
95 var strings = new Array();
96 var actualmatch = '';
97 var actualmatches = new Array();
98 var expectedmatch = '';
99 var expectedmatches = new Array();
100 var cnLBOUND = 1;
101 var cnUBOUND = 1000;
102
103
104 status = inSection(1);
105 pattern = /abc/;
106 string = 'abc';
107 actualmatch = string.match(pattern);
108 expectedmatch = Array('abc');
109 addThis();
110
111 status = inSection(2);
112 pattern = /abc/;
113 string = 'xabcy';
114 actualmatch = string.match(pattern);
115 expectedmatch = Array('abc');
116 addThis();
117
118 status = inSection(3);
119 pattern = /abc/;
120 string = 'ababc';
121 actualmatch = string.match(pattern);
122 expectedmatch = Array('abc');
123 addThis();
124
125 status = inSection(4);
126 pattern = /ab*c/;
127 string = 'abc';
128 actualmatch = string.match(pattern);
129 expectedmatch = Array('abc');
130 addThis();
131
132 status = inSection(5);
133 pattern = /ab*bc/;
134 string = 'abc';
135 actualmatch = string.match(pattern);
136 expectedmatch = Array('abc');
137 addThis();
138
139 status = inSection(6);
140 pattern = /ab*bc/;
141 string = 'abbc';
142 actualmatch = string.match(pattern);
143 expectedmatch = Array('abbc');
144 addThis();
145
146 status = inSection(7);
147 pattern = /ab*bc/;
148 string = 'abbbbc';
149 actualmatch = string.match(pattern);
150 expectedmatch = Array('abbbbc');
151 addThis();
152
153 status = inSection(8);
154 pattern = /.{1}/;
155 string = 'abbbbc';
156 actualmatch = string.match(pattern);
157 expectedmatch = Array('a');
158 addThis();
159
160 status = inSection(9);
161 pattern = /.{3,4}/;
162 string = 'abbbbc';
163 actualmatch = string.match(pattern);
164 expectedmatch = Array('abbb');
165 addThis();
166
167 status = inSection(10);
168 pattern = /ab{0,}bc/;
169 string = 'abbbbc';
170 actualmatch = string.match(pattern);
171 expectedmatch = Array('abbbbc');
172 addThis();
173
174 status = inSection(11);
175 pattern = /ab+bc/;
176 string = 'abbc';
177 actualmatch = string.match(pattern);
178 expectedmatch = Array('abbc');
179 addThis();
180
181 status = inSection(12);
182 pattern = /ab+bc/;
183 string = 'abbbbc';
184 actualmatch = string.match(pattern);
185 expectedmatch = Array('abbbbc');
186 addThis();
187
188 status = inSection(13);
189 pattern = /ab{1,}bc/;
190 string = 'abbbbc';
191 actualmatch = string.match(pattern);
192 expectedmatch = Array('abbbbc');
193 addThis();
194
195 status = inSection(14);
196 pattern = /ab{1,3}bc/;
197 string = 'abbbbc';
198 actualmatch = string.match(pattern);
199 expectedmatch = Array('abbbbc');
200 addThis();
201
202 status = inSection(15);
203 pattern = /ab{3,4}bc/;
204 string = 'abbbbc';
205 actualmatch = string.match(pattern);
206 expectedmatch = Array('abbbbc');
207 addThis();
208
209 status = inSection(16);
210 pattern = /ab?bc/;
211 string = 'abbc';
212 actualmatch = string.match(pattern);
213 expectedmatch = Array('abbc');
214 addThis();
215
216 status = inSection(17);
217 pattern = /ab?bc/;
218 string = 'abc';
219 actualmatch = string.match(pattern);
220 expectedmatch = Array('abc');
221 addThis();
222
223 status = inSection(18);
224 pattern = /ab{0,1}bc/;
225 string = 'abc';
226 actualmatch = string.match(pattern);
227 expectedmatch = Array('abc');
228 addThis();
229
230 status = inSection(19);
231 pattern = /ab?c/;
232 string = 'abc';
233 actualmatch = string.match(pattern);
234 expectedmatch = Array('abc');
235 addThis();
236
237 status = inSection(20);
238 pattern = /ab{0,1}c/;
239 string = 'abc';
240 actualmatch = string.match(pattern);
241 expectedmatch = Array('abc');
242 addThis();
243
244 status = inSection(21);
245 pattern = /^abc$/;
246 string = 'abc';
247 actualmatch = string.match(pattern);
248 expectedmatch = Array('abc');
249 addThis();
250
251 status = inSection(22);
252 pattern = /^abc/;
253 string = 'abcc';
254 actualmatch = string.match(pattern);
255 expectedmatch = Array('abc');
256 addThis();
257
258 status = inSection(23);
259 pattern = /abc$/;
260 string = 'aabc';
261 actualmatch = string.match(pattern);
262 expectedmatch = Array('abc');
263 addThis();
264
265 status = inSection(24);
266 pattern = /^/;
267 string = 'abc';
268 actualmatch = string.match(pattern);
269 expectedmatch = Array('');
270 addThis();
271
272 status = inSection(25);
273 pattern = /$/;
274 string = 'abc';
275 actualmatch = string.match(pattern);
276 expectedmatch = Array('');
277 addThis();
278
279 status = inSection(26);
280 pattern = /a.c/;
281 string = 'abc';
282 actualmatch = string.match(pattern);
283 expectedmatch = Array('abc');
284 addThis();
285
286 status = inSection(27);
287 pattern = /a.c/;
288 string = 'axc';
289 actualmatch = string.match(pattern);
290 expectedmatch = Array('axc');
291 addThis();
292
293 status = inSection(28);
294 pattern = /a.*c/;
295 string = 'axyzc';
296 actualmatch = string.match(pattern);
297 expectedmatch = Array('axyzc');
298 addThis();
299
300 status = inSection(29);
301 pattern = /a[bc]d/;
302 string = 'abd';
303 actualmatch = string.match(pattern);
304 expectedmatch = Array('abd');
305 addThis();
306
307 status = inSection(30);
308 pattern = /a[b-d]e/;
309 string = 'ace';
310 actualmatch = string.match(pattern);
311 expectedmatch = Array('ace');
312 addThis();
313
314 status = inSection(31);
315 pattern = /a[b-d]/;
316 string = 'aac';
317 actualmatch = string.match(pattern);
318 expectedmatch = Array('ac');
319 addThis();
320
321 status = inSection(32);
322 pattern = /a[-b]/;
323 string = 'a-';
324 actualmatch = string.match(pattern);
325 expectedmatch = Array('a-');
326 addThis();
327
328 status = inSection(33);
329 pattern = /a[b-]/;
330 string = 'a-';
331 actualmatch = string.match(pattern);
332 expectedmatch = Array('a-');
333 addThis();
334
335 status = inSection(34);
336 pattern = /a]/;
337 string = 'a]';
338 actualmatch = string.match(pattern);
339 expectedmatch = Array('a]');
340 addThis();
341
342 /* Perl supports ] & ^] inside a [], ECMA does not
343 pattern = /a[]]b/;
344 status = inSection(35);
345 string = 'a]b';
346 actualmatch = string.match(pattern);
347 expectedmatch = Array('a]b');
348 addThis();
349 */
350
351 status = inSection(36);
352 pattern = /a[^bc]d/;
353 string = 'aed';
354 actualmatch = string.match(pattern);
355 expectedmatch = Array('aed');
356 addThis();
357
358 status = inSection(37);
359 pattern = /a[^-b]c/;
360 string = 'adc';
361 actualmatch = string.match(pattern);
362 expectedmatch = Array('adc');
363 addThis();
364
365 /* Perl supports ] & ^] inside a [], ECMA does not
366 status = inSection(38);
367 pattern = /a[^]b]c/;
368 string = 'adc';
369 actualmatch = string.match(pattern);
370 expectedmatch = Array('adc');
371 addThis();
372 */
373
374 status = inSection(39);
375 pattern = /\ba\b/;
376 string = 'a-';
377 actualmatch = string.match(pattern);
378 expectedmatch = Array('a');
379 addThis();
380
381 status = inSection(40);
382 pattern = /\ba\b/;
383 string = '-a';
384 actualmatch = string.match(pattern);
385 expectedmatch = Array('a');
386 addThis();
387
388 status = inSection(41);
389 pattern = /\ba\b/;
390 string = '-a-';
391 actualmatch = string.match(pattern);
392 expectedmatch = Array('a');
393 addThis();
394
395 status = inSection(42);
396 pattern = /\By\b/;
397 string = 'xy';
398 actualmatch = string.match(pattern);
399 expectedmatch = Array('y');
400 addThis();
401
402 status = inSection(43);
403 pattern = /\by\B/;
404 string = 'yz';
405 actualmatch = string.match(pattern);
406 expectedmatch = Array('y');
407 addThis();
408
409 status = inSection(44);
410 pattern = /\By\B/;
411 string = 'xyz';
412 actualmatch = string.match(pattern);
413 expectedmatch = Array('y');
414 addThis();
415
416 status = inSection(45);
417 pattern = /\w/;
418 string = 'a';
419 actualmatch = string.match(pattern);
420 expectedmatch = Array('a');
421 addThis();
422
423 status = inSection(46);
424 pattern = /\W/;
425 string = '-';
426 actualmatch = string.match(pattern);
427 expectedmatch = Array('-');
428 addThis();
429
430 status = inSection(47);
431 pattern = /a\Sb/;
432 string = 'a-b';
433 actualmatch = string.match(pattern);
434 expectedmatch = Array('a-b');
435 addThis();
436
437 status = inSection(48);
438 pattern = /\d/;
439 string = '1';
440 actualmatch = string.match(pattern);
441 expectedmatch = Array('1');
442 addThis();
443
444 status = inSection(49);
445 pattern = /\D/;
446 string = '-';
447 actualmatch = string.match(pattern);
448 expectedmatch = Array('-');
449 addThis();
450
451 status = inSection(50);
452 pattern = /[\w]/;
453 string = 'a';
454 actualmatch = string.match(pattern);
455 expectedmatch = Array('a');
456 addThis();
457
458 status = inSection(51);
459 pattern = /[\W]/;
460 string = '-';
461 actualmatch = string.match(pattern);
462 expectedmatch = Array('-');
463 addThis();
464
465 status = inSection(52);
466 pattern = /a[\S]b/;
467 string = 'a-b';
468 actualmatch = string.match(pattern);
469 expectedmatch = Array('a-b');
470 addThis();
471
472 status = inSection(53);
473 pattern = /[\d]/;
474 string = '1';
475 actualmatch = string.match(pattern);
476 expectedmatch = Array('1');
477 addThis();
478
479 status = inSection(54);
480 pattern = /[\D]/;
481 string = '-';
482 actualmatch = string.match(pattern);
483 expectedmatch = Array('-');
484 addThis();
485
486 status = inSection(55);
487 pattern = /ab|cd/;
488 string = 'abc';
489 actualmatch = string.match(pattern);
490 expectedmatch = Array('ab');
491 addThis();
492
493 status = inSection(56);
494 pattern = /ab|cd/;
495 string = 'abcd';
496 actualmatch = string.match(pattern);
497 expectedmatch = Array('ab');
498 addThis();
499
500 status = inSection(57);
501 pattern = /()ef/;
502 string = 'def';
503 actualmatch = string.match(pattern);
504 expectedmatch = Array('ef', '');
505 addThis();
506
507 status = inSection(58);
508 pattern = /a\(b/;
509 string = 'a(b';
510 actualmatch = string.match(pattern);
511 expectedmatch = Array('a(b');
512 addThis();
513
514 status = inSection(59);
515 pattern = /a\(*b/;
516 string = 'ab';
517 actualmatch = string.match(pattern);
518 expectedmatch = Array('ab');
519 addThis();
520
521 status = inSection(60);
522 pattern = /a\(*b/;
523 string = 'a((b';
524 actualmatch = string.match(pattern);
525 expectedmatch = Array('a((b');
526 addThis();
527
528 status = inSection(61);
529 pattern = /a\\b/;
530 string = 'a\\b';
531 actualmatch = string.match(pattern);
532 expectedmatch = Array('a\\b');
533 addThis();
534
535 status = inSection(62);
536 pattern = /((a))/;
537 string = 'abc';
538 actualmatch = string.match(pattern);
539 expectedmatch = Array('a', 'a', 'a');
540 addThis();
541
542 status = inSection(63);
543 pattern = /(a)b(c)/;
544 string = 'abc';
545 actualmatch = string.match(pattern);
546 expectedmatch = Array('abc', 'a', 'c');
547 addThis();
548
549 status = inSection(64);
550 pattern = /a+b+c/;
551 string = 'aabbabc';
552 actualmatch = string.match(pattern);
553 expectedmatch = Array('abc');
554 addThis();
555
556 status = inSection(65);
557 pattern = /a{1,}b{1,}c/;
558 string = 'aabbabc';
559 actualmatch = string.match(pattern);
560 expectedmatch = Array('abc');
561 addThis();
562
563 status = inSection(66);
564 pattern = /a.+?c/;
565 string = 'abcabc';
566 actualmatch = string.match(pattern);
567 expectedmatch = Array('abc');
568 addThis();
569
570 status = inSection(67);
571 pattern = /(a+|b)*/;
572 string = 'ab';
573 actualmatch = string.match(pattern);
574 expectedmatch = Array('ab', 'b');
575 addThis();
576
577 status = inSection(68);
578 pattern = /(a+|b){0,}/;
579 string = 'ab';
580 actualmatch = string.match(pattern);
581 expectedmatch = Array('ab', 'b');
582 addThis();
583
584 status = inSection(69);
585 pattern = /(a+|b)+/;
586 string = 'ab';
587 actualmatch = string.match(pattern);
588 expectedmatch = Array('ab', 'b');
589 addThis();
590
591 status = inSection(70);
592 pattern = /(a+|b){1,}/;
593 string = 'ab';
594 actualmatch = string.match(pattern);
595 expectedmatch = Array('ab', 'b');
596 addThis();
597
598 status = inSection(71);
599 pattern = /(a+|b)?/;
600 string = 'ab';
601 actualmatch = string.match(pattern);
602 expectedmatch = Array('a', 'a');
603 addThis();
604
605 status = inSection(72);
606 pattern = /(a+|b){0,1}/;
607 string = 'ab';
608 actualmatch = string.match(pattern);
609 expectedmatch = Array('a', 'a');
610 addThis();
611
612 status = inSection(73);
613 pattern = /[^ab]*/;
614 string = 'cde';
615 actualmatch = string.match(pattern);
616 expectedmatch = Array('cde');
617 addThis();
618
619 status = inSection(74);
620 pattern = /([abc])*d/;
621 string = 'abbbcd';
622 actualmatch = string.match(pattern);
623 expectedmatch = Array('abbbcd', 'c');
624 addThis();
625
626 status = inSection(75);
627 pattern = /([abc])*bcd/;
628 string = 'abcd';
629 actualmatch = string.match(pattern);
630 expectedmatch = Array('abcd', 'a');
631 addThis();
632
633 status = inSection(76);
634 pattern = /a|b|c|d|e/;
635 string = 'e';
636 actualmatch = string.match(pattern);
637 expectedmatch = Array('e');
638 addThis();
639
640 status = inSection(77);
641 pattern = /(a|b|c|d|e)f/;
642 string = 'ef';
643 actualmatch = string.match(pattern);
644 expectedmatch = Array('ef', 'e');
645 addThis();
646
647 status = inSection(78);
648 pattern = /abcd*efg/;
649 string = 'abcdefg';
650 actualmatch = string.match(pattern);
651 expectedmatch = Array('abcdefg');
652 addThis();
653
654 status = inSection(79);
655 pattern = /ab*/;
656 string = 'xabyabbbz';
657 actualmatch = string.match(pattern);
658 expectedmatch = Array('ab');
659 addThis();
660
661 status = inSection(80);
662 pattern = /ab*/;
663 string = 'xayabbbz';
664 actualmatch = string.match(pattern);
665 expectedmatch = Array('a');
666 addThis();
667
668 status = inSection(81);
669 pattern = /(ab|cd)e/;
670 string = 'abcde';
671 actualmatch = string.match(pattern);
672 expectedmatch = Array('cde', 'cd');
673 addThis();
674
675 status = inSection(82);
676 pattern = /[abhgefdc]ij/;
677 string = 'hij';
678 actualmatch = string.match(pattern);
679 expectedmatch = Array('hij');
680 addThis();
681
682 status = inSection(83);
683 pattern = /(abc|)ef/;
684 string = 'abcdef';
685 actualmatch = string.match(pattern);
686 expectedmatch = Array('ef', '');
687 addThis();
688
689 status = inSection(84);
690 pattern = /(a|b)c*d/;
691 string = 'abcd';
692 actualmatch = string.match(pattern);
693 expectedmatch = Array('bcd', 'b');
694 addThis();
695
696 status = inSection(85);
697 pattern = /(ab|ab*)bc/;
698 string = 'abc';
699 actualmatch = string.match(pattern);
700 expectedmatch = Array('abc', 'a');
701 addThis();
702
703 status = inSection(86);
704 pattern = /a([bc]*)c*/;
705 string = 'abc';
706 actualmatch = string.match(pattern);
707 expectedmatch = Array('abc', 'bc');
708 addThis();
709
710 status = inSection(87);
711 pattern = /a([bc]*)(c*d)/;
712 string = 'abcd';
713 actualmatch = string.match(pattern);
714 expectedmatch = Array('abcd', 'bc', 'd');
715 addThis();
716
717 status = inSection(88);
718 pattern = /a([bc]+)(c*d)/;
719 string = 'abcd';
720 actualmatch = string.match(pattern);
721 expectedmatch = Array('abcd', 'bc', 'd');
722 addThis();
723
724 status = inSection(89);
725 pattern = /a([bc]*)(c+d)/;
726 string = 'abcd';
727 actualmatch = string.match(pattern);
728 expectedmatch = Array('abcd', 'b', 'cd');
729 addThis();
730
731 status = inSection(90);
732 pattern = /a[bcd]*dcdcde/;
733 string = 'adcdcde';
734 actualmatch = string.match(pattern);
735 expectedmatch = Array('adcdcde');
736 addThis();
737
738 status = inSection(91);
739 pattern = /(ab|a)b*c/;
740 string = 'abc';
741 actualmatch = string.match(pattern);
742 expectedmatch = Array('abc', 'ab');
743 addThis();
744
745 status = inSection(92);
746 pattern = /((a)(b)c)(d)/;
747 string = 'abcd';
748 actualmatch = string.match(pattern);
749 expectedmatch = Array('abcd', 'abc', 'a', 'b', 'd');
750 addThis();
751
752 status = inSection(93);
753 pattern = /[a-zA-Z_][a-zA-Z0-9_]*/;
754 string = 'alpha';
755 actualmatch = string.match(pattern);
756 expectedmatch = Array('alpha');
757 addThis();
758
759 status = inSection(94);
760 pattern = /^a(bc+|b[eh])g|.h$/;
761 string = 'abh';
762 actualmatch = string.match(pattern);
763 expectedmatch = Array('bh', undefined);
764 addThis();
765
766 status = inSection(95);
767 pattern = /(bc+d$|ef*g.|h?i(j|k))/;
768 string = 'effgz';
769 actualmatch = string.match(pattern);
770 expectedmatch = Array('effgz', 'effgz', undefined);
771 addThis();
772
773 status = inSection(96);
774 pattern = /(bc+d$|ef*g.|h?i(j|k))/;
775 string = 'ij';
776 actualmatch = string.match(pattern);
777 expectedmatch = Array('ij', 'ij', 'j');
778 addThis();
779
780 status = inSection(97);
781 pattern = /(bc+d$|ef*g.|h?i(j|k))/;
782 string = 'reffgz';
783 actualmatch = string.match(pattern);
784 expectedmatch = Array('effgz', 'effgz', undefined);
785 addThis();
786
787 status = inSection(98);
788 pattern = /((((((((((a))))))))))/;
789 string = 'a';
790 actualmatch = string.match(pattern);
791 expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
792 addThis();
793
794 status = inSection(99);
795 pattern = /((((((((((a))))))))))\10/;
796 string = 'aa';
797 actualmatch = string.match(pattern);
798 expectedmatch = Array('aa', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
799 addThis();
800
801 status = inSection(100);
802 pattern = /((((((((((a))))))))))/;
803 string = 'a!';
804 actualmatch = string.match(pattern);
805 expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
806 addThis();
807
808 status = inSection(101);
809 pattern = /(((((((((a)))))))))/;
810 string = 'a';
811 actualmatch = string.match(pattern);
812 expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
813 addThis();
814
815 status = inSection(102);
816 pattern = /(.*)c(.*)/;
817 string = 'abcde';
818 actualmatch = string.match(pattern);
819 expectedmatch = Array('abcde', 'ab', 'de');
820 addThis();
821
822 status = inSection(103);
823 pattern = /abcd/;
824 string = 'abcd';
825 actualmatch = string.match(pattern);
826 expectedmatch = Array('abcd');
827 addThis();
828
829 status = inSection(104);
830 pattern = /a(bc)d/;
831 string = 'abcd';
832 actualmatch = string.match(pattern);
833 expectedmatch = Array('abcd', 'bc');
834 addThis();
835
836 status = inSection(105);
837 pattern = /a[-]?c/;
838 string = 'ac';
839 actualmatch = string.match(pattern);
840 expectedmatch = Array('ac');
841 addThis();
842
843 status = inSection(106);
844 pattern = /(abc)\1/;
845 string = 'abcabc';
846 actualmatch = string.match(pattern);
847 expectedmatch = Array('abcabc', 'abc');
848 addThis();
849
850 status = inSection(107);
851 pattern = /([a-c]*)\1/;
852 string = 'abcabc';
853 actualmatch = string.match(pattern);
854 expectedmatch = Array('abcabc', 'abc');
855 addThis();
856
857 status = inSection(108);
858 pattern = /(a)|\1/;
859 string = 'a';
860 actualmatch = string.match(pattern);
861 expectedmatch = Array('a', 'a');
862 addThis();
863
864 status = inSection(109);
865 pattern = /(([a-c])b*?\2)*/;
866 string = 'ababbbcbc';
867 actualmatch = string.match(pattern);
868 expectedmatch = Array('ababb', 'bb', 'b');
869 addThis();
870
871 status = inSection(110);
872 pattern = /(([a-c])b*?\2){3}/;
873 string = 'ababbbcbc';
874 actualmatch = string.match(pattern);
875 expectedmatch = Array('ababbbcbc', 'cbc', 'c');
876 addThis();
877
878 /* Can't refer to a capture before it's encountered & completed
879 status = inSection(111);
880 pattern = /((\3|b)\2(a)x)+/;
881 string = 'aaaxabaxbaaxbbax';
882 actualmatch = string.match(pattern);
883 expectedmatch = Array('bbax', 'bbax', 'b', 'a');
884 addThis();
885
886 status = inSection(112);
887 pattern = /((\3|b)\2(a)){2,}/;
888 string = 'bbaababbabaaaaabbaaaabba';
889 actualmatch = string.match(pattern);
890 expectedmatch = Array('bbaaaabba', 'bba', 'b', 'a');
891 addThis();
892 */
893
894 status = inSection(113);
895 pattern = /abc/i;
896 string = 'ABC';
897 actualmatch = string.match(pattern);
898 expectedmatch = Array('ABC');
899 addThis();
900
901 status = inSection(114);
902 pattern = /abc/i;
903 string = 'XABCY';
904 actualmatch = string.match(pattern);
905 expectedmatch = Array('ABC');
906 addThis();
907
908 status = inSection(115);
909 pattern = /abc/i;
910 string = 'ABABC';
911 actualmatch = string.match(pattern);
912 expectedmatch = Array('ABC');
913 addThis();
914
915 status = inSection(116);
916 pattern = /ab*c/i;
917 string = 'ABC';
918 actualmatch = string.match(pattern);
919 expectedmatch = Array('ABC');
920 addThis();
921
922 status = inSection(117);
923 pattern = /ab*bc/i;
924 string = 'ABC';
925 actualmatch = string.match(pattern);
926 expectedmatch = Array('ABC');
927 addThis();
928
929 status = inSection(118);
930 pattern = /ab*bc/i;
931 string = 'ABBC';
932 actualmatch = string.match(pattern);
933 expectedmatch = Array('ABBC');
934 addThis();
935
936 status = inSection(119);
937 pattern = /ab*?bc/i;
938 string = 'ABBBBC';
939 actualmatch = string.match(pattern);
940 expectedmatch = Array('ABBBBC');
941 addThis();
942
943 status = inSection(120);
944 pattern = /ab{0,}?bc/i;
945 string = 'ABBBBC';
946 actualmatch = string.match(pattern);
947 expectedmatch = Array('ABBBBC');
948 addThis();
949
950 status = inSection(121);
951 pattern = /ab+?bc/i;
952 string = 'ABBC';
953 actualmatch = string.match(pattern);
954 expectedmatch = Array('ABBC');
955 addThis();
956
957 status = inSection(122);
958 pattern = /ab+bc/i;
959 string = 'ABBBBC';
960 actualmatch = string.match(pattern);
961 expectedmatch = Array('ABBBBC');
962 addThis();
963
964 status = inSection(123);
965 pattern = /ab{1,}?bc/i;
966 string = 'ABBBBC';
967 actualmatch = string.match(pattern);
968 expectedmatch = Array('ABBBBC');
969 addThis();
970
971 status = inSection(124);
972 pattern = /ab{1,3}?bc/i;
973 string = 'ABBBBC';
974 actualmatch = string.match(pattern);
975 expectedmatch = Array('ABBBBC');
976 addThis();
977
978 status = inSection(125);
979 pattern = /ab{3,4}?bc/i;
980 string = 'ABBBBC';
981 actualmatch = string.match(pattern);
982 expectedmatch = Array('ABBBBC');
983 addThis();
984
985 status = inSection(126);
986 pattern = /ab??bc/i;
987 string = 'ABBC';
988 actualmatch = string.match(pattern);
989 expectedmatch = Array('ABBC');
990 addThis();
991
992 status = inSection(127);
993 pattern = /ab??bc/i;
994 string = 'ABC';
995 actualmatch = string.match(pattern);
996 expectedmatch = Array('ABC');
997 addThis();
998
999 status = inSection(128);
1000 pattern = /ab{0,1}?bc/i;
1001 string = 'ABC';
1002 actualmatch = string.match(pattern);
1003 expectedmatch = Array('ABC');
1004 addThis();
1005
1006 status = inSection(129);
1007 pattern = /ab??c/i;
1008 string = 'ABC';
1009 actualmatch = string.match(pattern);
1010 expectedmatch = Array('ABC');
1011 addThis();
1012
1013 status = inSection(130);
1014 pattern = /ab{0,1}?c/i;
1015 string = 'ABC';
1016 actualmatch = string.match(pattern);
1017 expectedmatch = Array('ABC');
1018 addThis();
1019
1020 status = inSection(131);
1021 pattern = /^abc$/i;
1022 string = 'ABC';
1023 actualmatch = string.match(pattern);
1024 expectedmatch = Array('ABC');
1025 addThis();
1026
1027 status = inSection(132);
1028 pattern = /^abc/i;
1029 string = 'ABCC';
1030 actualmatch = string.match(pattern);
1031 expectedmatch = Array('ABC');
1032 addThis();
1033
1034 status = inSection(133);
1035 pattern = /abc$/i;
1036 string = 'AABC';
1037 actualmatch = string.match(pattern);
1038 expectedmatch = Array('ABC');
1039 addThis();
1040
1041 status = inSection(134);
1042 pattern = /^/i;
1043 string = 'ABC';
1044 actualmatch = string.match(pattern);
1045 expectedmatch = Array('');
1046 addThis();
1047
1048 status = inSection(135);
1049 pattern = /$/i;
1050 string = 'ABC';
1051 actualmatch = string.match(pattern);
1052 expectedmatch = Array('');
1053 addThis();
1054
1055 status = inSection(136);
1056 pattern = /a.c/i;
1057 string = 'ABC';
1058 actualmatch = string.match(pattern);
1059 expectedmatch = Array('ABC');
1060 addThis();
1061
1062 status = inSection(137);
1063 pattern = /a.c/i;
1064 string = 'AXC';
1065 actualmatch = string.match(pattern);
1066 expectedmatch = Array('AXC');
1067 addThis();
1068
1069 status = inSection(138);
1070 pattern = /a.*?c/i;
1071 string = 'AXYZC';
1072 actualmatch = string.match(pattern);
1073 expectedmatch = Array('AXYZC');
1074 addThis();
1075
1076 status = inSection(139);
1077 pattern = /a[bc]d/i;
1078 string = 'ABD';
1079 actualmatch = string.match(pattern);
1080 expectedmatch = Array('ABD');
1081 addThis();
1082
1083 status = inSection(140);
1084 pattern = /a[b-d]e/i;
1085 string = 'ACE';
1086 actualmatch = string.match(pattern);
1087 expectedmatch = Array('ACE');
1088 addThis();
1089
1090 status = inSection(141);
1091 pattern = /a[b-d]/i;
1092 string = 'AAC';
1093 actualmatch = string.match(pattern);
1094 expectedmatch = Array('AC');
1095 addThis();
1096
1097 status = inSection(142);
1098 pattern = /a[-b]/i;
1099 string = 'A-';
1100 actualmatch = string.match(pattern);
1101 expectedmatch = Array('A-');
1102 addThis();
1103
1104 status = inSection(143);
1105 pattern = /a[b-]/i;
1106 string = 'A-';
1107 actualmatch = string.match(pattern);
1108 expectedmatch = Array('A-');
1109 addThis();
1110
1111 status = inSection(144);
1112 pattern = /a]/i;
1113 string = 'A]';
1114 actualmatch = string.match(pattern);
1115 expectedmatch = Array('A]');
1116 addThis();
1117
1118 /* Perl supports ] & ^] inside a [], ECMA does not
1119 status = inSection(145);
1120 pattern = /a[]]b/i;
1121 string = 'A]B';
1122 actualmatch = string.match(pattern);
1123 expectedmatch = Array('A]B');
1124 addThis();
1125 */
1126
1127 status = inSection(146);
1128 pattern = /a[^bc]d/i;
1129 string = 'AED';
1130 actualmatch = string.match(pattern);
1131 expectedmatch = Array('AED');
1132 addThis();
1133
1134 status = inSection(147);
1135 pattern = /a[^-b]c/i;
1136 string = 'ADC';
1137 actualmatch = string.match(pattern);
1138 expectedmatch = Array('ADC');
1139 addThis();
1140
1141 /* Perl supports ] & ^] inside a [], ECMA does not
1142 status = inSection(148);
1143 pattern = /a[^]b]c/i;
1144 string = 'ADC';
1145 actualmatch = string.match(pattern);
1146 expectedmatch = Array('ADC');
1147 addThis();
1148 */
1149
1150 status = inSection(149);
1151 pattern = /ab|cd/i;
1152 string = 'ABC';
1153 actualmatch = string.match(pattern);
1154 expectedmatch = Array('AB');
1155 addThis();
1156
1157 status = inSection(150);
1158 pattern = /ab|cd/i;
1159 string = 'ABCD';
1160 actualmatch = string.match(pattern);
1161 expectedmatch = Array('AB');
1162 addThis();
1163
1164 status = inSection(151);
1165 pattern = /()ef/i;
1166 string = 'DEF';
1167 actualmatch = string.match(pattern);
1168 expectedmatch = Array('EF', '');
1169 addThis();
1170
1171 status = inSection(152);
1172 pattern = /a\(b/i;
1173 string = 'A(B';
1174 actualmatch = string.match(pattern);
1175 expectedmatch = Array('A(B');
1176 addThis();
1177
1178 status = inSection(153);
1179 pattern = /a\(*b/i;
1180 string = 'AB';
1181 actualmatch = string.match(pattern);
1182 expectedmatch = Array('AB');
1183 addThis();
1184
1185 status = inSection(154);
1186 pattern = /a\(*b/i;
1187 string = 'A((B';
1188 actualmatch = string.match(pattern);
1189 expectedmatch = Array('A((B');
1190 addThis();
1191
1192 status = inSection(155);
1193 pattern = /a\\b/i;
1194 string = 'A\\B';
1195 actualmatch = string.match(pattern);
1196 expectedmatch = Array('A\\B');
1197 addThis();
1198
1199 status = inSection(156);
1200 pattern = /((a))/i;
1201 string = 'ABC';
1202 actualmatch = string.match(pattern);
1203 expectedmatch = Array('A', 'A', 'A');
1204 addThis();
1205
1206 status = inSection(157);
1207 pattern = /(a)b(c)/i;
1208 string = 'ABC';
1209 actualmatch = string.match(pattern);
1210 expectedmatch = Array('ABC', 'A', 'C');
1211 addThis();
1212
1213 status = inSection(158);
1214 pattern = /a+b+c/i;
1215 string = 'AABBABC';
1216 actualmatch = string.match(pattern);
1217 expectedmatch = Array('ABC');
1218 addThis();
1219
1220 status = inSection(159);
1221 pattern = /a{1,}b{1,}c/i;
1222 string = 'AABBABC';
1223 actualmatch = string.match(pattern);
1224 expectedmatch = Array('ABC');
1225 addThis();
1226
1227 status = inSection(160);
1228 pattern = /a.+?c/i;
1229 string = 'ABCABC';
1230 actualmatch = string.match(pattern);
1231 expectedmatch = Array('ABC');
1232 addThis();
1233
1234 status = inSection(161);
1235 pattern = /a.*?c/i;
1236 string = 'ABCABC';
1237 actualmatch = string.match(pattern);
1238 expectedmatch = Array('ABC');
1239 addThis();
1240
1241 status = inSection(162);
1242 pattern = /a.{0,5}?c/i;
1243 string = 'ABCABC';
1244 actualmatch = string.match(pattern);
1245 expectedmatch = Array('ABC');
1246 addThis();
1247
1248 status = inSection(163);
1249 pattern = /(a+|b)*/i;
1250 string = 'AB';
1251 actualmatch = string.match(pattern);
1252 expectedmatch = Array('AB', 'B');
1253 addThis();
1254
1255 status = inSection(164);
1256 pattern = /(a+|b){0,}/i;
1257 string = 'AB';
1258 actualmatch = string.match(pattern);
1259 expectedmatch = Array('AB', 'B');
1260 addThis();
1261
1262 status = inSection(165);
1263 pattern = /(a+|b)+/i;
1264 string = 'AB';
1265 actualmatch = string.match(pattern);
1266 expectedmatch = Array('AB', 'B');
1267 addThis();
1268
1269 status = inSection(166);
1270 pattern = /(a+|b){1,}/i;
1271 string = 'AB';
1272 actualmatch = string.match(pattern);
1273 expectedmatch = Array('AB', 'B');
1274 addThis();
1275
1276 status = inSection(167);
1277 pattern = /(a+|b)?/i;
1278 string = 'AB';
1279 actualmatch = string.match(pattern);
1280 expectedmatch = Array('A', 'A');
1281 addThis();
1282
1283 status = inSection(168);
1284 pattern = /(a+|b){0,1}/i;
1285 string = 'AB';
1286 actualmatch = string.match(pattern);
1287 expectedmatch = Array('A', 'A');
1288 addThis();
1289
1290 status = inSection(169);
1291 pattern = /(a+|b){0,1}?/i;
1292 string = 'AB';
1293 actualmatch = string.match(pattern);
1294 expectedmatch = Array('', undefined);
1295 addThis();
1296
1297 status = inSection(170);
1298 pattern = /[^ab]*/i;
1299 string = 'CDE';
1300 actualmatch = string.match(pattern);
1301 expectedmatch = Array('CDE');
1302 addThis();
1303
1304 status = inSection(171);
1305 pattern = /([abc])*d/i;
1306 string = 'ABBBCD';
1307 actualmatch = string.match(pattern);
1308 expectedmatch = Array('ABBBCD', 'C');
1309 addThis();
1310
1311 status = inSection(172);
1312 pattern = /([abc])*bcd/i;
1313 string = 'ABCD';
1314 actualmatch = string.match(pattern);
1315 expectedmatch = Array('ABCD', 'A');
1316 addThis();
1317
1318 status = inSection(173);
1319 pattern = /a|b|c|d|e/i;
1320 string = 'E';
1321 actualmatch = string.match(pattern);
1322 expectedmatch = Array('E');
1323 addThis();
1324
1325 status = inSection(174);
1326 pattern = /(a|b|c|d|e)f/i;
1327 string = 'EF';
1328 actualmatch = string.match(pattern);
1329 expectedmatch = Array('EF', 'E');
1330 addThis();
1331
1332 status = inSection(175);
1333 pattern = /abcd*efg/i;
1334 string = 'ABCDEFG';
1335 actualmatch = string.match(pattern);
1336 expectedmatch = Array('ABCDEFG');
1337 addThis();
1338
1339 status = inSection(176);
1340 pattern = /ab*/i;
1341 string = 'XABYABBBZ';
1342 actualmatch = string.match(pattern);
1343 expectedmatch = Array('AB');
1344 addThis();
1345
1346 status = inSection(177);
1347 pattern = /ab*/i;
1348 string = 'XAYABBBZ';
1349 actualmatch = string.match(pattern);
1350 expectedmatch = Array('A');
1351 addThis();
1352
1353 status = inSection(178);
1354 pattern = /(ab|cd)e/i;
1355 string = 'ABCDE';
1356 actualmatch = string.match(pattern);
1357 expectedmatch = Array('CDE', 'CD');
1358 addThis();
1359
1360 status = inSection(179);
1361 pattern = /[abhgefdc]ij/i;
1362 string = 'HIJ';
1363 actualmatch = string.match(pattern);
1364 expectedmatch = Array('HIJ');
1365 addThis();
1366
1367 status = inSection(180);
1368 pattern = /(abc|)ef/i;
1369 string = 'ABCDEF';
1370 actualmatch = string.match(pattern);
1371 expectedmatch = Array('EF', '');
1372 addThis();
1373
1374 status = inSection(181);
1375 pattern = /(a|b)c*d/i;
1376 string = 'ABCD';
1377 actualmatch = string.match(pattern);
1378 expectedmatch = Array('BCD', 'B');
1379 addThis();
1380
1381 status = inSection(182);
1382 pattern = /(ab|ab*)bc/i;
1383 string = 'ABC';
1384 actualmatch = string.match(pattern);
1385 expectedmatch = Array('ABC', 'A');
1386 addThis();
1387
1388 status = inSection(183);
1389 pattern = /a([bc]*)c*/i;
1390 string = 'ABC';
1391 actualmatch = string.match(pattern);
1392 expectedmatch = Array('ABC', 'BC');
1393 addThis();
1394
1395 status = inSection(184);
1396 pattern = /a([bc]*)(c*d)/i;
1397 string = 'ABCD';
1398 actualmatch = string.match(pattern);
1399 expectedmatch = Array('ABCD', 'BC', 'D');
1400 addThis();
1401
1402 status = inSection(185);
1403 pattern = /a([bc]+)(c*d)/i;
1404 string = 'ABCD';
1405 actualmatch = string.match(pattern);
1406 expectedmatch = Array('ABCD', 'BC', 'D');
1407 addThis();
1408
1409 status = inSection(186);
1410 pattern = /a([bc]*)(c+d)/i;
1411 string = 'ABCD';
1412 actualmatch = string.match(pattern);
1413 expectedmatch = Array('ABCD', 'B', 'CD');
1414 addThis();
1415
1416 status = inSection(187);
1417 pattern = /a[bcd]*dcdcde/i;
1418 string = 'ADCDCDE';
1419 actualmatch = string.match(pattern);
1420 expectedmatch = Array('ADCDCDE');
1421 addThis();
1422
1423 status = inSection(188);
1424 pattern = /(ab|a)b*c/i;
1425 string = 'ABC';
1426 actualmatch = string.match(pattern);
1427 expectedmatch = Array('ABC', 'AB');
1428 addThis();
1429
1430 status = inSection(189);
1431 pattern = /((a)(b)c)(d)/i;
1432 string = 'ABCD';
1433 actualmatch = string.match(pattern);
1434 expectedmatch = Array('ABCD', 'ABC', 'A', 'B', 'D');
1435 addThis();
1436
1437 status = inSection(190);
1438 pattern = /[a-zA-Z_][a-zA-Z0-9_]*/i;
1439 string = 'ALPHA';
1440 actualmatch = string.match(pattern);
1441 expectedmatch = Array('ALPHA');
1442 addThis();
1443
1444 status = inSection(191);
1445 pattern = /^a(bc+|b[eh])g|.h$/i;
1446 string = 'ABH';
1447 actualmatch = string.match(pattern);
1448 expectedmatch = Array('BH', undefined);
1449 addThis();
1450
1451 status = inSection(192);
1452 pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
1453 string = 'EFFGZ';
1454 actualmatch = string.match(pattern);
1455 expectedmatch = Array('EFFGZ', 'EFFGZ', undefined);
1456 addThis();
1457
1458 status = inSection(193);
1459 pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
1460 string = 'IJ';
1461 actualmatch = string.match(pattern);
1462 expectedmatch = Array('IJ', 'IJ', 'J');
1463 addThis();
1464
1465 status = inSection(194);
1466 pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
1467 string = 'REFFGZ';
1468 actualmatch = string.match(pattern);
1469 expectedmatch = Array('EFFGZ', 'EFFGZ', undefined);
1470 addThis();
1471
1472 status = inSection(195);
1473 pattern = /((((((((((a))))))))))/i;
1474 string = 'A';
1475 actualmatch = string.match(pattern);
1476 expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
1477 addThis();
1478
1479 status = inSection(196);
1480 pattern = /((((((((((a))))))))))\10/i;
1481 string = 'AA';
1482 actualmatch = string.match(pattern);
1483 expectedmatch = Array('AA', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
1484 addThis();
1485
1486 status = inSection(197);
1487 pattern = /((((((((((a))))))))))/i;
1488 string = 'A!';
1489 actualmatch = string.match(pattern);
1490 expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
1491 addThis();
1492
1493 status = inSection(198);
1494 pattern = /(((((((((a)))))))))/i;
1495 string = 'A';
1496 actualmatch = string.match(pattern);
1497 expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
1498 addThis();
1499
1500 status = inSection(199);
1501 pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i;
1502 string = 'A';
1503 actualmatch = string.match(pattern);
1504 expectedmatch = Array('A', 'A');
1505 addThis();
1506
1507 status = inSection(200);
1508 pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i;
1509 string = 'C';
1510 actualmatch = string.match(pattern);
1511 expectedmatch = Array('C', 'C');
1512 addThis();
1513
1514 status = inSection(201);
1515 pattern = /(.*)c(.*)/i;
1516 string = 'ABCDE';
1517 actualmatch = string.match(pattern);
1518 expectedmatch = Array('ABCDE', 'AB', 'DE');
1519 addThis();
1520
1521 status = inSection(202);
1522 pattern = /abcd/i;
1523 string = 'ABCD';
1524 actualmatch = string.match(pattern);
1525 expectedmatch = Array('ABCD');
1526 addThis();
1527
1528 status = inSection(203);
1529 pattern = /a(bc)d/i;
1530 string = 'ABCD';
1531 actualmatch = string.match(pattern);
1532 expectedmatch = Array('ABCD', 'BC');
1533 addThis();
1534
1535 status = inSection(204);
1536 pattern = /a[-]?c/i;
1537 string = 'AC';
1538 actualmatch = string.match(pattern);
1539 expectedmatch = Array('AC');
1540 addThis();
1541
1542 status = inSection(205);
1543 pattern = /(abc)\1/i;
1544 string = 'ABCABC';
1545 actualmatch = string.match(pattern);
1546 expectedmatch = Array('ABCABC', 'ABC');
1547 addThis();
1548
1549 status = inSection(206);
1550 pattern = /([a-c]*)\1/i;
1551 string = 'ABCABC';
1552 actualmatch = string.match(pattern);
1553 expectedmatch = Array('ABCABC', 'ABC');
1554 addThis();
1555
1556 status = inSection(207);
1557 pattern = /a(?!b)./;
1558 string = 'abad';
1559 actualmatch = string.match(pattern);
1560 expectedmatch = Array('ad');
1561 addThis();
1562
1563 status = inSection(208);
1564 pattern = /a(?=d)./;
1565 string = 'abad';
1566 actualmatch = string.match(pattern);
1567 expectedmatch = Array('ad');
1568 addThis();
1569
1570 status = inSection(209);
1571 pattern = /a(?=c|d)./;
1572 string = 'abad';
1573 actualmatch = string.match(pattern);
1574 expectedmatch = Array('ad');
1575 addThis();
1576
1577 status = inSection(210);
1578 pattern = /a(?:b|c|d)(.)/;
1579 string = 'ace';
1580 actualmatch = string.match(pattern);
1581 expectedmatch = Array('ace', 'e');
1582 addThis();
1583
1584 status = inSection(211);
1585 pattern = /a(?:b|c|d)*(.)/;
1586 string = 'ace';
1587 actualmatch = string.match(pattern);
1588 expectedmatch = Array('ace', 'e');
1589 addThis();
1590
1591 status = inSection(212);
1592 pattern = /a(?:b|c|d)+?(.)/;
1593 string = 'ace';
1594 actualmatch = string.match(pattern);
1595 expectedmatch = Array('ace', 'e');
1596 addThis();
1597
1598 status = inSection(213);
1599 pattern = /a(?:b|c|d)+?(.)/;
1600 string = 'acdbcdbe';
1601 actualmatch = string.match(pattern);
1602 expectedmatch = Array('acd', 'd');
1603 addThis();
1604
1605 status = inSection(214);
1606 pattern = /a(?:b|c|d)+(.)/;
1607 string = 'acdbcdbe';
1608 actualmatch = string.match(pattern);
1609 expectedmatch = Array('acdbcdbe', 'e');
1610 addThis();
1611
1612 status = inSection(215);
1613 pattern = /a(?:b|c|d){2}(.)/;
1614 string = 'acdbcdbe';
1615 actualmatch = string.match(pattern);
1616 expectedmatch = Array('acdb', 'b');
1617 addThis();
1618
1619 status = inSection(216);
1620 pattern = /a(?:b|c|d){4,5}(.)/;
1621 string = 'acdbcdbe';
1622 actualmatch = string.match(pattern);
1623 expectedmatch = Array('acdbcdb', 'b');
1624 addThis();
1625
1626 status = inSection(217);
1627 pattern = /a(?:b|c|d){4,5}?(.)/;
1628 string = 'acdbcdbe';
1629 actualmatch = string.match(pattern);
1630 expectedmatch = Array('acdbcd', 'd');
1631 addThis();
1632
1633 // MODIFIED - ECMA has different rules for paren contents
1634 status = inSection(218);
1635 pattern = /((foo)|(bar))*/;
1636 string = 'foobar';
1637 actualmatch = string.match(pattern);
1638 //expectedmatch = Array('foobar', 'bar', 'foo', 'bar');
1639 expectedmatch = Array('foobar', 'bar', undefined, 'bar');
1640 addThis();
1641
1642 status = inSection(219);
1643 pattern = /a(?:b|c|d){6,7}(.)/;
1644 string = 'acdbcdbe';
1645 actualmatch = string.match(pattern);
1646 expectedmatch = Array('acdbcdbe', 'e');
1647 addThis();
1648
1649 status = inSection(220);
1650 pattern = /a(?:b|c|d){6,7}?(.)/;
1651 string = 'acdbcdbe';
1652 actualmatch = string.match(pattern);
1653 expectedmatch = Array('acdbcdbe', 'e');
1654 addThis();
1655
1656 status = inSection(221);
1657 pattern = /a(?:b|c|d){5,6}(.)/;
1658 string = 'acdbcdbe';
1659 actualmatch = string.match(pattern);
1660 expectedmatch = Array('acdbcdbe', 'e');
1661 addThis();
1662
1663 status = inSection(222);
1664 pattern = /a(?:b|c|d){5,6}?(.)/;
1665 string = 'acdbcdbe';
1666 actualmatch = string.match(pattern);
1667 expectedmatch = Array('acdbcdb', 'b');
1668 addThis();
1669
1670 status = inSection(223);
1671 pattern = /a(?:b|c|d){5,7}(.)/;
1672 string = 'acdbcdbe';
1673 actualmatch = string.match(pattern);
1674 expectedmatch = Array('acdbcdbe', 'e');
1675 addThis();
1676
1677 status = inSection(224);
1678 pattern = /a(?:b|c|d){5,7}?(.)/;
1679 string = 'acdbcdbe';
1680 actualmatch = string.match(pattern);
1681 expectedmatch = Array('acdbcdb', 'b');
1682 addThis();
1683
1684 status = inSection(225);
1685 pattern = /a(?:b|(c|e){1,2}?|d)+?(.)/;
1686 string = 'ace';
1687 actualmatch = string.match(pattern);
1688 expectedmatch = Array('ace', 'c', 'e');
1689 addThis();
1690
1691 status = inSection(226);
1692 pattern = /^(.+)?B/;
1693 string = 'AB';
1694 actualmatch = string.match(pattern);
1695 expectedmatch = Array('AB', 'A');
1696 addThis();
1697
1698 /* MODIFIED - ECMA has different rules for paren contents */
1699 status = inSection(227);
1700 pattern = /^([^a-z])|(\^)$/;
1701 string = '.';
1702 actualmatch = string.match(pattern);
1703 //expectedmatch = Array('.', '.', '');
1704 expectedmatch = Array('.', '.', undefined);
1705 addThis();
1706
1707 status = inSection(228);
1708 pattern = /^[<>]&/;
1709 string = '<&OUT';
1710 actualmatch = string.match(pattern);
1711 expectedmatch = Array('<&');
1712 addThis();
1713
1714 /* Can't refer to a capture before it's encountered & completed
1715 status = inSection(229);
1716 pattern = /^(a\1?){4}$/;
1717 string = 'aaaaaaaaaa';
1718 actualmatch = string.match(pattern);
1719 expectedmatch = Array('aaaaaaaaaa', 'aaaa');
1720 addThis();
1721
1722 status = inSection(230);
1723 pattern = /^(a(?(1)\1)){4}$/;
1724 string = 'aaaaaaaaaa';
1725 actualmatch = string.match(pattern);
1726 expectedmatch = Array('aaaaaaaaaa', 'aaaa');
1727 addThis();
1728 */
1729
1730 status = inSection(231);
1731 pattern = /((a{4})+)/;
1732 string = 'aaaaaaaaa';
1733 actualmatch = string.match(pattern);
1734 expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa');
1735 addThis();
1736
1737 status = inSection(232);
1738 pattern = /(((aa){2})+)/;
1739 string = 'aaaaaaaaaa';
1740 actualmatch = string.match(pattern);
1741 expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa');
1742 addThis();
1743
1744 status = inSection(233);
1745 pattern = /(((a{2}){2})+)/;
1746 string = 'aaaaaaaaaa';
1747 actualmatch = string.match(pattern);
1748 expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa');
1749 addThis();
1750
1751 status = inSection(234);
1752 pattern = /(?:(f)(o)(o)|(b)(a)(r))*/;
1753 string = 'foobar';
1754 actualmatch = string.match(pattern);
1755 //expectedmatch = Array('foobar', 'f', 'o', 'o', 'b', 'a', 'r');
1756 expectedmatch = Array('foobar', undefined, undefined, undefined, 'b', 'a', 'r');
1757 addThis();
1758
1759 /* ECMA supports (?: (?= and (?! but doesn't support (?< etc.
1760 status = inSection(235);
1761 pattern = /(?<=a)b/;
1762 string = 'ab';
1763 actualmatch = string.match(pattern);
1764 expectedmatch = Array('b');
1765 addThis();
1766
1767 status = inSection(236);
1768 pattern = /(?<!c)b/;
1769 string = 'ab';
1770 actualmatch = string.match(pattern);
1771 expectedmatch = Array('b');
1772 addThis();
1773
1774 status = inSection(237);
1775 pattern = /(?<!c)b/;
1776 string = 'b';
1777 actualmatch = string.match(pattern);
1778 expectedmatch = Array('b');
1779 addThis();
1780
1781 status = inSection(238);
1782 pattern = /(?<!c)b/;
1783 string = 'b';
1784 actualmatch = string.match(pattern);
1785 expectedmatch = Array('b');
1786 addThis();
1787 */
1788
1789 status = inSection(239);
1790 pattern = /(?:..)*a/;
1791 string = 'aba';
1792 actualmatch = string.match(pattern);
1793 expectedmatch = Array('aba');
1794 addThis();
1795
1796 status = inSection(240);
1797 pattern = /(?:..)*?a/;
1798 string = 'aba';
1799 actualmatch = string.match(pattern);
1800 expectedmatch = Array('a');
1801 addThis();
1802
1803 /*
1804  * MODIFIED - ECMA has different rules for paren contents. Note
1805  * this regexp has two non-capturing parens, and one capturing
1806  *
1807  * The issue: shouldn't the match be ['ab', undefined]? Because the
1808  * '\1' matches the undefined value of the second iteration of the '*'
1809  * (in which the 'b' part of the '|' matches). But Perl wants ['ab','b'].
1810  *
1811  * Answer: waldemar@netscape.com:
1812  *
1813  * The correct answer is ['ab', undefined].  Perl doesn't match
1814  * ECMAScript here, and I'd say that Perl is wrong in this case.
1815  */
1816 status = inSection(241);
1817 pattern = /^(?:b|a(?=(.)))*\1/;
1818 string = 'abc';
1819 actualmatch = string.match(pattern);
1820 //expectedmatch = Array('ab', 'b');
1821 expectedmatch = Array('ab', undefined);
1822 addThis();
1823
1824 status = inSection(242);
1825 pattern = /^(){3,5}/;
1826 string = 'abc';
1827 actualmatch = string.match(pattern);
1828 expectedmatch = Array('', '');
1829 addThis();
1830
1831 status = inSection(243);
1832 pattern = /^(a+)*ax/;
1833 string = 'aax';
1834 actualmatch = string.match(pattern);
1835 expectedmatch = Array('aax', 'a');
1836 addThis();
1837
1838 status = inSection(244);
1839 pattern = /^((a|b)+)*ax/;
1840 string = 'aax';
1841 actualmatch = string.match(pattern);
1842 expectedmatch = Array('aax', 'a', 'a');
1843 addThis();
1844
1845 status = inSection(245);
1846 pattern = /^((a|bc)+)*ax/;
1847 string = 'aax';
1848 actualmatch = string.match(pattern);
1849 expectedmatch = Array('aax', 'a', 'a');
1850 addThis();
1851
1852 /* MODIFIED - ECMA has different rules for paren contents */
1853 status = inSection(246);
1854 pattern = /(a|x)*ab/;
1855 string = 'cab';
1856 actualmatch = string.match(pattern);
1857 //expectedmatch = Array('ab', '');
1858 expectedmatch = Array('ab', undefined);
1859 addThis();
1860
1861 status = inSection(247);
1862 pattern = /(a)*ab/;
1863 string = 'cab';
1864 actualmatch = string.match(pattern);
1865 expectedmatch = Array('ab', undefined);
1866 addThis();
1867
1868 /* ECMA doesn't support (?imsx or (?-imsx
1869 status = inSection(248);
1870 pattern = /(?:(?i)a)b/;
1871 string = 'ab';
1872 actualmatch = string.match(pattern);
1873 expectedmatch = Array('ab');
1874 addThis();
1875
1876 status = inSection(249);
1877 pattern = /((?i)a)b/;
1878 string = 'ab';
1879 actualmatch = string.match(pattern);
1880 expectedmatch = Array('ab', 'a');
1881 addThis();
1882
1883 status = inSection(250);
1884 pattern = /(?:(?i)a)b/;
1885 string = 'Ab';
1886 actualmatch = string.match(pattern);
1887 expectedmatch = Array('Ab');
1888 addThis();
1889
1890 status = inSection(251);
1891 pattern = /((?i)a)b/;
1892 string = 'Ab';
1893 actualmatch = string.match(pattern);
1894 expectedmatch = Array('Ab', 'A');
1895 addThis();
1896
1897 status = inSection(252);
1898 pattern = /(?i:a)b/;
1899 string = 'ab';
1900 actualmatch = string.match(pattern);
1901 expectedmatch = Array('ab');
1902 addThis();
1903
1904 status = inSection(253);
1905 pattern = /((?i:a))b/;
1906 string = 'ab';
1907 actualmatch = string.match(pattern);
1908 expectedmatch = Array('ab', 'a');
1909 addThis();
1910
1911 status = inSection(254);
1912 pattern = /(?i:a)b/;
1913 string = 'Ab';
1914 actualmatch = string.match(pattern);
1915 expectedmatch = Array('Ab');
1916 addThis();
1917
1918 status = inSection(255);
1919 pattern = /((?i:a))b/;
1920 string = 'Ab';
1921 actualmatch = string.match(pattern);
1922 expectedmatch = Array('Ab', 'A');
1923 addThis();
1924
1925 status = inSection(256);
1926 pattern = /(?:(?-i)a)b/i;
1927 string = 'ab';
1928 actualmatch = string.match(pattern);
1929 expectedmatch = Array('ab');
1930 addThis();
1931
1932 status = inSection(257);
1933 pattern = /((?-i)a)b/i;
1934 string = 'ab';
1935 actualmatch = string.match(pattern);
1936 expectedmatch = Array('ab', 'a');
1937 addThis();
1938
1939 status = inSection(258);
1940 pattern = /(?:(?-i)a)b/i;
1941 string = 'aB';
1942 actualmatch = string.match(pattern);
1943 expectedmatch = Array('aB');
1944 addThis();
1945
1946 status = inSection(259);
1947 pattern = /((?-i)a)b/i;
1948 string = 'aB';
1949 actualmatch = string.match(pattern);
1950 expectedmatch = Array('aB', 'a');
1951 addThis();
1952
1953 status = inSection(260);
1954 pattern = /(?:(?-i)a)b/i;
1955 string = 'aB';
1956 actualmatch = string.match(pattern);
1957 expectedmatch = Array('aB');
1958 addThis();
1959
1960 status = inSection(261);
1961 pattern = /((?-i)a)b/i;
1962 string = 'aB';
1963 actualmatch = string.match(pattern);
1964 expectedmatch = Array('aB', 'a');
1965 addThis();
1966
1967 status = inSection(262);
1968 pattern = /(?-i:a)b/i;
1969 string = 'ab';
1970 actualmatch = string.match(pattern);
1971 expectedmatch = Array('ab');
1972 addThis();
1973
1974 status = inSection(263);
1975 pattern = /((?-i:a))b/i;
1976 string = 'ab';
1977 actualmatch = string.match(pattern);
1978 expectedmatch = Array('ab', 'a');
1979 addThis();
1980
1981 status = inSection(264);
1982 pattern = /(?-i:a)b/i;
1983 string = 'aB';
1984 actualmatch = string.match(pattern);
1985 expectedmatch = Array('aB');
1986 addThis();
1987
1988 status = inSection(265);
1989 pattern = /((?-i:a))b/i;
1990 string = 'aB';
1991 actualmatch = string.match(pattern);
1992 expectedmatch = Array('aB', 'a');
1993 addThis();
1994
1995 status = inSection(266);
1996 pattern = /(?-i:a)b/i;
1997 string = 'aB';
1998 actualmatch = string.match(pattern);
1999 expectedmatch = Array('aB');
2000 addThis();
2001
2002 status = inSection(267);
2003 pattern = /((?-i:a))b/i;
2004 string = 'aB';
2005 actualmatch = string.match(pattern);
2006 expectedmatch = Array('aB', 'a');
2007 addThis();
2008
2009 status = inSection(268);
2010 pattern = /((?s-i:a.))b/i;
2011 string = 'a\nB';
2012 actualmatch = string.match(pattern);
2013 expectedmatch = Array('a\nB', 'a\n');
2014 addThis();
2015 */
2016
2017 status = inSection(269);
2018 pattern = /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/;
2019 string = 'cabbbb';
2020 actualmatch = string.match(pattern);
2021 expectedmatch = Array('cabbbb');
2022 addThis();
2023
2024 status = inSection(270);
2025 pattern = /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/;
2026 string = 'caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
2027 actualmatch = string.match(pattern);
2028 expectedmatch = Array('caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
2029 addThis();
2030
2031 status = inSection(271);
2032 pattern = /(ab)\d\1/i;
2033 string = 'Ab4ab';
2034 actualmatch = string.match(pattern);
2035 expectedmatch = Array('Ab4ab', 'Ab');
2036 addThis();
2037
2038 status = inSection(272);
2039 pattern = /(ab)\d\1/i;
2040 string = 'ab4Ab';
2041 actualmatch = string.match(pattern);
2042 expectedmatch = Array('ab4Ab', 'ab');
2043 addThis();
2044
2045 status = inSection(273);
2046 pattern = /foo\w*\d{4}baz/;
2047 string = 'foobar1234baz';
2048 actualmatch = string.match(pattern);
2049 expectedmatch = Array('foobar1234baz');
2050 addThis();
2051
2052 status = inSection(274);
2053 pattern = /x(~~)*(?:(?:F)?)?/;
2054 string = 'x~~';
2055 actualmatch = string.match(pattern);
2056 expectedmatch = Array('x~~', '~~');
2057 addThis();
2058
2059 /* Perl supports (?# but JS doesn't
2060 status = inSection(275);
2061 pattern = /^a(?#xxx){3}c/;
2062 string = 'aaac';
2063 actualmatch = string.match(pattern);
2064 expectedmatch = Array('aaac');
2065 addThis();
2066 */
2067
2068 /* ECMA doesn't support (?< etc
2069 status = inSection(276);
2070 pattern = /(?<![cd])[ab]/;
2071 string = 'dbaacb';
2072 actualmatch = string.match(pattern);
2073 expectedmatch = Array('a');
2074 addThis();
2075
2076 status = inSection(277);
2077 pattern = /(?<!(c|d))[ab]/;
2078 string = 'dbaacb';
2079 actualmatch = string.match(pattern);
2080 expectedmatch = Array('a');
2081 addThis();
2082
2083 status = inSection(278);
2084 pattern = /(?<!cd)[ab]/;
2085 string = 'cdaccb';
2086 actualmatch = string.match(pattern);
2087 expectedmatch = Array('b');
2088 addThis();
2089
2090 status = inSection(279);
2091 pattern = /((?s)^a(.))((?m)^b$)/;
2092 string = 'a\nb\nc\n';
2093 actualmatch = string.match(pattern);
2094 expectedmatch = Array('a\nb', 'a\n', '\n', 'b');
2095 addThis();
2096
2097 status = inSection(280);
2098 pattern = /((?m)^b$)/;
2099 string = 'a\nb\nc\n';
2100 actualmatch = string.match(pattern);
2101 expectedmatch = Array('b', 'b');
2102 addThis();
2103
2104 status = inSection(281);
2105 pattern = /(?m)^b/;
2106 string = 'a\nb\n';
2107 actualmatch = string.match(pattern);
2108 expectedmatch = Array('b');
2109 addThis();
2110
2111 status = inSection(282);
2112 pattern = /(?m)^(b)/;
2113 string = 'a\nb\n';
2114 actualmatch = string.match(pattern);
2115 expectedmatch = Array('b', 'b');
2116 addThis();
2117
2118 status = inSection(283);
2119 pattern = /((?m)^b)/;
2120 string = 'a\nb\n';
2121 actualmatch = string.match(pattern);
2122 expectedmatch = Array('b', 'b');
2123 addThis();
2124
2125 status = inSection(284);
2126 pattern = /\n((?m)^b)/;
2127 string = 'a\nb\n';
2128 actualmatch = string.match(pattern);
2129 expectedmatch = Array('\nb', 'b');
2130 addThis();
2131
2132 status = inSection(285);
2133 pattern = /((?s).)c(?!.)/;
2134 string = 'a\nb\nc\n';
2135 actualmatch = string.match(pattern);
2136 expectedmatch = Array('\nc', '\n');
2137 addThis();
2138
2139 status = inSection(286);
2140 pattern = /((?s).)c(?!.)/;
2141 string = 'a\nb\nc\n';
2142 actualmatch = string.match(pattern);
2143 expectedmatch = Array('\nc', '\n');
2144 addThis();
2145
2146 status = inSection(287);
2147 pattern = /((?s)b.)c(?!.)/;
2148 string = 'a\nb\nc\n';
2149 actualmatch = string.match(pattern);
2150 expectedmatch = Array('b\nc', 'b\n');
2151 addThis();
2152
2153 status = inSection(288);
2154 pattern = /((?s)b.)c(?!.)/;
2155 string = 'a\nb\nc\n';
2156 actualmatch = string.match(pattern);
2157 expectedmatch = Array('b\nc', 'b\n');
2158 addThis();
2159
2160 status = inSection(289);
2161 pattern = /((?m)^b)/;
2162 string = 'a\nb\nc\n';
2163 actualmatch = string.match(pattern);
2164 expectedmatch = Array('b', 'b');
2165 addThis();
2166 */
2167
2168 /* ECMA doesn't support (?(condition)
2169 status = inSection(290);
2170 pattern = /(?(1)b|a)/;
2171 string = 'a';
2172 actualmatch = string.match(pattern);
2173 expectedmatch = Array('a');
2174 addThis();
2175
2176 status = inSection(291);
2177 pattern = /(x)?(?(1)b|a)/;
2178 string = 'a';
2179 actualmatch = string.match(pattern);
2180 expectedmatch = Array('a');
2181 addThis();
2182
2183 status = inSection(292);
2184 pattern = /()?(?(1)b|a)/;
2185 string = 'a';
2186 actualmatch = string.match(pattern);
2187 expectedmatch = Array('a');
2188 addThis();
2189
2190 status = inSection(293);
2191 pattern = /()?(?(1)a|b)/;
2192 string = 'a';
2193 actualmatch = string.match(pattern);
2194 expectedmatch = Array('a');
2195 addThis();
2196
2197 status = inSection(294);
2198 pattern = /^(\()?blah(?(1)(\)))$/;
2199 string = '(blah)';
2200 actualmatch = string.match(pattern);
2201 expectedmatch = Array('(blah)', '(', ')');
2202 addThis();
2203
2204 status = inSection(295);
2205 pattern = /^(\()?blah(?(1)(\)))$/;
2206 string = 'blah';
2207 actualmatch = string.match(pattern);
2208 expectedmatch = Array('blah');
2209 addThis();
2210
2211 status = inSection(296);
2212 pattern = /^(\(+)?blah(?(1)(\)))$/;
2213 string = '(blah)';
2214 actualmatch = string.match(pattern);
2215 expectedmatch = Array('(blah)', '(', ')');
2216 addThis();
2217
2218 status = inSection(297);
2219 pattern = /^(\(+)?blah(?(1)(\)))$/;
2220 string = 'blah';
2221 actualmatch = string.match(pattern);
2222 expectedmatch = Array('blah');
2223 addThis();
2224
2225 status = inSection(298);
2226 pattern = /(?(?!a)b|a)/;
2227 string = 'a';
2228 actualmatch = string.match(pattern);
2229 expectedmatch = Array('a');
2230 addThis();
2231
2232 status = inSection(299);
2233 pattern = /(?(?=a)a|b)/;
2234 string = 'a';
2235 actualmatch = string.match(pattern);
2236 expectedmatch = Array('a');
2237 addThis();
2238 */
2239
2240 status = inSection(300);
2241 pattern = /(?=(a+?))(\1ab)/;
2242 string = 'aaab';
2243 actualmatch = string.match(pattern);
2244 expectedmatch = Array('aab', 'a', 'aab');
2245 addThis();
2246
2247 status = inSection(301);
2248 pattern = /(\w+:)+/;
2249 string = 'one:';
2250 actualmatch = string.match(pattern);
2251 expectedmatch = Array('one:', 'one:');
2252 addThis();
2253
2254 /* ECMA doesn't support (?< etc
2255 status = inSection(302);
2256 pattern = /$(?<=^(a))/;
2257 string = 'a';
2258 actualmatch = string.match(pattern);
2259 expectedmatch = Array('', 'a');
2260 addThis();
2261 */
2262
2263 status = inSection(303);
2264 pattern = /(?=(a+?))(\1ab)/;
2265 string = 'aaab';
2266 actualmatch = string.match(pattern);
2267 expectedmatch = Array('aab', 'a', 'aab');
2268 addThis();
2269
2270 /* MODIFIED - ECMA has different rules for paren contents */
2271 status = inSection(304);
2272 pattern = /([\w:]+::)?(\w+)$/;
2273 string = 'abcd';
2274 actualmatch = string.match(pattern);
2275 //expectedmatch = Array('abcd', '', 'abcd');
2276 expectedmatch = Array('abcd', undefined, 'abcd');
2277 addThis();
2278
2279 status = inSection(305);
2280 pattern = /([\w:]+::)?(\w+)$/;
2281 string = 'xy:z:::abcd';
2282 actualmatch = string.match(pattern);
2283 expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd');
2284 addThis();
2285
2286 status = inSection(306);
2287 pattern = /^[^bcd]*(c+)/;
2288 string = 'aexycd';
2289 actualmatch = string.match(pattern);
2290 expectedmatch = Array('aexyc', 'c');
2291 addThis();
2292
2293 status = inSection(307);
2294 pattern = /(a*)b+/;
2295 string = 'caab';
2296 actualmatch = string.match(pattern);
2297 expectedmatch = Array('aab', 'aa');
2298 addThis();
2299
2300 /* MODIFIED - ECMA has different rules for paren contents */
2301 status = inSection(308);
2302 pattern = /([\w:]+::)?(\w+)$/;
2303 string = 'abcd';
2304 actualmatch = string.match(pattern);
2305 //expectedmatch = Array('abcd', '', 'abcd');
2306 expectedmatch = Array('abcd', undefined, 'abcd');
2307 addThis();
2308
2309 status = inSection(309);
2310 pattern = /([\w:]+::)?(\w+)$/;
2311 string = 'xy:z:::abcd';
2312 actualmatch = string.match(pattern);
2313 expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd');
2314 addThis();
2315
2316 status = inSection(310);
2317 pattern = /^[^bcd]*(c+)/;
2318 string = 'aexycd';
2319 actualmatch = string.match(pattern);
2320 expectedmatch = Array('aexyc', 'c');
2321 addThis();
2322
2323 /* ECMA doesn't support (?>
2324 status = inSection(311);
2325 pattern = /(?>a+)b/;
2326 string = 'aaab';
2327 actualmatch = string.match(pattern);
2328 expectedmatch = Array('aaab');
2329 addThis();
2330 */
2331
2332 status = inSection(312);
2333 pattern = /([[:]+)/;
2334 string = 'a:[b]:';
2335 actualmatch = string.match(pattern);
2336 expectedmatch = Array(':[', ':[');
2337 addThis();
2338
2339 status = inSection(313);
2340 pattern = /([[=]+)/;
2341 string = 'a=[b]=';
2342 actualmatch = string.match(pattern);
2343 expectedmatch = Array('=[', '=[');
2344 addThis();
2345
2346 status = inSection(314);
2347 pattern = /([[.]+)/;
2348 string = 'a.[b].';
2349 actualmatch = string.match(pattern);
2350 expectedmatch = Array('.[', '.[');
2351 addThis();
2352
2353 /* ECMA doesn't have rules for [:
2354 status = inSection(315);
2355 pattern = /[a[:]b[:c]/;
2356 string = 'abc';
2357 actualmatch = string.match(pattern);
2358 expectedmatch = Array('abc');
2359 addThis();
2360 */
2361
2362 /* ECMA doesn't support (?>
2363 status = inSection(316);
2364 pattern = /((?>a+)b)/;
2365 string = 'aaab';
2366 actualmatch = string.match(pattern);
2367 expectedmatch = Array('aaab', 'aaab');
2368 addThis();
2369
2370 status = inSection(317);
2371 pattern = /(?>(a+))b/;
2372 string = 'aaab';
2373 actualmatch = string.match(pattern);
2374 expectedmatch = Array('aaab', 'aaa');
2375 addThis();
2376
2377 status = inSection(318);
2378 pattern = /((?>[^()]+)|\([^()]*\))+/;
2379 string = '((abc(ade)ufh()()x';
2380 actualmatch = string.match(pattern);
2381 expectedmatch = Array('abc(ade)ufh()()x', 'x');
2382 addThis();
2383 */
2384
2385 /* Perl has \Z has end-of-line, ECMA doesn't
2386 status = inSection(319);
2387 pattern = /\Z/;
2388 string = 'a\nb\n';
2389 actualmatch = string.match(pattern);
2390 expectedmatch = Array('');
2391 addThis();
2392
2393 status = inSection(320);
2394 pattern = /\z/;
2395 string = 'a\nb\n';
2396 actualmatch = string.match(pattern);
2397 expectedmatch = Array('');
2398 addThis();
2399 */
2400
2401 status = inSection(321);
2402 pattern = /$/;
2403 string = 'a\nb\n';
2404 actualmatch = string.match(pattern);
2405 expectedmatch = Array('');
2406 addThis();
2407
2408 /* Perl has \Z has end-of-line, ECMA doesn't
2409 status = inSection(322);
2410 pattern = /\Z/;
2411 string = 'b\na\n';
2412 actualmatch = string.match(pattern);
2413 expectedmatch = Array('');
2414 addThis();
2415
2416 status = inSection(323);
2417 pattern = /\z/;
2418 string = 'b\na\n';
2419 actualmatch = string.match(pattern);
2420 expectedmatch = Array('');
2421 addThis();
2422 */
2423
2424 status = inSection(324);
2425 pattern = /$/;
2426 string = 'b\na\n';
2427 actualmatch = string.match(pattern);
2428 expectedmatch = Array('');
2429 addThis();
2430
2431 /* Perl has \Z has end-of-line, ECMA doesn't
2432 status = inSection(325);
2433 pattern = /\Z/;
2434 string = 'b\na';
2435 actualmatch = string.match(pattern);
2436 expectedmatch = Array('');
2437 addThis();
2438
2439 status = inSection(326);
2440 pattern = /\z/;
2441 string = 'b\na';
2442 actualmatch = string.match(pattern);
2443 expectedmatch = Array('');
2444 addThis();
2445 */
2446
2447 status = inSection(327);
2448 pattern = /$/;
2449 string = 'b\na';
2450 actualmatch = string.match(pattern);
2451 expectedmatch = Array('');
2452 addThis();
2453
2454 /* Perl has \Z has end-of-line, ECMA doesn't
2455 status = inSection(328);
2456 pattern = /\Z/m;
2457 string = 'a\nb\n';
2458 actualmatch = string.match(pattern);
2459 expectedmatch = Array('');
2460 addThis();
2461
2462 status = inSection(329);
2463 pattern = /\z/m;
2464 string = 'a\nb\n';
2465 actualmatch = string.match(pattern);
2466 expectedmatch = Array('');
2467 addThis();
2468 */
2469
2470 status = inSection(330);
2471 pattern = /$/m;
2472 string = 'a\nb\n';
2473 actualmatch = string.match(pattern);
2474 expectedmatch = Array('');
2475 addThis();
2476
2477 /* Perl has \Z has end-of-line, ECMA doesn't
2478 status = inSection(331);
2479 pattern = /\Z/m;
2480 string = 'b\na\n';
2481 actualmatch = string.match(pattern);
2482 expectedmatch = Array('');
2483 addThis();
2484
2485 status = inSection(332);
2486 pattern = /\z/m;
2487 string = 'b\na\n';
2488 actualmatch = string.match(pattern);
2489 expectedmatch = Array('');
2490 addThis();
2491 */
2492
2493 status = inSection(333);
2494 pattern = /$/m;
2495 string = 'b\na\n';
2496 actualmatch = string.match(pattern);
2497 expectedmatch = Array('');
2498 addThis();
2499
2500 /* Perl has \Z has end-of-line, ECMA doesn't
2501 status = inSection(334);
2502 pattern = /\Z/m;
2503 string = 'b\na';
2504 actualmatch = string.match(pattern);
2505 expectedmatch = Array('');
2506 addThis();
2507
2508 status = inSection(335);
2509 pattern = /\z/m;
2510 string = 'b\na';
2511 actualmatch = string.match(pattern);
2512 expectedmatch = Array('');
2513 addThis();
2514 */
2515
2516 status = inSection(336);
2517 pattern = /$/m;
2518 string = 'b\na';
2519 actualmatch = string.match(pattern);
2520 expectedmatch = Array('');
2521 addThis();
2522
2523 /* Perl has \Z has end-of-line, ECMA doesn't
2524 status = inSection(337);
2525 pattern = /a\Z/;
2526 string = 'b\na\n';
2527 actualmatch = string.match(pattern);
2528 expectedmatch = Array('a');
2529 addThis();
2530 */
2531
2532 /* $ only matches end of input unless multiline
2533 status = inSection(338);
2534 pattern = /a$/;
2535 string = 'b\na\n';
2536 actualmatch = string.match(pattern);
2537 expectedmatch = Array('a');
2538 addThis();
2539 */
2540
2541 /* Perl has \Z has end-of-line, ECMA doesn't
2542 status = inSection(339);
2543 pattern = /a\Z/;
2544 string = 'b\na';
2545 actualmatch = string.match(pattern);
2546 expectedmatch = Array('a');
2547 addThis();
2548
2549 status = inSection(340);
2550 pattern = /a\z/;
2551 string = 'b\na';
2552 actualmatch = string.match(pattern);
2553 expectedmatch = Array('a');
2554 addThis();
2555 */
2556
2557 status = inSection(341);
2558 pattern = /a$/;
2559 string = 'b\na';
2560 actualmatch = string.match(pattern);
2561 expectedmatch = Array('a');
2562 addThis();
2563
2564 status = inSection(342);
2565 pattern = /a$/m;
2566 string = 'a\nb\n';
2567 actualmatch = string.match(pattern);
2568 expectedmatch = Array('a');
2569 addThis();
2570
2571 /* Perl has \Z has end-of-line, ECMA doesn't
2572 status = inSection(343);
2573 pattern = /a\Z/m;
2574 string = 'b\na\n';
2575 actualmatch = string.match(pattern);
2576 expectedmatch = Array('a');
2577 addThis();
2578 */
2579
2580 status = inSection(344);
2581 pattern = /a$/m;
2582 string = 'b\na\n';
2583 actualmatch = string.match(pattern);
2584 expectedmatch = Array('a');
2585 addThis();
2586
2587 /* Perl has \Z has end-of-line, ECMA doesn't
2588 status = inSection(345);
2589 pattern = /a\Z/m;
2590 string = 'b\na';
2591 actualmatch = string.match(pattern);
2592 expectedmatch = Array('a');
2593 addThis();
2594
2595 status = inSection(346);
2596 pattern = /a\z/m;
2597 string = 'b\na';
2598 actualmatch = string.match(pattern);
2599 expectedmatch = Array('a');
2600 addThis();
2601 */
2602
2603 status = inSection(347);
2604 pattern = /a$/m;
2605 string = 'b\na';
2606 actualmatch = string.match(pattern);
2607 expectedmatch = Array('a');
2608 addThis();
2609
2610 /* Perl has \Z has end-of-line, ECMA doesn't
2611 status = inSection(348);
2612 pattern = /aa\Z/;
2613 string = 'b\naa\n';
2614 actualmatch = string.match(pattern);
2615 expectedmatch = Array('aa');
2616 addThis();
2617 */
2618
2619 /* $ only matches end of input unless multiline
2620 status = inSection(349);
2621 pattern = /aa$/;
2622 string = 'b\naa\n';
2623 actualmatch = string.match(pattern);
2624 expectedmatch = Array('aa');
2625 addThis();
2626 */
2627
2628 /* Perl has \Z has end-of-line, ECMA doesn't
2629 status = inSection(350);
2630 pattern = /aa\Z/;
2631 string = 'b\naa';
2632 actualmatch = string.match(pattern);
2633 expectedmatch = Array('aa');
2634 addThis();
2635
2636 status = inSection(351);
2637 pattern = /aa\z/;
2638 string = 'b\naa';
2639 actualmatch = string.match(pattern);
2640 expectedmatch = Array('aa');
2641 addThis();
2642 */
2643
2644 status = inSection(352);
2645 pattern = /aa$/;
2646 string = 'b\naa';
2647 actualmatch = string.match(pattern);
2648 expectedmatch = Array('aa');
2649 addThis();
2650
2651 status = inSection(353);
2652 pattern = /aa$/m;
2653 string = 'aa\nb\n';
2654 actualmatch = string.match(pattern);
2655 expectedmatch = Array('aa');
2656 addThis();
2657
2658 /* Perl has \Z has end-of-line, ECMA doesn't
2659 status = inSection(354);
2660 pattern = /aa\Z/m;
2661 string = 'b\naa\n';
2662 actualmatch = string.match(pattern);
2663 expectedmatch = Array('aa');
2664 addThis();
2665 */
2666
2667 status = inSection(355);
2668 pattern = /aa$/m;
2669 string = 'b\naa\n';
2670 actualmatch = string.match(pattern);
2671 expectedmatch = Array('aa');
2672 addThis();
2673
2674 /* Perl has \Z has end-of-line, ECMA doesn't
2675 status = inSection(356);
2676 pattern = /aa\Z/m;
2677 string = 'b\naa';
2678 actualmatch = string.match(pattern);
2679 expectedmatch = Array('aa');
2680 addThis();
2681
2682 status = inSection(357);
2683 pattern = /aa\z/m;
2684 string = 'b\naa';
2685 actualmatch = string.match(pattern);
2686 expectedmatch = Array('aa');
2687 addThis();
2688 */
2689
2690 status = inSection(358);
2691 pattern = /aa$/m;
2692 string = 'b\naa';
2693 actualmatch = string.match(pattern);
2694 expectedmatch = Array('aa');
2695 addThis();
2696
2697 /* Perl has \Z has end-of-line, ECMA doesn't
2698 status = inSection(359);
2699 pattern = /ab\Z/;
2700 string = 'b\nab\n';
2701 actualmatch = string.match(pattern);
2702 expectedmatch = Array('ab');
2703 addThis();
2704 */
2705
2706 /* $ only matches end of input unless multiline
2707 status = inSection(360);
2708 pattern = /ab$/;
2709 string = 'b\nab\n';
2710 actualmatch = string.match(pattern);
2711 expectedmatch = Array('ab');
2712 addThis();
2713 */
2714
2715 /* Perl has \Z has end-of-line, ECMA doesn't
2716 status = inSection(361);
2717 pattern = /ab\Z/;
2718 string = 'b\nab';
2719 actualmatch = string.match(pattern);
2720 expectedmatch = Array('ab');
2721 addThis();
2722
2723 status = inSection(362);
2724 pattern = /ab\z/;
2725 string = 'b\nab';
2726 actualmatch = string.match(pattern);
2727 expectedmatch = Array('ab');
2728 addThis();
2729 */
2730
2731 status = inSection(363);
2732 pattern = /ab$/;
2733 string = 'b\nab';
2734 actualmatch = string.match(pattern);
2735 expectedmatch = Array('ab');
2736 addThis();
2737
2738 status = inSection(364);
2739 pattern = /ab$/m;
2740 string = 'ab\nb\n';
2741 actualmatch = string.match(pattern);
2742 expectedmatch = Array('ab');
2743 addThis();
2744
2745 /* Perl has \Z has end-of-line, ECMA doesn't
2746 status = inSection(365);
2747 pattern = /ab\Z/m;
2748 string = 'b\nab\n';
2749 actualmatch = string.match(pattern);
2750 expectedmatch = Array('ab');
2751 addThis();
2752 */
2753
2754 status = inSection(366);
2755 pattern = /ab$/m;
2756 string = 'b\nab\n';
2757 actualmatch = string.match(pattern);
2758 expectedmatch = Array('ab');
2759 addThis();
2760
2761 /* Perl has \Z has end-of-line, ECMA doesn't
2762 status = inSection(367);
2763 pattern = /ab\Z/m;
2764 string = 'b\nab';
2765 actualmatch = string.match(pattern);
2766 expectedmatch = Array('ab');
2767 addThis();
2768
2769 status = inSection(368);
2770 pattern = /ab\z/m;
2771 string = 'b\nab';
2772 actualmatch = string.match(pattern);
2773 expectedmatch = Array('ab');
2774 addThis();
2775 */
2776
2777 status = inSection(369);
2778 pattern = /ab$/m;
2779 string = 'b\nab';
2780 actualmatch = string.match(pattern);
2781 expectedmatch = Array('ab');
2782 addThis();
2783
2784 /* Perl has \Z has end-of-line, ECMA doesn't
2785 status = inSection(370);
2786 pattern = /abb\Z/;
2787 string = 'b\nabb\n';
2788 actualmatch = string.match(pattern);
2789 expectedmatch = Array('abb');
2790 addThis();
2791 */
2792
2793 /* $ only matches end of input unless multiline
2794 status = inSection(371);
2795 pattern = /abb$/;
2796 string = 'b\nabb\n';
2797 actualmatch = string.match(pattern);
2798 expectedmatch = Array('abb');
2799 addThis();
2800 */
2801
2802 /* Perl has \Z has end-of-line, ECMA doesn't
2803 status = inSection(372);
2804 pattern = /abb\Z/;
2805 string = 'b\nabb';
2806 actualmatch = string.match(pattern);
2807 expectedmatch = Array('abb');
2808 addThis();
2809
2810 status = inSection(373);
2811 pattern = /abb\z/;
2812 string = 'b\nabb';
2813 actualmatch = string.match(pattern);
2814 expectedmatch = Array('abb');
2815 addThis();
2816 */
2817
2818 status = inSection(374);
2819 pattern = /abb$/;
2820 string = 'b\nabb';
2821 actualmatch = string.match(pattern);
2822 expectedmatch = Array('abb');
2823 addThis();
2824
2825 status = inSection(375);
2826 pattern = /abb$/m;
2827 string = 'abb\nb\n';
2828 actualmatch = string.match(pattern);
2829 expectedmatch = Array('abb');
2830 addThis();
2831
2832 /* Perl has \Z has end-of-line, ECMA doesn't
2833 status = inSection(376);
2834 pattern = /abb\Z/m;
2835 string = 'b\nabb\n';
2836 actualmatch = string.match(pattern);
2837 expectedmatch = Array('abb');
2838 addThis();
2839 */
2840
2841 status = inSection(377);
2842 pattern = /abb$/m;
2843 string = 'b\nabb\n';
2844 actualmatch = string.match(pattern);
2845 expectedmatch = Array('abb');
2846 addThis();
2847
2848 /* Perl has \Z has end-of-line, ECMA doesn't
2849 status = inSection(378);
2850 pattern = /abb\Z/m;
2851 string = 'b\nabb';
2852 actualmatch = string.match(pattern);
2853 expectedmatch = Array('abb');
2854 addThis();
2855
2856 status = inSection(379);
2857 pattern = /abb\z/m;
2858 string = 'b\nabb';
2859 actualmatch = string.match(pattern);
2860 expectedmatch = Array('abb');
2861 addThis();
2862 */
2863
2864 status = inSection(380);
2865 pattern = /abb$/m;
2866 string = 'b\nabb';
2867 actualmatch = string.match(pattern);
2868 expectedmatch = Array('abb');
2869 addThis();
2870
2871 status = inSection(381);
2872 pattern = /(^|x)(c)/;
2873 string = 'ca';
2874 actualmatch = string.match(pattern);
2875 expectedmatch = Array('c', '', 'c');
2876 addThis();
2877
2878 status = inSection(382);
2879 pattern = /foo.bart/;
2880 string = 'foo.bart';
2881 actualmatch = string.match(pattern);
2882 expectedmatch = Array('foo.bart');
2883 addThis();
2884
2885 status = inSection(383);
2886 pattern = /^d[x][x][x]/m;
2887 string = 'abcd\ndxxx';
2888 actualmatch = string.match(pattern);
2889 expectedmatch = Array('dxxx');
2890 addThis();
2891
2892 status = inSection(384);
2893 pattern = /tt+$/;
2894 string = 'xxxtt';
2895 actualmatch = string.match(pattern);
2896 expectedmatch = Array('tt');
2897 addThis();
2898
2899 /* ECMA spec says that each atom in a range must be a single character
2900 status = inSection(385);
2901 pattern = /([a-\d]+)/;
2902 string = 'za-9z';
2903 actualmatch = string.match(pattern);
2904 expectedmatch = Array('9', '9');
2905 addThis();
2906
2907 status = inSection(386);
2908 pattern = /([\d-z]+)/;
2909 string = 'a0-za';
2910 actualmatch = string.match(pattern);
2911 expectedmatch = Array('0-z', '0-z');
2912 addThis();
2913 */
2914
2915 /* ECMA doesn't support [:
2916 status = inSection(387);
2917 pattern = /([a-[:digit:]]+)/;
2918 string = 'za-9z';
2919 actualmatch = string.match(pattern);
2920 expectedmatch = Array('a-9', 'a-9');
2921 addThis();
2922
2923 status = inSection(388);
2924 pattern = /([[:digit:]-z]+)/;
2925 string = '=0-z=';
2926 actualmatch = string.match(pattern);
2927 expectedmatch = Array('0-z', '0-z');
2928 addThis();
2929
2930 status = inSection(389);
2931 pattern = /([[:digit:]-[:alpha:]]+)/;
2932 string = '=0-z=';
2933 actualmatch = string.match(pattern);
2934 expectedmatch = Array('0-z', '0-z');
2935 addThis();
2936 */
2937
2938 status = inSection(390);
2939 pattern = /(\d+\.\d+)/;
2940 string = '3.1415926';
2941 actualmatch = string.match(pattern);
2942 expectedmatch = Array('3.1415926', '3.1415926');
2943 addThis();
2944
2945 status = inSection(391);
2946 pattern = /\.c(pp|xx|c)?$/i;
2947 string = 'IO.c';
2948 actualmatch = string.match(pattern);
2949 expectedmatch = Array('.c', undefined);
2950 addThis();
2951
2952 status = inSection(392);
2953 pattern = /(\.c(pp|xx|c)?$)/i;
2954 string = 'IO.c';
2955 actualmatch = string.match(pattern);
2956 expectedmatch = Array('.c', '.c', undefined);
2957 addThis();
2958
2959 status = inSection(393);
2960 pattern = /(^|a)b/;
2961 string = 'ab';
2962 actualmatch = string.match(pattern);
2963 expectedmatch = Array('ab', 'a');
2964 addThis();
2965
2966 status = inSection(394);
2967 pattern = /^([ab]*?)(b)?(c)$/;
2968 string = 'abac';
2969 actualmatch = string.match(pattern);
2970 expectedmatch = Array('abac', 'aba', undefined, 'c');
2971 addThis();
2972
2973 status = inSection(395);
2974 pattern = /^(?:.,){2}c/i;
2975 string = 'a,b,c';
2976 actualmatch = string.match(pattern);
2977 expectedmatch = Array('a,b,c');
2978 addThis();
2979
2980 status = inSection(396);
2981 pattern = /^(.,){2}c/i;
2982 string = 'a,b,c';
2983 actualmatch = string.match(pattern);
2984 expectedmatch =  Array('a,b,c', 'b,');
2985 addThis();
2986
2987 status = inSection(397);
2988 pattern = /^(?:[^,]*,){2}c/;
2989 string = 'a,b,c';
2990 actualmatch = string.match(pattern);
2991 expectedmatch = Array('a,b,c');
2992 addThis();
2993
2994 status = inSection(398);
2995 pattern = /^([^,]*,){2}c/;
2996 string = 'a,b,c';
2997 actualmatch = string.match(pattern);
2998 expectedmatch = Array('a,b,c', 'b,');
2999 addThis();
3000
3001 status = inSection(399);
3002 pattern = /^([^,]*,){3}d/;
3003 string = 'aaa,b,c,d';
3004 actualmatch = string.match(pattern);
3005 expectedmatch = Array('aaa,b,c,d', 'c,');
3006 addThis();
3007
3008 status = inSection(400);
3009 pattern = /^([^,]*,){3,}d/;
3010 string = 'aaa,b,c,d';
3011 actualmatch = string.match(pattern);
3012 expectedmatch = Array('aaa,b,c,d', 'c,');
3013 addThis();
3014
3015 status = inSection(401);
3016 pattern = /^([^,]*,){0,3}d/;
3017 string = 'aaa,b,c,d';
3018 actualmatch = string.match(pattern);
3019 expectedmatch = Array('aaa,b,c,d', 'c,');
3020 addThis();
3021
3022 status = inSection(402);
3023 pattern = /^([^,]{1,3},){3}d/i;
3024 string = 'aaa,b,c,d';
3025 actualmatch = string.match(pattern);
3026 expectedmatch = Array('aaa,b,c,d', 'c,');
3027 addThis();
3028
3029 status = inSection(403);
3030 pattern = /^([^,]{1,3},){3,}d/;
3031 string = 'aaa,b,c,d';
3032 actualmatch = string.match(pattern);
3033 expectedmatch = Array('aaa,b,c,d', 'c,');
3034 addThis();
3035
3036 status = inSection(404);
3037 pattern = /^([^,]{1,3},){0,3}d/;
3038 string = 'aaa,b,c,d';
3039 actualmatch = string.match(pattern);
3040 expectedmatch = Array('aaa,b,c,d', 'c,');
3041 addThis();
3042
3043 status = inSection(405);
3044 pattern = /^([^,]{1,},){3}d/;
3045 string = 'aaa,b,c,d';
3046 actualmatch = string.match(pattern);
3047 expectedmatch = Array('aaa,b,c,d', 'c,');
3048 addThis();
3049
3050 status = inSection(406);
3051 pattern = /^([^,]{1,},){3,}d/;
3052 string = 'aaa,b,c,d';
3053 actualmatch = string.match(pattern);
3054 expectedmatch = Array('aaa,b,c,d', 'c,');
3055 addThis();
3056
3057 status = inSection(407);
3058 pattern = /^([^,]{1,},){0,3}d/;
3059 string = 'aaa,b,c,d';
3060 actualmatch = string.match(pattern);
3061 expectedmatch = Array('aaa,b,c,d', 'c,');
3062 addThis();
3063
3064 status = inSection(408);
3065 pattern = /^([^,]{0,3},){3}d/i;
3066 string = 'aaa,b,c,d';
3067 actualmatch = string.match(pattern);
3068 expectedmatch = Array('aaa,b,c,d', 'c,');
3069 addThis();
3070
3071 status = inSection(409);
3072 pattern = /^([^,]{0,3},){3,}d/;
3073 string = 'aaa,b,c,d';
3074 actualmatch = string.match(pattern);
3075 expectedmatch = Array('aaa,b,c,d', 'c,');
3076 addThis();
3077
3078 status = inSection(410);
3079 pattern = /^([^,]{0,3},){0,3}d/;
3080 string = 'aaa,b,c,d';
3081 actualmatch = string.match(pattern);
3082 expectedmatch = Array('aaa,b,c,d', 'c,');
3083 addThis();
3084
3085 /* ECMA doesn't support \A
3086 status = inSection(411);
3087 pattern = /(?!\A)x/m;
3088 string = 'a\nxb\n';
3089 actualmatch = string.match(pattern);
3090 expectedmatch = Array('\n');
3091 addThis();
3092 */
3093
3094 status = inSection(412);
3095 pattern = /^(a(b)?)+$/;
3096 string = 'aba';
3097 actualmatch = string.match(pattern);
3098 expectedmatch = Array('aba', 'a', undefined);
3099 addThis();
3100
3101 status = inSection(413);
3102 pattern = /^(aa(bb)?)+$/;
3103 string = 'aabbaa';
3104 actualmatch = string.match(pattern);
3105 expectedmatch = Array('aabbaa', 'aa', undefined);
3106 addThis();
3107
3108 status = inSection(414);
3109 pattern = /^.{9}abc.*\n/m;
3110 string = '123\nabcabcabcabc\n';
3111 actualmatch = string.match(pattern);
3112 expectedmatch = Array('abcabcabcabc\n');
3113 addThis();
3114
3115 status = inSection(415);
3116 pattern = /^(a)?a$/;
3117 string = 'a';
3118 actualmatch = string.match(pattern);
3119 expectedmatch = Array('a', undefined);
3120 addThis();
3121
3122 status = inSection(416);
3123 pattern = /^(a\1?)(a\1?)(a\2?)(a\3?)$/;
3124 string = 'aaaaaa';
3125 actualmatch = string.match(pattern);
3126 expectedmatch = Array('aaaaaa', 'a', 'aa', 'a', 'aa');
3127 addThis();
3128
3129 /* Can't refer to a capture before it's encountered & completed
3130 status = inSection(417);
3131 pattern = /^(a\1?){4}$/;
3132 string = 'aaaaaa';
3133 actualmatch = string.match(pattern);
3134 expectedmatch = Array('aaaaaa', 'aaa');
3135 addThis();
3136 */
3137
3138 status = inSection(418);
3139 pattern = /^(0+)?(?:x(1))?/;
3140 string = 'x1';
3141 actualmatch = string.match(pattern);
3142 expectedmatch = Array('x1', undefined, '1');
3143 addThis();
3144
3145 status = inSection(419);
3146 pattern = /^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?/;
3147 string = '012cxx0190';
3148 actualmatch = string.match(pattern);
3149 expectedmatch = Array('012cxx0190', '012c', undefined, '0190');
3150 addThis();
3151
3152 status = inSection(420);
3153 pattern = /^(b+?|a){1,2}c/;
3154 string = 'bbbac';
3155 actualmatch = string.match(pattern);
3156 expectedmatch = Array('bbbac', 'a');
3157 addThis();
3158
3159 status = inSection(421);
3160 pattern = /^(b+?|a){1,2}c/;
3161 string = 'bbbbac';
3162 actualmatch = string.match(pattern);
3163 expectedmatch = Array('bbbbac', 'a');
3164 addThis();
3165
3166 status = inSection(422);
3167 pattern = /((?:aaaa|bbbb)cccc)?/;
3168 string = 'aaaacccc';
3169 actualmatch = string.match(pattern);
3170 expectedmatch = Array('aaaacccc', 'aaaacccc');
3171 addThis();
3172
3173 status = inSection(423);
3174 pattern = /((?:aaaa|bbbb)cccc)?/;
3175 string = 'bbbbcccc';
3176 actualmatch = string.match(pattern);
3177 expectedmatch = Array('bbbbcccc', 'bbbbcccc');
3178 addThis();
3179
3180
3181
3182
3183 //-----------------------------------------------------------------------------
3184 test();
3185 //-----------------------------------------------------------------------------
3186
3187
3188
3189 function addThis()
3190 {
3191   if(omitCurrentSection())
3192     return;
3193
3194   statusmessages[i] = status;
3195   patterns[i] = pattern;
3196   strings[i] = string;
3197   actualmatches[i] = actualmatch;
3198   expectedmatches[i] = expectedmatch;
3199   i++;
3200 }
3201
3202
3203 function omitCurrentSection()
3204 {
3205   try
3206   {
3207     // current section number is in global status variable
3208     var n = status.match(/(\d+)/)[1];
3209     return ((n < cnLBOUND) || (n > cnUBOUND));
3210   }
3211   catch(e)
3212   {
3213     return false;
3214   }
3215 }
3216
3217
3218 function test()
3219 {
3220   enterFunc ('test');
3221   printBugNumber (bug);
3222   printStatus (summary);
3223   testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
3224   exitFunc ('test');
3225 }