Home | History | Annotate | Download | only in RegExp
      1 /* ***** BEGIN LICENSE BLOCK *****
      2 * Version: NPL 1.1/GPL 2.0/LGPL 2.1
      3 *
      4 * The contents of this file are subject to the Netscape Public License
      5 * Version 1.1 (the "License"); you may not use this file except in
      6 * compliance with the License. You may obtain a copy of the License at
      7 * http://www.mozilla.org/NPL/
      8 *
      9 * Software distributed under the License is distributed on an "AS IS" basis,
     10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     11 * for the specific language governing rights and limitations under the
     12 * License.
     13 *
     14 * The Original Code is JavaScript Engine testing utilities.
     15 *
     16 * The Initial Developer of the Original Code is Netscape Communications Corp.
     17 * Portions created by the Initial Developer are Copyright (C) 2002
     18 * the Initial Developer. All Rights Reserved.
     19 *
     20 * Contributor(s): pschwartau (at) netscape.com, rogerl (at) netscape.com
     21 *
     22 * Alternatively, the contents of this file may be used under the terms of
     23 * either the GNU General Public License Version 2 or later (the "GPL"), or
     24 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
     25 * in which case the provisions of the GPL or the LGPL are applicable instead
     26 * of those above. If you wish to allow use of your version of this file only
     27 * under the terms of either the GPL or the LGPL, and not to allow others to
     28 * use your version of this file under the terms of the NPL, indicate your
     29 * decision by deleting the provisions above and replace them with the notice
     30 * and other provisions required by the GPL or the LGPL. If you do not delete
     31 * the provisions above, a recipient may use your version of this file under
     32 * the terms of any one of the NPL, the GPL or the LGPL.
     33 *
     34 * ***** END LICENSE BLOCK *****
     35 *
     36 *
     37 * Date:    2002-07-07
     38 * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine.
     39 * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested.
     40 *
     41 * This test was created by running various patterns and strings through the
     42 * Perl 5 RegExp engine. We saved the results below to test the JS engine.
     43 *
     44 * Each of the examples below is a negative test; that is, each produces a
     45 * null match in Perl. Thus we set |expectedmatch| = |null| in each section.
     46 *
     47 * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented
     48 * out such sections altogether, or modified them to fit what we expect from JS.
     49 *
     50 * EXAMPLES:
     51 *
     52 * - ECMA does support (?: (?= and (?! operators, but doesn't support (?<  etc.
     53 *
     54 * - ECMA doesn't support (?(condition)
     55 *
     56 */
     57 //-----------------------------------------------------------------------------
     58 var i = 0;
     59 var bug = 85721;
     60 var summary = 'Testing regular expression edge cases';
     61 var cnSingleSpace = ' ';
     62 var status = '';
     63 var statusmessages = new Array();
     64 var pattern = '';
     65 var patterns = new Array();
     66 var string = '';
     67 var strings = new Array();
     68 var actualmatch = '';
     69 var actualmatches = new Array();
     70 var expectedmatch = '';
     71 var expectedmatches = new Array();
     72 var cnLBOUND = 0;
     73 var cnUBOUND = 1000;
     74 
     75 
     76 status = inSection(1);
     77 pattern = /abc/;
     78 string = 'xbc';
     79 actualmatch = string.match(pattern);
     80 expectedmatch = null;
     81 addThis();
     82 
     83 status = inSection(2);
     84 pattern = /abc/;
     85 string = 'axc';
     86 actualmatch = string.match(pattern);
     87 expectedmatch = null;
     88 addThis();
     89 
     90 status = inSection(3);
     91 pattern = /abc/;
     92 string = 'abx';
     93 actualmatch = string.match(pattern);
     94 expectedmatch = null;
     95 addThis();
     96 
     97 status = inSection(4);
     98 pattern = /ab+bc/;
     99 string = 'abc';
    100 actualmatch = string.match(pattern);
    101 expectedmatch = null;
    102 addThis();
    103 
    104 status = inSection(5);
    105 pattern = /ab+bc/;
    106 string = 'abq';
    107 actualmatch = string.match(pattern);
    108 expectedmatch = null;
    109 addThis();
    110 
    111 status = inSection(6);
    112 pattern = /ab{1,}bc/;
    113 string = 'abq';
    114 actualmatch = string.match(pattern);
    115 expectedmatch = null;
    116 addThis();
    117 
    118 status = inSection(7);
    119 pattern = /ab{4,5}bc/;
    120 string = 'abbbbc';
    121 actualmatch = string.match(pattern);
    122 expectedmatch = null;
    123 addThis();
    124 
    125 status = inSection(8);
    126 pattern = /ab?bc/;
    127 string = 'abbbbc';
    128 actualmatch = string.match(pattern);
    129 expectedmatch = null;
    130 addThis();
    131 
    132 status = inSection(9);
    133 pattern = /^abc$/;
    134 string = 'abcc';
    135 actualmatch = string.match(pattern);
    136 expectedmatch = null;
    137 addThis();
    138 
    139 status = inSection(10);
    140 pattern = /^abc$/;
    141 string = 'aabc';
    142 actualmatch = string.match(pattern);
    143 expectedmatch = null;
    144 addThis();
    145 
    146 status = inSection(11);
    147 pattern = /abc$/;
    148 string = 'aabcd';
    149 actualmatch = string.match(pattern);
    150 expectedmatch = null;
    151 addThis();
    152 
    153 status = inSection(12);
    154 pattern = /a.*c/;
    155 string = 'axyzd';
    156 actualmatch = string.match(pattern);
    157 expectedmatch = null;
    158 addThis();
    159 
    160 status = inSection(13);
    161 pattern = /a[bc]d/;
    162 string = 'abc';
    163 actualmatch = string.match(pattern);
    164 expectedmatch = null;
    165 addThis();
    166 
    167 status = inSection(14);
    168 pattern = /a[b-d]e/;
    169 string = 'abd';
    170 actualmatch = string.match(pattern);
    171 expectedmatch = null;
    172 addThis();
    173 
    174 status = inSection(15);
    175 pattern = /a[^bc]d/;
    176 string = 'abd';
    177 actualmatch = string.match(pattern);
    178 expectedmatch = null;
    179 addThis();
    180 
    181 status = inSection(16);
    182 pattern = /a[^-b]c/;
    183 string = 'a-c';
    184 actualmatch = string.match(pattern);
    185 expectedmatch = null;
    186 addThis();
    187 
    188 status = inSection(17);
    189 pattern = /a[^]b]c/;
    190 string = 'a]c';
    191 actualmatch = string.match(pattern);
    192 expectedmatch = null;
    193 addThis();
    194 
    195 status = inSection(18);
    196 pattern = /\by\b/;
    197 string = 'xy';
    198 actualmatch = string.match(pattern);
    199 expectedmatch = null;
    200 addThis();
    201 
    202 status = inSection(19);
    203 pattern = /\by\b/;
    204 string = 'yz';
    205 actualmatch = string.match(pattern);
    206 expectedmatch = null;
    207 addThis();
    208 
    209 status = inSection(20);
    210 pattern = /\by\b/;
    211 string = 'xyz';
    212 actualmatch = string.match(pattern);
    213 expectedmatch = null;
    214 addThis();
    215 
    216 status = inSection(21);
    217 pattern = /\Ba\B/;
    218 string = 'a-';
    219 actualmatch = string.match(pattern);
    220 expectedmatch = null;
    221 addThis();
    222 
    223 status = inSection(22);
    224 pattern = /\Ba\B/;
    225 string = '-a';
    226 actualmatch = string.match(pattern);
    227 expectedmatch = null;
    228 addThis();
    229 
    230 status = inSection(23);
    231 pattern = /\Ba\B/;
    232 string = '-a-';
    233 actualmatch = string.match(pattern);
    234 expectedmatch = null;
    235 addThis();
    236 
    237 status = inSection(24);
    238 pattern = /\w/;
    239 string = '-';
    240 actualmatch = string.match(pattern);
    241 expectedmatch = null;
    242 addThis();
    243 
    244 status = inSection(25);
    245 pattern = /\W/;
    246 string = 'a';
    247 actualmatch = string.match(pattern);
    248 expectedmatch = null;
    249 addThis();
    250 
    251 status = inSection(26);
    252 pattern = /a\sb/;
    253 string = 'a-b';
    254 actualmatch = string.match(pattern);
    255 expectedmatch = null;
    256 addThis();
    257 
    258 status = inSection(27);
    259 pattern = /\d/;
    260 string = '-';
    261 actualmatch = string.match(pattern);
    262 expectedmatch = null;
    263 addThis();
    264 
    265 status = inSection(28);
    266 pattern = /\D/;
    267 string = '1';
    268 actualmatch = string.match(pattern);
    269 expectedmatch = null;
    270 addThis();
    271 
    272 status = inSection(29);
    273 pattern = /[\w]/;
    274 string = '-';
    275 actualmatch = string.match(pattern);
    276 expectedmatch = null;
    277 addThis();
    278 
    279 status = inSection(30);
    280 pattern = /[\W]/;
    281 string = 'a';
    282 actualmatch = string.match(pattern);
    283 expectedmatch = null;
    284 addThis();
    285 
    286 status = inSection(31);
    287 pattern = /a[\s]b/;
    288 string = 'a-b';
    289 actualmatch = string.match(pattern);
    290 expectedmatch = null;
    291 addThis();
    292 
    293 status = inSection(32);
    294 pattern = /[\d]/;
    295 string = '-';
    296 actualmatch = string.match(pattern);
    297 expectedmatch = null;
    298 addThis();
    299 
    300 status = inSection(33);
    301 pattern = /[\D]/;
    302 string = '1';
    303 actualmatch = string.match(pattern);
    304 expectedmatch = null;
    305 addThis();
    306 
    307 status = inSection(34);
    308 pattern = /$b/;
    309 string = 'b';
    310 actualmatch = string.match(pattern);
    311 expectedmatch = null;
    312 addThis();
    313 
    314 status = inSection(35);
    315 pattern = /^(ab|cd)e/;
    316 string = 'abcde';
    317 actualmatch = string.match(pattern);
    318 expectedmatch = null;
    319 addThis();
    320 
    321 status = inSection(36);
    322 pattern = /a[bcd]+dcdcde/;
    323 string = 'adcdcde';
    324 actualmatch = string.match(pattern);
    325 expectedmatch = null;
    326 addThis();
    327 
    328 status = inSection(37);
    329 pattern = /(bc+d$|ef*g.|h?i(j|k))/;
    330 string = 'effg';
    331 actualmatch = string.match(pattern);
    332 expectedmatch = null;
    333 addThis();
    334 
    335 status = inSection(38);
    336 pattern = /(bc+d$|ef*g.|h?i(j|k))/;
    337 string = 'bcdd';
    338 actualmatch = string.match(pattern);
    339 expectedmatch = null;
    340 addThis();
    341 
    342 status = inSection(39);
    343 pattern = /[k]/;
    344 string = 'ab';
    345 actualmatch = string.match(pattern);
    346 expectedmatch = null;
    347 addThis();
    348 
    349 // MODIFIED - ECMA has different rules for paren contents.
    350 status = inSection(40);
    351 pattern = /(a)|\1/;
    352 string = 'x';
    353 actualmatch = string.match(pattern);
    354 //expectedmatch = null;
    355 expectedmatch = Array("", undefined);
    356 addThis();
    357 
    358 // MODIFIED - ECMA has different rules for paren contents.
    359 status = inSection(41);
    360 pattern = /((\3|b)\2(a)x)+/;
    361 string = 'aaxabxbaxbbx';
    362 actualmatch = string.match(pattern);
    363 //expectedmatch = null;
    364 expectedmatch = Array("ax", "ax", "", "a");
    365 addThis();
    366 
    367 status = inSection(42);
    368 pattern = /abc/i;
    369 string = 'XBC';
    370 actualmatch = string.match(pattern);
    371 expectedmatch = null;
    372 addThis();
    373 
    374 status = inSection(43);
    375 pattern = /abc/i;
    376 string = 'AXC';
    377 actualmatch = string.match(pattern);
    378 expectedmatch = null;
    379 addThis();
    380 
    381 status = inSection(44);
    382 pattern = /abc/i;
    383 string = 'ABX';
    384 actualmatch = string.match(pattern);
    385 expectedmatch = null;
    386 addThis();
    387 
    388 status = inSection(45);
    389 pattern = /ab+bc/i;
    390 string = 'ABC';
    391 actualmatch = string.match(pattern);
    392 expectedmatch = null;
    393 addThis();
    394 
    395 status = inSection(46);
    396 pattern = /ab+bc/i;
    397 string = 'ABQ';
    398 actualmatch = string.match(pattern);
    399 expectedmatch = null;
    400 addThis();
    401 
    402 status = inSection(47);
    403 pattern = /ab{1,}bc/i;
    404 string = 'ABQ';
    405 actualmatch = string.match(pattern);
    406 expectedmatch = null;
    407 addThis();
    408 
    409 status = inSection(48);
    410 pattern = /ab{4,5}?bc/i;
    411 string = 'ABBBBC';
    412 actualmatch = string.match(pattern);
    413 expectedmatch = null;
    414 addThis();
    415 
    416 status = inSection(49);
    417 pattern = /ab??bc/i;
    418 string = 'ABBBBC';
    419 actualmatch = string.match(pattern);
    420 expectedmatch = null;
    421 addThis();
    422 
    423 status = inSection(50);
    424 pattern = /^abc$/i;
    425 string = 'ABCC';
    426 actualmatch = string.match(pattern);
    427 expectedmatch = null;
    428 addThis();
    429 
    430 status = inSection(51);
    431 pattern = /^abc$/i;
    432 string = 'AABC';
    433 actualmatch = string.match(pattern);
    434 expectedmatch = null;
    435 addThis();
    436 
    437 status = inSection(52);
    438 pattern = /a.*c/i;
    439 string = 'AXYZD';
    440 actualmatch = string.match(pattern);
    441 expectedmatch = null;
    442 addThis();
    443 
    444 status = inSection(53);
    445 pattern = /a[bc]d/i;
    446 string = 'ABC';
    447 actualmatch = string.match(pattern);
    448 expectedmatch = null;
    449 addThis();
    450 
    451 status = inSection(54);
    452 pattern = /a[b-d]e/i;
    453 string = 'ABD';
    454 actualmatch = string.match(pattern);
    455 expectedmatch = null;
    456 addThis();
    457 
    458 status = inSection(55);
    459 pattern = /a[^bc]d/i;
    460 string = 'ABD';
    461 actualmatch = string.match(pattern);
    462 expectedmatch = null;
    463 addThis();
    464 
    465 status = inSection(56);
    466 pattern = /a[^-b]c/i;
    467 string = 'A-C';
    468 actualmatch = string.match(pattern);
    469 expectedmatch = null;
    470 addThis();
    471 
    472 status = inSection(57);
    473 pattern = /a[^]b]c/i;
    474 string = 'A]C';
    475 actualmatch = string.match(pattern);
    476 expectedmatch = null;
    477 addThis();
    478 
    479 status = inSection(58);
    480 pattern = /$b/i;
    481 string = 'B';
    482 actualmatch = string.match(pattern);
    483 expectedmatch = null;
    484 addThis();
    485 
    486 status = inSection(59);
    487 pattern = /^(ab|cd)e/i;
    488 string = 'ABCDE';
    489 actualmatch = string.match(pattern);
    490 expectedmatch = null;
    491 addThis();
    492 
    493 status = inSection(60);
    494 pattern = /a[bcd]+dcdcde/i;
    495 string = 'ADCDCDE';
    496 actualmatch = string.match(pattern);
    497 expectedmatch = null;
    498 addThis();
    499 
    500 status = inSection(61);
    501 pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
    502 string = 'EFFG';
    503 actualmatch = string.match(pattern);
    504 expectedmatch = null;
    505 addThis();
    506 
    507 status = inSection(62);
    508 pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
    509 string = 'BCDD';
    510 actualmatch = string.match(pattern);
    511 expectedmatch = null;
    512 addThis();
    513 
    514 status = inSection(63);
    515 pattern = /[k]/i;
    516 string = 'AB';
    517 actualmatch = string.match(pattern);
    518 expectedmatch = null;
    519 addThis();
    520 
    521 status = inSection(64);
    522 pattern = /^(a\1?){4}$/;
    523 string = 'aaaaaaaaa';
    524 actualmatch = string.match(pattern);
    525 expectedmatch = null;
    526 addThis();
    527 
    528 status = inSection(65);
    529 pattern = /^(a\1?){4}$/;
    530 string = 'aaaaaaaaaaa';
    531 actualmatch = string.match(pattern);
    532 expectedmatch = null;
    533 addThis();
    534 
    535 /* ECMA doesn't support (?(
    536 status = inSection(66);
    537 pattern = /^(a(?(1)\1)){4}$/;
    538 string = 'aaaaaaaaa';
    539 actualmatch = string.match(pattern);
    540 expectedmatch = null;
    541 addThis();
    542 
    543 status = inSection(67);
    544 pattern = /^(a(?(1)\1)){4}$/;
    545 string = 'aaaaaaaaaaa';
    546 actualmatch = string.match(pattern);
    547 expectedmatch = null;
    548 addThis();
    549 */
    550 
    551 /* ECMA doesn't support (?<
    552 status = inSection(68);
    553 pattern = /(?<=a)b/;
    554 string = 'cb';
    555 actualmatch = string.match(pattern);
    556 expectedmatch = null;
    557 addThis();
    558 
    559 status = inSection(69);
    560 pattern = /(?<=a)b/;
    561 string = 'b';
    562 actualmatch = string.match(pattern);
    563 expectedmatch = null;
    564 addThis();
    565 
    566 status = inSection(70);
    567 pattern = /(?<!c)b/;
    568 string = 'cb';
    569 actualmatch = string.match(pattern);
    570 expectedmatch = null;
    571 addThis();
    572 */
    573 
    574 /* ECMA doesn't support (?(condition)
    575 status = inSection(71);
    576 pattern = /(?:(?i)a)b/;
    577 string = 'aB';
    578 actualmatch = string.match(pattern);
    579 expectedmatch = null;
    580 addThis();
    581 
    582 status = inSection(72);
    583 pattern = /((?i)a)b/;
    584 string = 'aB';
    585 actualmatch = string.match(pattern);
    586 expectedmatch = null;
    587 addThis();
    588 
    589 status = inSection(73);
    590 pattern = /(?i:a)b/;
    591 string = 'aB';
    592 actualmatch = string.match(pattern);
    593 expectedmatch = null;
    594 addThis();
    595 
    596 status = inSection(74);
    597 pattern = /((?i:a))b/;
    598 string = 'aB';
    599 actualmatch = string.match(pattern);
    600 expectedmatch = null;
    601 addThis();
    602 
    603 status = inSection(75);
    604 pattern = /(?:(?-i)a)b/i;
    605 string = 'Ab';
    606 actualmatch = string.match(pattern);
    607 expectedmatch = null;
    608 addThis();
    609 
    610 status = inSection(76);
    611 pattern = /((?-i)a)b/i;
    612 string = 'Ab';
    613 actualmatch = string.match(pattern);
    614 expectedmatch = null;
    615 addThis();
    616 
    617 status = inSection(77);
    618 pattern = /(?:(?-i)a)b/i;
    619 string = 'AB';
    620 actualmatch = string.match(pattern);
    621 expectedmatch = null;
    622 addThis();
    623 
    624 status = inSection(78);
    625 pattern = /((?-i)a)b/i;
    626 string = 'AB';
    627 actualmatch = string.match(pattern);
    628 expectedmatch = null;
    629 addThis();
    630 
    631 status = inSection(79);
    632 pattern = /(?-i:a)b/i;
    633 string = 'Ab';
    634 actualmatch = string.match(pattern);
    635 expectedmatch = null;
    636 addThis();
    637 
    638 status = inSection(80);
    639 pattern = /((?-i:a))b/i;
    640 string = 'Ab';
    641 actualmatch = string.match(pattern);
    642 expectedmatch = null;
    643 addThis();
    644 
    645 status = inSection(81);
    646 pattern = /(?-i:a)b/i;
    647 string = 'AB';
    648 actualmatch = string.match(pattern);
    649 expectedmatch = null;
    650 addThis();
    651 
    652 status = inSection(82);
    653 pattern = /((?-i:a))b/i;
    654 string = 'AB';
    655 actualmatch = string.match(pattern);
    656 expectedmatch = null;
    657 addThis();
    658 
    659 status = inSection(83);
    660 pattern = /((?-i:a.))b/i;
    661 string = 'a\nB';
    662 actualmatch = string.match(pattern);
    663 expectedmatch = null;
    664 addThis();
    665 
    666 status = inSection(84);
    667 pattern = /((?s-i:a.))b/i;
    668 string = 'B\nB';
    669 actualmatch = string.match(pattern);
    670 expectedmatch = null;
    671 addThis();
    672 */
    673 
    674 /* ECMA doesn't support (?<
    675 status = inSection(85);
    676 pattern = /(?<![cd])b/;
    677 string = 'dbcb';
    678 actualmatch = string.match(pattern);
    679 expectedmatch = null;
    680 addThis();
    681 
    682 status = inSection(86);
    683 pattern = /(?<!(c|d))b/;
    684 string = 'dbcb';
    685 actualmatch = string.match(pattern);
    686 expectedmatch = null;
    687 addThis();
    688 */
    689 
    690 status = inSection(87);
    691 pattern = /^(?:a?b?)*$/;
    692 string = 'a--';
    693 actualmatch = string.match(pattern);
    694 expectedmatch = null;
    695 addThis();
    696 
    697 status = inSection(88);
    698 pattern = /^b/;
    699 string = 'a\nb\nc\n';
    700 actualmatch = string.match(pattern);
    701 expectedmatch = null;
    702 addThis();
    703 
    704 status = inSection(89);
    705 pattern = /()^b/;
    706 string = 'a\nb\nc\n';
    707 actualmatch = string.match(pattern);
    708 expectedmatch = null;
    709 addThis();
    710 
    711 /* ECMA doesn't support (?(
    712 status = inSection(90);
    713 pattern = /(?(1)a|b)/;
    714 string = 'a';
    715 actualmatch = string.match(pattern);
    716 expectedmatch = null;
    717 addThis();
    718 
    719 status = inSection(91);
    720 pattern = /(x)?(?(1)a|b)/;
    721 string = 'a';
    722 actualmatch = string.match(pattern);
    723 expectedmatch = null;
    724 addThis();
    725 
    726 status = inSection(92);
    727 pattern = /()(?(1)b|a)/;
    728 string = 'a';
    729 actualmatch = string.match(pattern);
    730 expectedmatch = null;
    731 addThis();
    732 
    733 status = inSection(93);
    734 pattern = /^(\()?blah(?(1)(\)))$/;
    735 string = 'blah)';
    736 actualmatch = string.match(pattern);
    737 expectedmatch = null;
    738 addThis();
    739 
    740 status = inSection(94);
    741 pattern = /^(\()?blah(?(1)(\)))$/;
    742 string = '(blah';
    743 actualmatch = string.match(pattern);
    744 expectedmatch = null;
    745 addThis();
    746 
    747 status = inSection(95);
    748 pattern = /^(\(+)?blah(?(1)(\)))$/;
    749 string = 'blah)';
    750 actualmatch = string.match(pattern);
    751 expectedmatch = null;
    752 addThis();
    753 
    754 status = inSection(96);
    755 pattern = /^(\(+)?blah(?(1)(\)))$/;
    756 string = '(blah';
    757 actualmatch = string.match(pattern);
    758 expectedmatch = null;
    759 addThis();
    760 
    761 status = inSection(97);
    762 pattern = /(?(?{0})a|b)/;
    763 string = 'a';
    764 actualmatch = string.match(pattern);
    765 expectedmatch = null;
    766 addThis();
    767 
    768 status = inSection(98);
    769 pattern = /(?(?{1})b|a)/;
    770 string = 'a';
    771 actualmatch = string.match(pattern);
    772 expectedmatch = null;
    773 addThis();
    774 
    775 status = inSection(99);
    776 pattern = /(?(?!a)a|b)/;
    777 string = 'a';
    778 actualmatch = string.match(pattern);
    779 expectedmatch = null;
    780 addThis();
    781 
    782 status = inSection(100);
    783 pattern = /(?(?=a)b|a)/;
    784 string = 'a';
    785 actualmatch = string.match(pattern);
    786 expectedmatch = null;
    787 addThis();
    788 */
    789 
    790 status = inSection(101);
    791 pattern = /^(?=(a+?))\1ab/;
    792 string = 'aaab';
    793 actualmatch = string.match(pattern);
    794 expectedmatch = null;
    795 addThis();
    796 
    797 status = inSection(102);
    798 pattern = /^(?=(a+?))\1ab/;
    799 string = 'aaab';
    800 actualmatch = string.match(pattern);
    801 expectedmatch = null;
    802 addThis();
    803 
    804 status = inSection(103);
    805 pattern = /([\w:]+::)?(\w+)$/;
    806 string = 'abcd:';
    807 actualmatch = string.match(pattern);
    808 expectedmatch = null;
    809 addThis();
    810 
    811 status = inSection(104);
    812 pattern = /([\w:]+::)?(\w+)$/;
    813 string = 'abcd:';
    814 actualmatch = string.match(pattern);
    815 expectedmatch = null;
    816 addThis();
    817 
    818 status = inSection(105);
    819 pattern = /(>a+)ab/;
    820 string = 'aaab';
    821 actualmatch = string.match(pattern);
    822 expectedmatch = null;
    823 addThis();
    824 
    825 status = inSection(106);
    826 pattern = /a\Z/;
    827 string = 'a\nb\n';
    828 actualmatch = string.match(pattern);
    829 expectedmatch = null;
    830 addThis();
    831 
    832 status = inSection(107);
    833 pattern = /a\z/;
    834 string = 'a\nb\n';
    835 actualmatch = string.match(pattern);
    836 expectedmatch = null;
    837 addThis();
    838 
    839 status = inSection(108);
    840 pattern = /a$/;
    841 string = 'a\nb\n';
    842 actualmatch = string.match(pattern);
    843 expectedmatch = null;
    844 addThis();
    845 
    846 status = inSection(109);
    847 pattern = /a\z/;
    848 string = 'b\na\n';
    849 actualmatch = string.match(pattern);
    850 expectedmatch = null;
    851 addThis();
    852 
    853 status = inSection(110);
    854 pattern = /a\z/m;
    855 string = 'a\nb\n';
    856 actualmatch = string.match(pattern);
    857 expectedmatch = null;
    858 addThis();
    859 
    860 status = inSection(111);
    861 pattern = /a\z/m;
    862 string = 'b\na\n';
    863 actualmatch = string.match(pattern);
    864 expectedmatch = null;
    865 addThis();
    866 
    867 status = inSection(112);
    868 pattern = /aa\Z/;
    869 string = 'aa\nb\n';
    870 actualmatch = string.match(pattern);
    871 expectedmatch = null;
    872 addThis();
    873 
    874 status = inSection(113);
    875 pattern = /aa\z/;
    876 string = 'aa\nb\n';
    877 actualmatch = string.match(pattern);
    878 expectedmatch = null;
    879 addThis();
    880 
    881 status = inSection(114);
    882 pattern = /aa$/;
    883 string = 'aa\nb\n';
    884 actualmatch = string.match(pattern);
    885 expectedmatch = null;
    886 addThis();
    887 
    888 status = inSection(115);
    889 pattern = /aa\z/;
    890 string = 'b\naa\n';
    891 actualmatch = string.match(pattern);
    892 expectedmatch = null;
    893 addThis();
    894 
    895 status = inSection(116);
    896 pattern = /aa\z/m;
    897 string = 'aa\nb\n';
    898 actualmatch = string.match(pattern);
    899 expectedmatch = null;
    900 addThis();
    901 
    902 status = inSection(117);
    903 pattern = /aa\z/m;
    904 string = 'b\naa\n';
    905 actualmatch = string.match(pattern);
    906 expectedmatch = null;
    907 addThis();
    908 
    909 status = inSection(118);
    910 pattern = /aa\Z/;
    911 string = 'ac\nb\n';
    912 actualmatch = string.match(pattern);
    913 expectedmatch = null;
    914 addThis();
    915 
    916 status = inSection(119);
    917 pattern = /aa\z/;
    918 string = 'ac\nb\n';
    919 actualmatch = string.match(pattern);
    920 expectedmatch = null;
    921 addThis();
    922 
    923 status = inSection(120);
    924 pattern = /aa$/;
    925 string = 'ac\nb\n';
    926 actualmatch = string.match(pattern);
    927 expectedmatch = null;
    928 addThis();
    929 
    930 status = inSection(121);
    931 pattern = /aa\Z/;
    932 string = 'b\nac\n';
    933 actualmatch = string.match(pattern);
    934 expectedmatch = null;
    935 addThis();
    936 
    937 status = inSection(122);
    938 pattern = /aa\z/;
    939 string = 'b\nac\n';
    940 actualmatch = string.match(pattern);
    941 expectedmatch = null;
    942 addThis();
    943 
    944 status = inSection(123);
    945 pattern = /aa$/;
    946 string = 'b\nac\n';
    947 actualmatch = string.match(pattern);
    948 expectedmatch = null;
    949 addThis();
    950 
    951 status = inSection(124);
    952 pattern = /aa\Z/;
    953 string = 'b\nac';
    954 actualmatch = string.match(pattern);
    955 expectedmatch = null;
    956 addThis();
    957 
    958 status = inSection(125);
    959 pattern = /aa\z/;
    960 string = 'b\nac';
    961 actualmatch = string.match(pattern);
    962 expectedmatch = null;
    963 addThis();
    964 
    965 status = inSection(126);
    966 pattern = /aa$/;
    967 string = 'b\nac';
    968 actualmatch = string.match(pattern);
    969 expectedmatch = null;
    970 addThis();
    971 
    972 status = inSection(127);
    973 pattern = /aa\Z/m;
    974 string = 'ac\nb\n';
    975 actualmatch = string.match(pattern);
    976 expectedmatch = null;
    977 addThis();
    978 
    979 status = inSection(128);
    980 pattern = /aa\z/m;
    981 string = 'ac\nb\n';
    982 actualmatch = string.match(pattern);
    983 expectedmatch = null;
    984 addThis();
    985 
    986 status = inSection(129);
    987 pattern = /aa$/m;
    988 string = 'ac\nb\n';
    989 actualmatch = string.match(pattern);
    990 expectedmatch = null;
    991 addThis();
    992 
    993 status = inSection(130);
    994 pattern = /aa\Z/m;
    995 string = 'b\nac\n';
    996 actualmatch = string.match(pattern);
    997 expectedmatch = null;
    998 addThis();
    999 
   1000 status = inSection(131);
   1001 pattern = /aa\z/m;
   1002 string = 'b\nac\n';
   1003 actualmatch = string.match(pattern);
   1004 expectedmatch = null;
   1005 addThis();
   1006 
   1007 status = inSection(132);
   1008 pattern = /aa$/m;
   1009 string = 'b\nac\n';
   1010 actualmatch = string.match(pattern);
   1011 expectedmatch = null;
   1012 addThis();
   1013 
   1014 status = inSection(133);
   1015 pattern = /aa\Z/m;
   1016 string = 'b\nac';
   1017 actualmatch = string.match(pattern);
   1018 expectedmatch = null;
   1019 addThis();
   1020 
   1021 status = inSection(134);
   1022 pattern = /aa\z/m;
   1023 string = 'b\nac';
   1024 actualmatch = string.match(pattern);
   1025 expectedmatch = null;
   1026 addThis();
   1027 
   1028 status = inSection(135);
   1029 pattern = /aa$/m;
   1030 string = 'b\nac';
   1031 actualmatch = string.match(pattern);
   1032 expectedmatch = null;
   1033 addThis();
   1034 
   1035 status = inSection(136);
   1036 pattern = /aa\Z/;
   1037 string = 'ca\nb\n';
   1038 actualmatch = string.match(pattern);
   1039 expectedmatch = null;
   1040 addThis();
   1041 
   1042 status = inSection(137);
   1043 pattern = /aa\z/;
   1044 string = 'ca\nb\n';
   1045 actualmatch = string.match(pattern);
   1046 expectedmatch = null;
   1047 addThis();
   1048 
   1049 status = inSection(138);
   1050 pattern = /aa$/;
   1051 string = 'ca\nb\n';
   1052 actualmatch = string.match(pattern);
   1053 expectedmatch = null;
   1054 addThis();
   1055 
   1056 status = inSection(139);
   1057 pattern = /aa\Z/;
   1058 string = 'b\nca\n';
   1059 actualmatch = string.match(pattern);
   1060 expectedmatch = null;
   1061 addThis();
   1062 
   1063 status = inSection(140);
   1064 pattern = /aa\z/;
   1065 string = 'b\nca\n';
   1066 actualmatch = string.match(pattern);
   1067 expectedmatch = null;
   1068 addThis();
   1069 
   1070 status = inSection(141);
   1071 pattern = /aa$/;
   1072 string = 'b\nca\n';
   1073 actualmatch = string.match(pattern);
   1074 expectedmatch = null;
   1075 addThis();
   1076 
   1077 status = inSection(142);
   1078 pattern = /aa\Z/;
   1079 string = 'b\nca';
   1080 actualmatch = string.match(pattern);
   1081 expectedmatch = null;
   1082 addThis();
   1083 
   1084 status = inSection(143);
   1085 pattern = /aa\z/;
   1086 string = 'b\nca';
   1087 actualmatch = string.match(pattern);
   1088 expectedmatch = null;
   1089 addThis();
   1090 
   1091 status = inSection(144);
   1092 pattern = /aa$/;
   1093 string = 'b\nca';
   1094 actualmatch = string.match(pattern);
   1095 expectedmatch = null;
   1096 addThis();
   1097 
   1098 status = inSection(145);
   1099 pattern = /aa\Z/m;
   1100 string = 'ca\nb\n';
   1101 actualmatch = string.match(pattern);
   1102 expectedmatch = null;
   1103 addThis();
   1104 
   1105 status = inSection(146);
   1106 pattern = /aa\z/m;
   1107 string = 'ca\nb\n';
   1108 actualmatch = string.match(pattern);
   1109 expectedmatch = null;
   1110 addThis();
   1111 
   1112 status = inSection(147);
   1113 pattern = /aa$/m;
   1114 string = 'ca\nb\n';
   1115 actualmatch = string.match(pattern);
   1116 expectedmatch = null;
   1117 addThis();
   1118 
   1119 status = inSection(148);
   1120 pattern = /aa\Z/m;
   1121 string = 'b\nca\n';
   1122 actualmatch = string.match(pattern);
   1123 expectedmatch = null;
   1124 addThis();
   1125 
   1126 status = inSection(149);
   1127 pattern = /aa\z/m;
   1128 string = 'b\nca\n';
   1129 actualmatch = string.match(pattern);
   1130 expectedmatch = null;
   1131 addThis();
   1132 
   1133 status = inSection(150);
   1134 pattern = /aa$/m;
   1135 string = 'b\nca\n';
   1136 actualmatch = string.match(pattern);
   1137 expectedmatch = null;
   1138 addThis();
   1139 
   1140 status = inSection(151);
   1141 pattern = /aa\Z/m;
   1142 string = 'b\nca';
   1143 actualmatch = string.match(pattern);
   1144 expectedmatch = null;
   1145 addThis();
   1146 
   1147 status = inSection(152);
   1148 pattern = /aa\z/m;
   1149 string = 'b\nca';
   1150 actualmatch = string.match(pattern);
   1151 expectedmatch = null;
   1152 addThis();
   1153 
   1154 status = inSection(153);
   1155 pattern = /aa$/m;
   1156 string = 'b\nca';
   1157 actualmatch = string.match(pattern);
   1158 expectedmatch = null;
   1159 addThis();
   1160 
   1161 status = inSection(154);
   1162 pattern = /ab\Z/;
   1163 string = 'ab\nb\n';
   1164 actualmatch = string.match(pattern);
   1165 expectedmatch = null;
   1166 addThis();
   1167 
   1168 status = inSection(155);
   1169 pattern = /ab\z/;
   1170 string = 'ab\nb\n';
   1171 actualmatch = string.match(pattern);
   1172 expectedmatch = null;
   1173 addThis();
   1174 
   1175 status = inSection(156);
   1176 pattern = /ab$/;
   1177 string = 'ab\nb\n';
   1178 actualmatch = string.match(pattern);
   1179 expectedmatch = null;
   1180 addThis();
   1181 
   1182 status = inSection(157);
   1183 pattern = /ab\z/;
   1184 string = 'b\nab\n';
   1185 actualmatch = string.match(pattern);
   1186 expectedmatch = null;
   1187 addThis();
   1188 
   1189 status = inSection(158);
   1190 pattern = /ab\z/m;
   1191 string = 'ab\nb\n';
   1192 actualmatch = string.match(pattern);
   1193 expectedmatch = null;
   1194 addThis();
   1195 
   1196 status = inSection(159);
   1197 pattern = /ab\z/m;
   1198 string = 'b\nab\n';
   1199 actualmatch = string.match(pattern);
   1200 expectedmatch = null;
   1201 addThis();
   1202 
   1203 status = inSection(160);
   1204 pattern = /ab\Z/;
   1205 string = 'ac\nb\n';
   1206 actualmatch = string.match(pattern);
   1207 expectedmatch = null;
   1208 addThis();
   1209 
   1210 status = inSection(161);
   1211 pattern = /ab\z/;
   1212 string = 'ac\nb\n';
   1213 actualmatch = string.match(pattern);
   1214 expectedmatch = null;
   1215 addThis();
   1216 
   1217 status = inSection(162);
   1218 pattern = /ab$/;
   1219 string = 'ac\nb\n';
   1220 actualmatch = string.match(pattern);
   1221 expectedmatch = null;
   1222 addThis();
   1223 
   1224 status = inSection(163);
   1225 pattern = /ab\Z/;
   1226 string = 'b\nac\n';
   1227 actualmatch = string.match(pattern);
   1228 expectedmatch = null;
   1229 addThis();
   1230 
   1231 status = inSection(164);
   1232 pattern = /ab\z/;
   1233 string = 'b\nac\n';
   1234 actualmatch = string.match(pattern);
   1235 expectedmatch = null;
   1236 addThis();
   1237 
   1238 status = inSection(165);
   1239 pattern = /ab$/;
   1240 string = 'b\nac\n';
   1241 actualmatch = string.match(pattern);
   1242 expectedmatch = null;
   1243 addThis();
   1244 
   1245 status = inSection(166);
   1246 pattern = /ab\Z/;
   1247 string = 'b\nac';
   1248 actualmatch = string.match(pattern);
   1249 expectedmatch = null;
   1250 addThis();
   1251 
   1252 status = inSection(167);
   1253 pattern = /ab\z/;
   1254 string = 'b\nac';
   1255 actualmatch = string.match(pattern);
   1256 expectedmatch = null;
   1257 addThis();
   1258 
   1259 status = inSection(168);
   1260 pattern = /ab$/;
   1261 string = 'b\nac';
   1262 actualmatch = string.match(pattern);
   1263 expectedmatch = null;
   1264 addThis();
   1265 
   1266 status = inSection(169);
   1267 pattern = /ab\Z/m;
   1268 string = 'ac\nb\n';
   1269 actualmatch = string.match(pattern);
   1270 expectedmatch = null;
   1271 addThis();
   1272 
   1273 status = inSection(170);
   1274 pattern = /ab\z/m;
   1275 string = 'ac\nb\n';
   1276 actualmatch = string.match(pattern);
   1277 expectedmatch = null;
   1278 addThis();
   1279 
   1280 status = inSection(171);
   1281 pattern = /ab$/m;
   1282 string = 'ac\nb\n';
   1283 actualmatch = string.match(pattern);
   1284 expectedmatch = null;
   1285 addThis();
   1286 
   1287 status = inSection(172);
   1288 pattern = /ab\Z/m;
   1289 string = 'b\nac\n';
   1290 actualmatch = string.match(pattern);
   1291 expectedmatch = null;
   1292 addThis();
   1293 
   1294 status = inSection(173);
   1295 pattern = /ab\z/m;
   1296 string = 'b\nac\n';
   1297 actualmatch = string.match(pattern);
   1298 expectedmatch = null;
   1299 addThis();
   1300 
   1301 status = inSection(174);
   1302 pattern = /ab$/m;
   1303 string = 'b\nac\n';
   1304 actualmatch = string.match(pattern);
   1305 expectedmatch = null;
   1306 addThis();
   1307 
   1308 status = inSection(175);
   1309 pattern = /ab\Z/m;
   1310 string = 'b\nac';
   1311 actualmatch = string.match(pattern);
   1312 expectedmatch = null;
   1313 addThis();
   1314 
   1315 status = inSection(176);
   1316 pattern = /ab\z/m;
   1317 string = 'b\nac';
   1318 actualmatch = string.match(pattern);
   1319 expectedmatch = null;
   1320 addThis();
   1321 
   1322 status = inSection(177);
   1323 pattern = /ab$/m;
   1324 string = 'b\nac';
   1325 actualmatch = string.match(pattern);
   1326 expectedmatch = null;
   1327 addThis();
   1328 
   1329 status = inSection(178);
   1330 pattern = /ab\Z/;
   1331 string = 'ca\nb\n';
   1332 actualmatch = string.match(pattern);
   1333 expectedmatch = null;
   1334 addThis();
   1335 
   1336 status = inSection(179);
   1337 pattern = /ab\z/;
   1338 string = 'ca\nb\n';
   1339 actualmatch = string.match(pattern);
   1340 expectedmatch = null;
   1341 addThis();
   1342 
   1343 status = inSection(180);
   1344 pattern = /ab$/;
   1345 string = 'ca\nb\n';
   1346 actualmatch = string.match(pattern);
   1347 expectedmatch = null;
   1348 addThis();
   1349 
   1350 status = inSection(181);
   1351 pattern = /ab\Z/;
   1352 string = 'b\nca\n';
   1353 actualmatch = string.match(pattern);
   1354 expectedmatch = null;
   1355 addThis();
   1356 
   1357 status = inSection(182);
   1358 pattern = /ab\z/;
   1359 string = 'b\nca\n';
   1360 actualmatch = string.match(pattern);
   1361 expectedmatch = null;
   1362 addThis();
   1363 
   1364 status = inSection(183);
   1365 pattern = /ab$/;
   1366 string = 'b\nca\n';
   1367 actualmatch = string.match(pattern);
   1368 expectedmatch = null;
   1369 addThis();
   1370 
   1371 status = inSection(184);
   1372 pattern = /ab\Z/;
   1373 string = 'b\nca';
   1374 actualmatch = string.match(pattern);
   1375 expectedmatch = null;
   1376 addThis();
   1377 
   1378 status = inSection(185);
   1379 pattern = /ab\z/;
   1380 string = 'b\nca';
   1381 actualmatch = string.match(pattern);
   1382 expectedmatch = null;
   1383 addThis();
   1384 
   1385 status = inSection(186);
   1386 pattern = /ab$/;
   1387 string = 'b\nca';
   1388 actualmatch = string.match(pattern);
   1389 expectedmatch = null;
   1390 addThis();
   1391 
   1392 status = inSection(187);
   1393 pattern = /ab\Z/m;
   1394 string = 'ca\nb\n';
   1395 actualmatch = string.match(pattern);
   1396 expectedmatch = null;
   1397 addThis();
   1398 
   1399 status = inSection(188);
   1400 pattern = /ab\z/m;
   1401 string = 'ca\nb\n';
   1402 actualmatch = string.match(pattern);
   1403 expectedmatch = null;
   1404 addThis();
   1405 
   1406 status = inSection(189);
   1407 pattern = /ab$/m;
   1408 string = 'ca\nb\n';
   1409 actualmatch = string.match(pattern);
   1410 expectedmatch = null;
   1411 addThis();
   1412 
   1413 status = inSection(190);
   1414 pattern = /ab\Z/m;
   1415 string = 'b\nca\n';
   1416 actualmatch = string.match(pattern);
   1417 expectedmatch = null;
   1418 addThis();
   1419 
   1420 status = inSection(191);
   1421 pattern = /ab\z/m;
   1422 string = 'b\nca\n';
   1423 actualmatch = string.match(pattern);
   1424 expectedmatch = null;
   1425 addThis();
   1426 
   1427 status = inSection(192);
   1428 pattern = /ab$/m;
   1429 string = 'b\nca\n';
   1430 actualmatch = string.match(pattern);
   1431 expectedmatch = null;
   1432 addThis();
   1433 
   1434 status = inSection(193);
   1435 pattern = /ab\Z/m;
   1436 string = 'b\nca';
   1437 actualmatch = string.match(pattern);
   1438 expectedmatch = null;
   1439 addThis();
   1440 
   1441 status = inSection(194);
   1442 pattern = /ab\z/m;
   1443 string = 'b\nca';
   1444 actualmatch = string.match(pattern);
   1445 expectedmatch = null;
   1446 addThis();
   1447 
   1448 status = inSection(195);
   1449 pattern = /ab$/m;
   1450 string = 'b\nca';
   1451 actualmatch = string.match(pattern);
   1452 expectedmatch = null;
   1453 addThis();
   1454 
   1455 status = inSection(196);
   1456 pattern = /abb\Z/;
   1457 string = 'abb\nb\n';
   1458 actualmatch = string.match(pattern);
   1459 expectedmatch = null;
   1460 addThis();
   1461 
   1462 status = inSection(197);
   1463 pattern = /abb\z/;
   1464 string = 'abb\nb\n';
   1465 actualmatch = string.match(pattern);
   1466 expectedmatch = null;
   1467 addThis();
   1468 
   1469 status = inSection(198);
   1470 pattern = /abb$/;
   1471 string = 'abb\nb\n';
   1472 actualmatch = string.match(pattern);
   1473 expectedmatch = null;
   1474 addThis();
   1475 
   1476 status = inSection(199);
   1477 pattern = /abb\z/;
   1478 string = 'b\nabb\n';
   1479 actualmatch = string.match(pattern);
   1480 expectedmatch = null;
   1481 addThis();
   1482 
   1483 status = inSection(200);
   1484 pattern = /abb\z/m;
   1485 string = 'abb\nb\n';
   1486 actualmatch = string.match(pattern);
   1487 expectedmatch = null;
   1488 addThis();
   1489 
   1490 status = inSection(201);
   1491 pattern = /abb\z/m;
   1492 string = 'b\nabb\n';
   1493 actualmatch = string.match(pattern);
   1494 expectedmatch = null;
   1495 addThis();
   1496 
   1497 status = inSection(202);
   1498 pattern = /abb\Z/;
   1499 string = 'ac\nb\n';
   1500 actualmatch = string.match(pattern);
   1501 expectedmatch = null;
   1502 addThis();
   1503 
   1504 status = inSection(203);
   1505 pattern = /abb\z/;
   1506 string = 'ac\nb\n';
   1507 actualmatch = string.match(pattern);
   1508 expectedmatch = null;
   1509 addThis();
   1510 
   1511 status = inSection(204);
   1512 pattern = /abb$/;
   1513 string = 'ac\nb\n';
   1514 actualmatch = string.match(pattern);
   1515 expectedmatch = null;
   1516 addThis();
   1517 
   1518 status = inSection(205);
   1519 pattern = /abb\Z/;
   1520 string = 'b\nac\n';
   1521 actualmatch = string.match(pattern);
   1522 expectedmatch = null;
   1523 addThis();
   1524 
   1525 status = inSection(206);
   1526 pattern = /abb\z/;
   1527 string = 'b\nac\n';
   1528 actualmatch = string.match(pattern);
   1529 expectedmatch = null;
   1530 addThis();
   1531 
   1532 status = inSection(207);
   1533 pattern = /abb$/;
   1534 string = 'b\nac\n';
   1535 actualmatch = string.match(pattern);
   1536 expectedmatch = null;
   1537 addThis();
   1538 
   1539 status = inSection(208);
   1540 pattern = /abb\Z/;
   1541 string = 'b\nac';
   1542 actualmatch = string.match(pattern);
   1543 expectedmatch = null;
   1544 addThis();
   1545 
   1546 status = inSection(209);
   1547 pattern = /abb\z/;
   1548 string = 'b\nac';
   1549 actualmatch = string.match(pattern);
   1550 expectedmatch = null;
   1551 addThis();
   1552 
   1553 status = inSection(210);
   1554 pattern = /abb$/;
   1555 string = 'b\nac';
   1556 actualmatch = string.match(pattern);
   1557 expectedmatch = null;
   1558 addThis();
   1559 
   1560 status = inSection(211);
   1561 pattern = /abb\Z/m;
   1562 string = 'ac\nb\n';
   1563 actualmatch = string.match(pattern);
   1564 expectedmatch = null;
   1565 addThis();
   1566 
   1567 status = inSection(212);
   1568 pattern = /abb\z/m;
   1569 string = 'ac\nb\n';
   1570 actualmatch = string.match(pattern);
   1571 expectedmatch = null;
   1572 addThis();
   1573 
   1574 status = inSection(213);
   1575 pattern = /abb$/m;
   1576 string = 'ac\nb\n';
   1577 actualmatch = string.match(pattern);
   1578 expectedmatch = null;
   1579 addThis();
   1580 
   1581 status = inSection(214);
   1582 pattern = /abb\Z/m;
   1583 string = 'b\nac\n';
   1584 actualmatch = string.match(pattern);
   1585 expectedmatch = null;
   1586 addThis();
   1587 
   1588 status = inSection(215);
   1589 pattern = /abb\z/m;
   1590 string = 'b\nac\n';
   1591 actualmatch = string.match(pattern);
   1592 expectedmatch = null;
   1593 addThis();
   1594 
   1595 status = inSection(216);
   1596 pattern = /abb$/m;
   1597 string = 'b\nac\n';
   1598 actualmatch = string.match(pattern);
   1599 expectedmatch = null;
   1600 addThis();
   1601 
   1602 status = inSection(217);
   1603 pattern = /abb\Z/m;
   1604 string = 'b\nac';
   1605 actualmatch = string.match(pattern);
   1606 expectedmatch = null;
   1607 addThis();
   1608 
   1609 status = inSection(218);
   1610 pattern = /abb\z/m;
   1611 string = 'b\nac';
   1612 actualmatch = string.match(pattern);
   1613 expectedmatch = null;
   1614 addThis();
   1615 
   1616 status = inSection(219);
   1617 pattern = /abb$/m;
   1618 string = 'b\nac';
   1619 actualmatch = string.match(pattern);
   1620 expectedmatch = null;
   1621 addThis();
   1622 
   1623 status = inSection(220);
   1624 pattern = /abb\Z/;
   1625 string = 'ca\nb\n';
   1626 actualmatch = string.match(pattern);
   1627 expectedmatch = null;
   1628 addThis();
   1629 
   1630 status = inSection(221);
   1631 pattern = /abb\z/;
   1632 string = 'ca\nb\n';
   1633 actualmatch = string.match(pattern);
   1634 expectedmatch = null;
   1635 addThis();
   1636 
   1637 status = inSection(222);
   1638 pattern = /abb$/;
   1639 string = 'ca\nb\n';
   1640 actualmatch = string.match(pattern);
   1641 expectedmatch = null;
   1642 addThis();
   1643 
   1644 status = inSection(223);
   1645 pattern = /abb\Z/;
   1646 string = 'b\nca\n';
   1647 actualmatch = string.match(pattern);
   1648 expectedmatch = null;
   1649 addThis();
   1650 
   1651 status = inSection(224);
   1652 pattern = /abb\z/;
   1653 string = 'b\nca\n';
   1654 actualmatch = string.match(pattern);
   1655 expectedmatch = null;
   1656 addThis();
   1657 
   1658 status = inSection(225);
   1659 pattern = /abb$/;
   1660 string = 'b\nca\n';
   1661 actualmatch = string.match(pattern);
   1662 expectedmatch = null;
   1663 addThis();
   1664 
   1665 status = inSection(226);
   1666 pattern = /abb\Z/;
   1667 string = 'b\nca';
   1668 actualmatch = string.match(pattern);
   1669 expectedmatch = null;
   1670 addThis();
   1671 
   1672 status = inSection(227);
   1673 pattern = /abb\z/;
   1674 string = 'b\nca';
   1675 actualmatch = string.match(pattern);
   1676 expectedmatch = null;
   1677 addThis();
   1678 
   1679 status = inSection(228);
   1680 pattern = /abb$/;
   1681 string = 'b\nca';
   1682 actualmatch = string.match(pattern);
   1683 expectedmatch = null;
   1684 addThis();
   1685 
   1686 status = inSection(229);
   1687 pattern = /abb\Z/m;
   1688 string = 'ca\nb\n';
   1689 actualmatch = string.match(pattern);
   1690 expectedmatch = null;
   1691 addThis();
   1692 
   1693 status = inSection(230);
   1694 pattern = /abb\z/m;
   1695 string = 'ca\nb\n';
   1696 actualmatch = string.match(pattern);
   1697 expectedmatch = null;
   1698 addThis();
   1699 
   1700 status = inSection(231);
   1701 pattern = /abb$/m;
   1702 string = 'ca\nb\n';
   1703 actualmatch = string.match(pattern);
   1704 expectedmatch = null;
   1705 addThis();
   1706 
   1707 status = inSection(232);
   1708 pattern = /abb\Z/m;
   1709 string = 'b\nca\n';
   1710 actualmatch = string.match(pattern);
   1711 expectedmatch = null;
   1712 addThis();
   1713 
   1714 status = inSection(233);
   1715 pattern = /abb\z/m;
   1716 string = 'b\nca\n';
   1717 actualmatch = string.match(pattern);
   1718 expectedmatch = null;
   1719 addThis();
   1720 
   1721 status = inSection(234);
   1722 pattern = /abb$/m;
   1723 string = 'b\nca\n';
   1724 actualmatch = string.match(pattern);
   1725 expectedmatch = null;
   1726 addThis();
   1727 
   1728 status = inSection(235);
   1729 pattern = /abb\Z/m;
   1730 string = 'b\nca';
   1731 actualmatch = string.match(pattern);
   1732 expectedmatch = null;
   1733 addThis();
   1734 
   1735 status = inSection(236);
   1736 pattern = /abb\z/m;
   1737 string = 'b\nca';
   1738 actualmatch = string.match(pattern);
   1739 expectedmatch = null;
   1740 addThis();
   1741 
   1742 status = inSection(237);
   1743 pattern = /abb$/m;
   1744 string = 'b\nca';
   1745 actualmatch = string.match(pattern);
   1746 expectedmatch = null;
   1747 addThis();
   1748 
   1749 status = inSection(238);
   1750 pattern = /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/;
   1751 string = 'x';
   1752 actualmatch = string.match(pattern);
   1753 expectedmatch = null;
   1754 addThis();
   1755 
   1756 status = inSection(239);
   1757 pattern = /\GX.*X/;
   1758 string = 'aaaXbX';
   1759 actualmatch = string.match(pattern);
   1760 expectedmatch = null;
   1761 addThis();
   1762 
   1763 status = inSection(240);
   1764 pattern = /\.c(pp|xx|c)?$/i;
   1765 string = 'Changes';
   1766 actualmatch = string.match(pattern);
   1767 expectedmatch = null;
   1768 addThis();
   1769 
   1770 status = inSection(241);
   1771 pattern = /^([a-z]:)/;
   1772 string = 'C:/';
   1773 actualmatch = string.match(pattern);
   1774 expectedmatch = null;
   1775 addThis();
   1776 
   1777 status = inSection(242);
   1778 pattern = /(\w)?(abc)\1b/;
   1779 string = 'abcab';
   1780 actualmatch = string.match(pattern);
   1781 expectedmatch = null;
   1782 addThis();
   1783 
   1784 /* ECMA doesn't support (?(
   1785 status = inSection(243);
   1786 pattern = /^(a)?(?(1)a|b)+$/;
   1787 string = 'a';
   1788 actualmatch = string.match(pattern);
   1789 expectedmatch = null;
   1790 addThis();
   1791 */
   1792 
   1793 
   1794 
   1795 //-----------------------------------------------------------------------------
   1796 test();
   1797 //-----------------------------------------------------------------------------
   1798 
   1799 
   1800 
   1801 function addThis()
   1802 {
   1803   if(omitCurrentSection())
   1804     return;
   1805 
   1806   statusmessages[i] = status;
   1807   patterns[i] = pattern;
   1808   strings[i] = string;
   1809   actualmatches[i] = actualmatch;
   1810   expectedmatches[i] = expectedmatch;
   1811   i++;
   1812 }
   1813 
   1814 
   1815 function omitCurrentSection()
   1816 {
   1817   try
   1818   {
   1819     // current section number is in global status variable
   1820     var n = status.match(/(\d+)/)[1];
   1821     return ((n < cnLBOUND) || (n > cnUBOUND));
   1822   }
   1823   catch(e)
   1824   {
   1825     return false;
   1826   }
   1827 }
   1828 
   1829 
   1830 function test()
   1831 {
   1832   enterFunc ('test');
   1833   printBugNumber (bug);
   1834   printStatus (summary);
   1835   testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
   1836   exitFunc ('test');
   1837 }
   1838