Home | History | Annotate | Download | only in RegExp
      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 (at) netscape.com, rogerl (at) 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 (at) 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 }
   3226