tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

perlstress-001.js (75121B)


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