js/src/tests/ecma_3/RegExp/perlstress-001.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/tests/ecma_3/RegExp/perlstress-001.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,3196 @@
     1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +
     1.9 +/*
    1.10 + *
    1.11 + * Date:    2002-07-07
    1.12 + * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine.
    1.13 + * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested.
    1.14 + *
    1.15 + * This test was created by running various patterns and strings through the
    1.16 + * Perl 5 RegExp engine. We saved the results below to test the JS engine.
    1.17 + *
    1.18 + * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented
    1.19 + * out such sections altogether, or modified them to fit what we expect from JS.
    1.20 + *
    1.21 + * EXAMPLES:
    1.22 + *
    1.23 + * - In JS, regexp captures (/(a) etc./) must hold |undefined| if not used.
    1.24 + *   See http://bugzilla.mozilla.org/show_bug.cgi?id=123437.
    1.25 + *   By contrast, in Perl, unmatched captures hold the empty string.
    1.26 + *   We have modified such sections accordingly. Example:
    1.27 +
    1.28 + pattern = /^([^a-z])|(\^)$/;
    1.29 + string = '.';
    1.30 + actualmatch = string.match(pattern);
    1.31 + //expectedmatch = Array('.', '.', '');        <<<--- Perl
    1.32 + expectedmatch = Array('.', '.', undefined); <<<--- JS
    1.33 + addThis();
    1.34 +
    1.35 +
    1.36 + * - In JS, you can't refer to a capture before it's encountered & completed
    1.37 + *
    1.38 + * - Perl supports ] & ^] inside a [], ECMA does not
    1.39 + *
    1.40 + * - ECMA does support (?: (?= and (?! operators, but doesn't support (?<  etc.
    1.41 + *
    1.42 + * - ECMA doesn't support (?imsx or (?-imsx
    1.43 + *
    1.44 + * - ECMA doesn't support (?(condition)
    1.45 + *
    1.46 + * - Perl has \Z has end-of-line, ECMA doesn't
    1.47 + *
    1.48 + * - In ECMA, ^ matches only the empty string before the first character
    1.49 + *
    1.50 + * - In ECMA, $ matches only the empty string at end of input (unless multiline)
    1.51 + *
    1.52 + * - ECMA spec says that each atom in a range must be a single character
    1.53 + *
    1.54 + * - ECMA doesn't support \A
    1.55 + *
    1.56 + * - ECMA doesn't have rules for [:
    1.57 + *
    1.58 + */
    1.59 +//-----------------------------------------------------------------------------
    1.60 +var i = 0;
    1.61 +var BUGNUMBER = 85721;
    1.62 +var summary = 'Testing regular expression edge cases';
    1.63 +var cnSingleSpace = ' ';
    1.64 +var status = '';
    1.65 +var statusmessages = new Array();
    1.66 +var pattern = '';
    1.67 +var patterns = new Array();
    1.68 +var string = '';
    1.69 +var strings = new Array();
    1.70 +var actualmatch = '';
    1.71 +var actualmatches = new Array();
    1.72 +var expectedmatch = '';
    1.73 +var expectedmatches = new Array();
    1.74 +var cnLBOUND = 1;
    1.75 +var cnUBOUND = 1000;
    1.76 +
    1.77 +
    1.78 +status = inSection(1);
    1.79 +pattern = /abc/;
    1.80 +string = 'abc';
    1.81 +actualmatch = string.match(pattern);
    1.82 +expectedmatch = Array('abc');
    1.83 +addThis();
    1.84 +
    1.85 +status = inSection(2);
    1.86 +pattern = /abc/;
    1.87 +string = 'xabcy';
    1.88 +actualmatch = string.match(pattern);
    1.89 +expectedmatch = Array('abc');
    1.90 +addThis();
    1.91 +
    1.92 +status = inSection(3);
    1.93 +pattern = /abc/;
    1.94 +string = 'ababc';
    1.95 +actualmatch = string.match(pattern);
    1.96 +expectedmatch = Array('abc');
    1.97 +addThis();
    1.98 +
    1.99 +status = inSection(4);
   1.100 +pattern = /ab*c/;
   1.101 +string = 'abc';
   1.102 +actualmatch = string.match(pattern);
   1.103 +expectedmatch = Array('abc');
   1.104 +addThis();
   1.105 +
   1.106 +status = inSection(5);
   1.107 +pattern = /ab*bc/;
   1.108 +string = 'abc';
   1.109 +actualmatch = string.match(pattern);
   1.110 +expectedmatch = Array('abc');
   1.111 +addThis();
   1.112 +
   1.113 +status = inSection(6);
   1.114 +pattern = /ab*bc/;
   1.115 +string = 'abbc';
   1.116 +actualmatch = string.match(pattern);
   1.117 +expectedmatch = Array('abbc');
   1.118 +addThis();
   1.119 +
   1.120 +status = inSection(7);
   1.121 +pattern = /ab*bc/;
   1.122 +string = 'abbbbc';
   1.123 +actualmatch = string.match(pattern);
   1.124 +expectedmatch = Array('abbbbc');
   1.125 +addThis();
   1.126 +
   1.127 +status = inSection(8);
   1.128 +pattern = /.{1}/;
   1.129 +string = 'abbbbc';
   1.130 +actualmatch = string.match(pattern);
   1.131 +expectedmatch = Array('a');
   1.132 +addThis();
   1.133 +
   1.134 +status = inSection(9);
   1.135 +pattern = /.{3,4}/;
   1.136 +string = 'abbbbc';
   1.137 +actualmatch = string.match(pattern);
   1.138 +expectedmatch = Array('abbb');
   1.139 +addThis();
   1.140 +
   1.141 +status = inSection(10);
   1.142 +pattern = /ab{0,}bc/;
   1.143 +string = 'abbbbc';
   1.144 +actualmatch = string.match(pattern);
   1.145 +expectedmatch = Array('abbbbc');
   1.146 +addThis();
   1.147 +
   1.148 +status = inSection(11);
   1.149 +pattern = /ab+bc/;
   1.150 +string = 'abbc';
   1.151 +actualmatch = string.match(pattern);
   1.152 +expectedmatch = Array('abbc');
   1.153 +addThis();
   1.154 +
   1.155 +status = inSection(12);
   1.156 +pattern = /ab+bc/;
   1.157 +string = 'abbbbc';
   1.158 +actualmatch = string.match(pattern);
   1.159 +expectedmatch = Array('abbbbc');
   1.160 +addThis();
   1.161 +
   1.162 +status = inSection(13);
   1.163 +pattern = /ab{1,}bc/;
   1.164 +string = 'abbbbc';
   1.165 +actualmatch = string.match(pattern);
   1.166 +expectedmatch = Array('abbbbc');
   1.167 +addThis();
   1.168 +
   1.169 +status = inSection(14);
   1.170 +pattern = /ab{1,3}bc/;
   1.171 +string = 'abbbbc';
   1.172 +actualmatch = string.match(pattern);
   1.173 +expectedmatch = Array('abbbbc');
   1.174 +addThis();
   1.175 +
   1.176 +status = inSection(15);
   1.177 +pattern = /ab{3,4}bc/;
   1.178 +string = 'abbbbc';
   1.179 +actualmatch = string.match(pattern);
   1.180 +expectedmatch = Array('abbbbc');
   1.181 +addThis();
   1.182 +
   1.183 +status = inSection(16);
   1.184 +pattern = /ab?bc/;
   1.185 +string = 'abbc';
   1.186 +actualmatch = string.match(pattern);
   1.187 +expectedmatch = Array('abbc');
   1.188 +addThis();
   1.189 +
   1.190 +status = inSection(17);
   1.191 +pattern = /ab?bc/;
   1.192 +string = 'abc';
   1.193 +actualmatch = string.match(pattern);
   1.194 +expectedmatch = Array('abc');
   1.195 +addThis();
   1.196 +
   1.197 +status = inSection(18);
   1.198 +pattern = /ab{0,1}bc/;
   1.199 +string = 'abc';
   1.200 +actualmatch = string.match(pattern);
   1.201 +expectedmatch = Array('abc');
   1.202 +addThis();
   1.203 +
   1.204 +status = inSection(19);
   1.205 +pattern = /ab?c/;
   1.206 +string = 'abc';
   1.207 +actualmatch = string.match(pattern);
   1.208 +expectedmatch = Array('abc');
   1.209 +addThis();
   1.210 +
   1.211 +status = inSection(20);
   1.212 +pattern = /ab{0,1}c/;
   1.213 +string = 'abc';
   1.214 +actualmatch = string.match(pattern);
   1.215 +expectedmatch = Array('abc');
   1.216 +addThis();
   1.217 +
   1.218 +status = inSection(21);
   1.219 +pattern = /^abc$/;
   1.220 +string = 'abc';
   1.221 +actualmatch = string.match(pattern);
   1.222 +expectedmatch = Array('abc');
   1.223 +addThis();
   1.224 +
   1.225 +status = inSection(22);
   1.226 +pattern = /^abc/;
   1.227 +string = 'abcc';
   1.228 +actualmatch = string.match(pattern);
   1.229 +expectedmatch = Array('abc');
   1.230 +addThis();
   1.231 +
   1.232 +status = inSection(23);
   1.233 +pattern = /abc$/;
   1.234 +string = 'aabc';
   1.235 +actualmatch = string.match(pattern);
   1.236 +expectedmatch = Array('abc');
   1.237 +addThis();
   1.238 +
   1.239 +status = inSection(24);
   1.240 +pattern = /^/;
   1.241 +string = 'abc';
   1.242 +actualmatch = string.match(pattern);
   1.243 +expectedmatch = Array('');
   1.244 +addThis();
   1.245 +
   1.246 +status = inSection(25);
   1.247 +pattern = /$/;
   1.248 +string = 'abc';
   1.249 +actualmatch = string.match(pattern);
   1.250 +expectedmatch = Array('');
   1.251 +addThis();
   1.252 +
   1.253 +status = inSection(26);
   1.254 +pattern = /a.c/;
   1.255 +string = 'abc';
   1.256 +actualmatch = string.match(pattern);
   1.257 +expectedmatch = Array('abc');
   1.258 +addThis();
   1.259 +
   1.260 +status = inSection(27);
   1.261 +pattern = /a.c/;
   1.262 +string = 'axc';
   1.263 +actualmatch = string.match(pattern);
   1.264 +expectedmatch = Array('axc');
   1.265 +addThis();
   1.266 +
   1.267 +status = inSection(28);
   1.268 +pattern = /a.*c/;
   1.269 +string = 'axyzc';
   1.270 +actualmatch = string.match(pattern);
   1.271 +expectedmatch = Array('axyzc');
   1.272 +addThis();
   1.273 +
   1.274 +status = inSection(29);
   1.275 +pattern = /a[bc]d/;
   1.276 +string = 'abd';
   1.277 +actualmatch = string.match(pattern);
   1.278 +expectedmatch = Array('abd');
   1.279 +addThis();
   1.280 +
   1.281 +status = inSection(30);
   1.282 +pattern = /a[b-d]e/;
   1.283 +string = 'ace';
   1.284 +actualmatch = string.match(pattern);
   1.285 +expectedmatch = Array('ace');
   1.286 +addThis();
   1.287 +
   1.288 +status = inSection(31);
   1.289 +pattern = /a[b-d]/;
   1.290 +string = 'aac';
   1.291 +actualmatch = string.match(pattern);
   1.292 +expectedmatch = Array('ac');
   1.293 +addThis();
   1.294 +
   1.295 +status = inSection(32);
   1.296 +pattern = /a[-b]/;
   1.297 +string = 'a-';
   1.298 +actualmatch = string.match(pattern);
   1.299 +expectedmatch = Array('a-');
   1.300 +addThis();
   1.301 +
   1.302 +status = inSection(33);
   1.303 +pattern = /a[b-]/;
   1.304 +string = 'a-';
   1.305 +actualmatch = string.match(pattern);
   1.306 +expectedmatch = Array('a-');
   1.307 +addThis();
   1.308 +
   1.309 +status = inSection(34);
   1.310 +pattern = /a]/;
   1.311 +string = 'a]';
   1.312 +actualmatch = string.match(pattern);
   1.313 +expectedmatch = Array('a]');
   1.314 +addThis();
   1.315 +
   1.316 +/* Perl supports ] & ^] inside a [], ECMA does not
   1.317 +   pattern = /a[]]b/;
   1.318 +   status = inSection(35);
   1.319 +   string = 'a]b';
   1.320 +   actualmatch = string.match(pattern);
   1.321 +   expectedmatch = Array('a]b');
   1.322 +   addThis();
   1.323 +*/
   1.324 +
   1.325 +status = inSection(36);
   1.326 +pattern = /a[^bc]d/;
   1.327 +string = 'aed';
   1.328 +actualmatch = string.match(pattern);
   1.329 +expectedmatch = Array('aed');
   1.330 +addThis();
   1.331 +
   1.332 +status = inSection(37);
   1.333 +pattern = /a[^-b]c/;
   1.334 +string = 'adc';
   1.335 +actualmatch = string.match(pattern);
   1.336 +expectedmatch = Array('adc');
   1.337 +addThis();
   1.338 +
   1.339 +/* Perl supports ] & ^] inside a [], ECMA does not
   1.340 +   status = inSection(38);
   1.341 +   pattern = /a[^]b]c/;
   1.342 +   string = 'adc';
   1.343 +   actualmatch = string.match(pattern);
   1.344 +   expectedmatch = Array('adc');
   1.345 +   addThis();
   1.346 +*/
   1.347 +
   1.348 +status = inSection(39);
   1.349 +pattern = /\ba\b/;
   1.350 +string = 'a-';
   1.351 +actualmatch = string.match(pattern);
   1.352 +expectedmatch = Array('a');
   1.353 +addThis();
   1.354 +
   1.355 +status = inSection(40);
   1.356 +pattern = /\ba\b/;
   1.357 +string = '-a';
   1.358 +actualmatch = string.match(pattern);
   1.359 +expectedmatch = Array('a');
   1.360 +addThis();
   1.361 +
   1.362 +status = inSection(41);
   1.363 +pattern = /\ba\b/;
   1.364 +string = '-a-';
   1.365 +actualmatch = string.match(pattern);
   1.366 +expectedmatch = Array('a');
   1.367 +addThis();
   1.368 +
   1.369 +status = inSection(42);
   1.370 +pattern = /\By\b/;
   1.371 +string = 'xy';
   1.372 +actualmatch = string.match(pattern);
   1.373 +expectedmatch = Array('y');
   1.374 +addThis();
   1.375 +
   1.376 +status = inSection(43);
   1.377 +pattern = /\by\B/;
   1.378 +string = 'yz';
   1.379 +actualmatch = string.match(pattern);
   1.380 +expectedmatch = Array('y');
   1.381 +addThis();
   1.382 +
   1.383 +status = inSection(44);
   1.384 +pattern = /\By\B/;
   1.385 +string = 'xyz';
   1.386 +actualmatch = string.match(pattern);
   1.387 +expectedmatch = Array('y');
   1.388 +addThis();
   1.389 +
   1.390 +status = inSection(45);
   1.391 +pattern = /\w/;
   1.392 +string = 'a';
   1.393 +actualmatch = string.match(pattern);
   1.394 +expectedmatch = Array('a');
   1.395 +addThis();
   1.396 +
   1.397 +status = inSection(46);
   1.398 +pattern = /\W/;
   1.399 +string = '-';
   1.400 +actualmatch = string.match(pattern);
   1.401 +expectedmatch = Array('-');
   1.402 +addThis();
   1.403 +
   1.404 +status = inSection(47);
   1.405 +pattern = /a\Sb/;
   1.406 +string = 'a-b';
   1.407 +actualmatch = string.match(pattern);
   1.408 +expectedmatch = Array('a-b');
   1.409 +addThis();
   1.410 +
   1.411 +status = inSection(48);
   1.412 +pattern = /\d/;
   1.413 +string = '1';
   1.414 +actualmatch = string.match(pattern);
   1.415 +expectedmatch = Array('1');
   1.416 +addThis();
   1.417 +
   1.418 +status = inSection(49);
   1.419 +pattern = /\D/;
   1.420 +string = '-';
   1.421 +actualmatch = string.match(pattern);
   1.422 +expectedmatch = Array('-');
   1.423 +addThis();
   1.424 +
   1.425 +status = inSection(50);
   1.426 +pattern = /[\w]/;
   1.427 +string = 'a';
   1.428 +actualmatch = string.match(pattern);
   1.429 +expectedmatch = Array('a');
   1.430 +addThis();
   1.431 +
   1.432 +status = inSection(51);
   1.433 +pattern = /[\W]/;
   1.434 +string = '-';
   1.435 +actualmatch = string.match(pattern);
   1.436 +expectedmatch = Array('-');
   1.437 +addThis();
   1.438 +
   1.439 +status = inSection(52);
   1.440 +pattern = /a[\S]b/;
   1.441 +string = 'a-b';
   1.442 +actualmatch = string.match(pattern);
   1.443 +expectedmatch = Array('a-b');
   1.444 +addThis();
   1.445 +
   1.446 +status = inSection(53);
   1.447 +pattern = /[\d]/;
   1.448 +string = '1';
   1.449 +actualmatch = string.match(pattern);
   1.450 +expectedmatch = Array('1');
   1.451 +addThis();
   1.452 +
   1.453 +status = inSection(54);
   1.454 +pattern = /[\D]/;
   1.455 +string = '-';
   1.456 +actualmatch = string.match(pattern);
   1.457 +expectedmatch = Array('-');
   1.458 +addThis();
   1.459 +
   1.460 +status = inSection(55);
   1.461 +pattern = /ab|cd/;
   1.462 +string = 'abc';
   1.463 +actualmatch = string.match(pattern);
   1.464 +expectedmatch = Array('ab');
   1.465 +addThis();
   1.466 +
   1.467 +status = inSection(56);
   1.468 +pattern = /ab|cd/;
   1.469 +string = 'abcd';
   1.470 +actualmatch = string.match(pattern);
   1.471 +expectedmatch = Array('ab');
   1.472 +addThis();
   1.473 +
   1.474 +status = inSection(57);
   1.475 +pattern = /()ef/;
   1.476 +string = 'def';
   1.477 +actualmatch = string.match(pattern);
   1.478 +expectedmatch = Array('ef', '');
   1.479 +addThis();
   1.480 +
   1.481 +status = inSection(58);
   1.482 +pattern = /a\(b/;
   1.483 +string = 'a(b';
   1.484 +actualmatch = string.match(pattern);
   1.485 +expectedmatch = Array('a(b');
   1.486 +addThis();
   1.487 +
   1.488 +status = inSection(59);
   1.489 +pattern = /a\(*b/;
   1.490 +string = 'ab';
   1.491 +actualmatch = string.match(pattern);
   1.492 +expectedmatch = Array('ab');
   1.493 +addThis();
   1.494 +
   1.495 +status = inSection(60);
   1.496 +pattern = /a\(*b/;
   1.497 +string = 'a((b';
   1.498 +actualmatch = string.match(pattern);
   1.499 +expectedmatch = Array('a((b');
   1.500 +addThis();
   1.501 +
   1.502 +status = inSection(61);
   1.503 +pattern = /a\\b/;
   1.504 +string = 'a\\b';
   1.505 +actualmatch = string.match(pattern);
   1.506 +expectedmatch = Array('a\\b');
   1.507 +addThis();
   1.508 +
   1.509 +status = inSection(62);
   1.510 +pattern = /((a))/;
   1.511 +string = 'abc';
   1.512 +actualmatch = string.match(pattern);
   1.513 +expectedmatch = Array('a', 'a', 'a');
   1.514 +addThis();
   1.515 +
   1.516 +status = inSection(63);
   1.517 +pattern = /(a)b(c)/;
   1.518 +string = 'abc';
   1.519 +actualmatch = string.match(pattern);
   1.520 +expectedmatch = Array('abc', 'a', 'c');
   1.521 +addThis();
   1.522 +
   1.523 +status = inSection(64);
   1.524 +pattern = /a+b+c/;
   1.525 +string = 'aabbabc';
   1.526 +actualmatch = string.match(pattern);
   1.527 +expectedmatch = Array('abc');
   1.528 +addThis();
   1.529 +
   1.530 +status = inSection(65);
   1.531 +pattern = /a{1,}b{1,}c/;
   1.532 +string = 'aabbabc';
   1.533 +actualmatch = string.match(pattern);
   1.534 +expectedmatch = Array('abc');
   1.535 +addThis();
   1.536 +
   1.537 +status = inSection(66);
   1.538 +pattern = /a.+?c/;
   1.539 +string = 'abcabc';
   1.540 +actualmatch = string.match(pattern);
   1.541 +expectedmatch = Array('abc');
   1.542 +addThis();
   1.543 +
   1.544 +status = inSection(67);
   1.545 +pattern = /(a+|b)*/;
   1.546 +string = 'ab';
   1.547 +actualmatch = string.match(pattern);
   1.548 +expectedmatch = Array('ab', 'b');
   1.549 +addThis();
   1.550 +
   1.551 +status = inSection(68);
   1.552 +pattern = /(a+|b){0,}/;
   1.553 +string = 'ab';
   1.554 +actualmatch = string.match(pattern);
   1.555 +expectedmatch = Array('ab', 'b');
   1.556 +addThis();
   1.557 +
   1.558 +status = inSection(69);
   1.559 +pattern = /(a+|b)+/;
   1.560 +string = 'ab';
   1.561 +actualmatch = string.match(pattern);
   1.562 +expectedmatch = Array('ab', 'b');
   1.563 +addThis();
   1.564 +
   1.565 +status = inSection(70);
   1.566 +pattern = /(a+|b){1,}/;
   1.567 +string = 'ab';
   1.568 +actualmatch = string.match(pattern);
   1.569 +expectedmatch = Array('ab', 'b');
   1.570 +addThis();
   1.571 +
   1.572 +status = inSection(71);
   1.573 +pattern = /(a+|b)?/;
   1.574 +string = 'ab';
   1.575 +actualmatch = string.match(pattern);
   1.576 +expectedmatch = Array('a', 'a');
   1.577 +addThis();
   1.578 +
   1.579 +status = inSection(72);
   1.580 +pattern = /(a+|b){0,1}/;
   1.581 +string = 'ab';
   1.582 +actualmatch = string.match(pattern);
   1.583 +expectedmatch = Array('a', 'a');
   1.584 +addThis();
   1.585 +
   1.586 +status = inSection(73);
   1.587 +pattern = /[^ab]*/;
   1.588 +string = 'cde';
   1.589 +actualmatch = string.match(pattern);
   1.590 +expectedmatch = Array('cde');
   1.591 +addThis();
   1.592 +
   1.593 +status = inSection(74);
   1.594 +pattern = /([abc])*d/;
   1.595 +string = 'abbbcd';
   1.596 +actualmatch = string.match(pattern);
   1.597 +expectedmatch = Array('abbbcd', 'c');
   1.598 +addThis();
   1.599 +
   1.600 +status = inSection(75);
   1.601 +pattern = /([abc])*bcd/;
   1.602 +string = 'abcd';
   1.603 +actualmatch = string.match(pattern);
   1.604 +expectedmatch = Array('abcd', 'a');
   1.605 +addThis();
   1.606 +
   1.607 +status = inSection(76);
   1.608 +pattern = /a|b|c|d|e/;
   1.609 +string = 'e';
   1.610 +actualmatch = string.match(pattern);
   1.611 +expectedmatch = Array('e');
   1.612 +addThis();
   1.613 +
   1.614 +status = inSection(77);
   1.615 +pattern = /(a|b|c|d|e)f/;
   1.616 +string = 'ef';
   1.617 +actualmatch = string.match(pattern);
   1.618 +expectedmatch = Array('ef', 'e');
   1.619 +addThis();
   1.620 +
   1.621 +status = inSection(78);
   1.622 +pattern = /abcd*efg/;
   1.623 +string = 'abcdefg';
   1.624 +actualmatch = string.match(pattern);
   1.625 +expectedmatch = Array('abcdefg');
   1.626 +addThis();
   1.627 +
   1.628 +status = inSection(79);
   1.629 +pattern = /ab*/;
   1.630 +string = 'xabyabbbz';
   1.631 +actualmatch = string.match(pattern);
   1.632 +expectedmatch = Array('ab');
   1.633 +addThis();
   1.634 +
   1.635 +status = inSection(80);
   1.636 +pattern = /ab*/;
   1.637 +string = 'xayabbbz';
   1.638 +actualmatch = string.match(pattern);
   1.639 +expectedmatch = Array('a');
   1.640 +addThis();
   1.641 +
   1.642 +status = inSection(81);
   1.643 +pattern = /(ab|cd)e/;
   1.644 +string = 'abcde';
   1.645 +actualmatch = string.match(pattern);
   1.646 +expectedmatch = Array('cde', 'cd');
   1.647 +addThis();
   1.648 +
   1.649 +status = inSection(82);
   1.650 +pattern = /[abhgefdc]ij/;
   1.651 +string = 'hij';
   1.652 +actualmatch = string.match(pattern);
   1.653 +expectedmatch = Array('hij');
   1.654 +addThis();
   1.655 +
   1.656 +status = inSection(83);
   1.657 +pattern = /(abc|)ef/;
   1.658 +string = 'abcdef';
   1.659 +actualmatch = string.match(pattern);
   1.660 +expectedmatch = Array('ef', '');
   1.661 +addThis();
   1.662 +
   1.663 +status = inSection(84);
   1.664 +pattern = /(a|b)c*d/;
   1.665 +string = 'abcd';
   1.666 +actualmatch = string.match(pattern);
   1.667 +expectedmatch = Array('bcd', 'b');
   1.668 +addThis();
   1.669 +
   1.670 +status = inSection(85);
   1.671 +pattern = /(ab|ab*)bc/;
   1.672 +string = 'abc';
   1.673 +actualmatch = string.match(pattern);
   1.674 +expectedmatch = Array('abc', 'a');
   1.675 +addThis();
   1.676 +
   1.677 +status = inSection(86);
   1.678 +pattern = /a([bc]*)c*/;
   1.679 +string = 'abc';
   1.680 +actualmatch = string.match(pattern);
   1.681 +expectedmatch = Array('abc', 'bc');
   1.682 +addThis();
   1.683 +
   1.684 +status = inSection(87);
   1.685 +pattern = /a([bc]*)(c*d)/;
   1.686 +string = 'abcd';
   1.687 +actualmatch = string.match(pattern);
   1.688 +expectedmatch = Array('abcd', 'bc', 'd');
   1.689 +addThis();
   1.690 +
   1.691 +status = inSection(88);
   1.692 +pattern = /a([bc]+)(c*d)/;
   1.693 +string = 'abcd';
   1.694 +actualmatch = string.match(pattern);
   1.695 +expectedmatch = Array('abcd', 'bc', 'd');
   1.696 +addThis();
   1.697 +
   1.698 +status = inSection(89);
   1.699 +pattern = /a([bc]*)(c+d)/;
   1.700 +string = 'abcd';
   1.701 +actualmatch = string.match(pattern);
   1.702 +expectedmatch = Array('abcd', 'b', 'cd');
   1.703 +addThis();
   1.704 +
   1.705 +status = inSection(90);
   1.706 +pattern = /a[bcd]*dcdcde/;
   1.707 +string = 'adcdcde';
   1.708 +actualmatch = string.match(pattern);
   1.709 +expectedmatch = Array('adcdcde');
   1.710 +addThis();
   1.711 +
   1.712 +status = inSection(91);
   1.713 +pattern = /(ab|a)b*c/;
   1.714 +string = 'abc';
   1.715 +actualmatch = string.match(pattern);
   1.716 +expectedmatch = Array('abc', 'ab');
   1.717 +addThis();
   1.718 +
   1.719 +status = inSection(92);
   1.720 +pattern = /((a)(b)c)(d)/;
   1.721 +string = 'abcd';
   1.722 +actualmatch = string.match(pattern);
   1.723 +expectedmatch = Array('abcd', 'abc', 'a', 'b', 'd');
   1.724 +addThis();
   1.725 +
   1.726 +status = inSection(93);
   1.727 +pattern = /[a-zA-Z_][a-zA-Z0-9_]*/;
   1.728 +string = 'alpha';
   1.729 +actualmatch = string.match(pattern);
   1.730 +expectedmatch = Array('alpha');
   1.731 +addThis();
   1.732 +
   1.733 +status = inSection(94);
   1.734 +pattern = /^a(bc+|b[eh])g|.h$/;
   1.735 +string = 'abh';
   1.736 +actualmatch = string.match(pattern);
   1.737 +expectedmatch = Array('bh', undefined);
   1.738 +addThis();
   1.739 +
   1.740 +status = inSection(95);
   1.741 +pattern = /(bc+d$|ef*g.|h?i(j|k))/;
   1.742 +string = 'effgz';
   1.743 +actualmatch = string.match(pattern);
   1.744 +expectedmatch = Array('effgz', 'effgz', undefined);
   1.745 +addThis();
   1.746 +
   1.747 +status = inSection(96);
   1.748 +pattern = /(bc+d$|ef*g.|h?i(j|k))/;
   1.749 +string = 'ij';
   1.750 +actualmatch = string.match(pattern);
   1.751 +expectedmatch = Array('ij', 'ij', 'j');
   1.752 +addThis();
   1.753 +
   1.754 +status = inSection(97);
   1.755 +pattern = /(bc+d$|ef*g.|h?i(j|k))/;
   1.756 +string = 'reffgz';
   1.757 +actualmatch = string.match(pattern);
   1.758 +expectedmatch = Array('effgz', 'effgz', undefined);
   1.759 +addThis();
   1.760 +
   1.761 +status = inSection(98);
   1.762 +pattern = /((((((((((a))))))))))/;
   1.763 +string = 'a';
   1.764 +actualmatch = string.match(pattern);
   1.765 +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
   1.766 +addThis();
   1.767 +
   1.768 +status = inSection(99);
   1.769 +pattern = /((((((((((a))))))))))\10/;
   1.770 +string = 'aa';
   1.771 +actualmatch = string.match(pattern);
   1.772 +expectedmatch = Array('aa', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
   1.773 +addThis();
   1.774 +
   1.775 +status = inSection(100);
   1.776 +pattern = /((((((((((a))))))))))/;
   1.777 +string = 'a!';
   1.778 +actualmatch = string.match(pattern);
   1.779 +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
   1.780 +addThis();
   1.781 +
   1.782 +status = inSection(101);
   1.783 +pattern = /(((((((((a)))))))))/;
   1.784 +string = 'a';
   1.785 +actualmatch = string.match(pattern);
   1.786 +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');
   1.787 +addThis();
   1.788 +
   1.789 +status = inSection(102);
   1.790 +pattern = /(.*)c(.*)/;
   1.791 +string = 'abcde';
   1.792 +actualmatch = string.match(pattern);
   1.793 +expectedmatch = Array('abcde', 'ab', 'de');
   1.794 +addThis();
   1.795 +
   1.796 +status = inSection(103);
   1.797 +pattern = /abcd/;
   1.798 +string = 'abcd';
   1.799 +actualmatch = string.match(pattern);
   1.800 +expectedmatch = Array('abcd');
   1.801 +addThis();
   1.802 +
   1.803 +status = inSection(104);
   1.804 +pattern = /a(bc)d/;
   1.805 +string = 'abcd';
   1.806 +actualmatch = string.match(pattern);
   1.807 +expectedmatch = Array('abcd', 'bc');
   1.808 +addThis();
   1.809 +
   1.810 +status = inSection(105);
   1.811 +pattern = /a[-]?c/;
   1.812 +string = 'ac';
   1.813 +actualmatch = string.match(pattern);
   1.814 +expectedmatch = Array('ac');
   1.815 +addThis();
   1.816 +
   1.817 +status = inSection(106);
   1.818 +pattern = /(abc)\1/;
   1.819 +string = 'abcabc';
   1.820 +actualmatch = string.match(pattern);
   1.821 +expectedmatch = Array('abcabc', 'abc');
   1.822 +addThis();
   1.823 +
   1.824 +status = inSection(107);
   1.825 +pattern = /([a-c]*)\1/;
   1.826 +string = 'abcabc';
   1.827 +actualmatch = string.match(pattern);
   1.828 +expectedmatch = Array('abcabc', 'abc');
   1.829 +addThis();
   1.830 +
   1.831 +status = inSection(108);
   1.832 +pattern = /(a)|\1/;
   1.833 +string = 'a';
   1.834 +actualmatch = string.match(pattern);
   1.835 +expectedmatch = Array('a', 'a');
   1.836 +addThis();
   1.837 +
   1.838 +status = inSection(109);
   1.839 +pattern = /(([a-c])b*?\2)*/;
   1.840 +string = 'ababbbcbc';
   1.841 +actualmatch = string.match(pattern);
   1.842 +expectedmatch = Array('ababb', 'bb', 'b');
   1.843 +addThis();
   1.844 +
   1.845 +status = inSection(110);
   1.846 +pattern = /(([a-c])b*?\2){3}/;
   1.847 +string = 'ababbbcbc';
   1.848 +actualmatch = string.match(pattern);
   1.849 +expectedmatch = Array('ababbbcbc', 'cbc', 'c');
   1.850 +addThis();
   1.851 +
   1.852 +/* Can't refer to a capture before it's encountered & completed
   1.853 +   status = inSection(111);
   1.854 +   pattern = /((\3|b)\2(a)x)+/;
   1.855 +   string = 'aaaxabaxbaaxbbax';
   1.856 +   actualmatch = string.match(pattern);
   1.857 +   expectedmatch = Array('bbax', 'bbax', 'b', 'a');
   1.858 +   addThis();
   1.859 +
   1.860 +   status = inSection(112);
   1.861 +   pattern = /((\3|b)\2(a)){2,}/;
   1.862 +   string = 'bbaababbabaaaaabbaaaabba';
   1.863 +   actualmatch = string.match(pattern);
   1.864 +   expectedmatch = Array('bbaaaabba', 'bba', 'b', 'a');
   1.865 +   addThis();
   1.866 +*/
   1.867 +
   1.868 +status = inSection(113);
   1.869 +pattern = /abc/i;
   1.870 +string = 'ABC';
   1.871 +actualmatch = string.match(pattern);
   1.872 +expectedmatch = Array('ABC');
   1.873 +addThis();
   1.874 +
   1.875 +status = inSection(114);
   1.876 +pattern = /abc/i;
   1.877 +string = 'XABCY';
   1.878 +actualmatch = string.match(pattern);
   1.879 +expectedmatch = Array('ABC');
   1.880 +addThis();
   1.881 +
   1.882 +status = inSection(115);
   1.883 +pattern = /abc/i;
   1.884 +string = 'ABABC';
   1.885 +actualmatch = string.match(pattern);
   1.886 +expectedmatch = Array('ABC');
   1.887 +addThis();
   1.888 +
   1.889 +status = inSection(116);
   1.890 +pattern = /ab*c/i;
   1.891 +string = 'ABC';
   1.892 +actualmatch = string.match(pattern);
   1.893 +expectedmatch = Array('ABC');
   1.894 +addThis();
   1.895 +
   1.896 +status = inSection(117);
   1.897 +pattern = /ab*bc/i;
   1.898 +string = 'ABC';
   1.899 +actualmatch = string.match(pattern);
   1.900 +expectedmatch = Array('ABC');
   1.901 +addThis();
   1.902 +
   1.903 +status = inSection(118);
   1.904 +pattern = /ab*bc/i;
   1.905 +string = 'ABBC';
   1.906 +actualmatch = string.match(pattern);
   1.907 +expectedmatch = Array('ABBC');
   1.908 +addThis();
   1.909 +
   1.910 +status = inSection(119);
   1.911 +pattern = /ab*?bc/i;
   1.912 +string = 'ABBBBC';
   1.913 +actualmatch = string.match(pattern);
   1.914 +expectedmatch = Array('ABBBBC');
   1.915 +addThis();
   1.916 +
   1.917 +status = inSection(120);
   1.918 +pattern = /ab{0,}?bc/i;
   1.919 +string = 'ABBBBC';
   1.920 +actualmatch = string.match(pattern);
   1.921 +expectedmatch = Array('ABBBBC');
   1.922 +addThis();
   1.923 +
   1.924 +status = inSection(121);
   1.925 +pattern = /ab+?bc/i;
   1.926 +string = 'ABBC';
   1.927 +actualmatch = string.match(pattern);
   1.928 +expectedmatch = Array('ABBC');
   1.929 +addThis();
   1.930 +
   1.931 +status = inSection(122);
   1.932 +pattern = /ab+bc/i;
   1.933 +string = 'ABBBBC';
   1.934 +actualmatch = string.match(pattern);
   1.935 +expectedmatch = Array('ABBBBC');
   1.936 +addThis();
   1.937 +
   1.938 +status = inSection(123);
   1.939 +pattern = /ab{1,}?bc/i;
   1.940 +string = 'ABBBBC';
   1.941 +actualmatch = string.match(pattern);
   1.942 +expectedmatch = Array('ABBBBC');
   1.943 +addThis();
   1.944 +
   1.945 +status = inSection(124);
   1.946 +pattern = /ab{1,3}?bc/i;
   1.947 +string = 'ABBBBC';
   1.948 +actualmatch = string.match(pattern);
   1.949 +expectedmatch = Array('ABBBBC');
   1.950 +addThis();
   1.951 +
   1.952 +status = inSection(125);
   1.953 +pattern = /ab{3,4}?bc/i;
   1.954 +string = 'ABBBBC';
   1.955 +actualmatch = string.match(pattern);
   1.956 +expectedmatch = Array('ABBBBC');
   1.957 +addThis();
   1.958 +
   1.959 +status = inSection(126);
   1.960 +pattern = /ab??bc/i;
   1.961 +string = 'ABBC';
   1.962 +actualmatch = string.match(pattern);
   1.963 +expectedmatch = Array('ABBC');
   1.964 +addThis();
   1.965 +
   1.966 +status = inSection(127);
   1.967 +pattern = /ab??bc/i;
   1.968 +string = 'ABC';
   1.969 +actualmatch = string.match(pattern);
   1.970 +expectedmatch = Array('ABC');
   1.971 +addThis();
   1.972 +
   1.973 +status = inSection(128);
   1.974 +pattern = /ab{0,1}?bc/i;
   1.975 +string = 'ABC';
   1.976 +actualmatch = string.match(pattern);
   1.977 +expectedmatch = Array('ABC');
   1.978 +addThis();
   1.979 +
   1.980 +status = inSection(129);
   1.981 +pattern = /ab??c/i;
   1.982 +string = 'ABC';
   1.983 +actualmatch = string.match(pattern);
   1.984 +expectedmatch = Array('ABC');
   1.985 +addThis();
   1.986 +
   1.987 +status = inSection(130);
   1.988 +pattern = /ab{0,1}?c/i;
   1.989 +string = 'ABC';
   1.990 +actualmatch = string.match(pattern);
   1.991 +expectedmatch = Array('ABC');
   1.992 +addThis();
   1.993 +
   1.994 +status = inSection(131);
   1.995 +pattern = /^abc$/i;
   1.996 +string = 'ABC';
   1.997 +actualmatch = string.match(pattern);
   1.998 +expectedmatch = Array('ABC');
   1.999 +addThis();
  1.1000 +
  1.1001 +status = inSection(132);
  1.1002 +pattern = /^abc/i;
  1.1003 +string = 'ABCC';
  1.1004 +actualmatch = string.match(pattern);
  1.1005 +expectedmatch = Array('ABC');
  1.1006 +addThis();
  1.1007 +
  1.1008 +status = inSection(133);
  1.1009 +pattern = /abc$/i;
  1.1010 +string = 'AABC';
  1.1011 +actualmatch = string.match(pattern);
  1.1012 +expectedmatch = Array('ABC');
  1.1013 +addThis();
  1.1014 +
  1.1015 +status = inSection(134);
  1.1016 +pattern = /^/i;
  1.1017 +string = 'ABC';
  1.1018 +actualmatch = string.match(pattern);
  1.1019 +expectedmatch = Array('');
  1.1020 +addThis();
  1.1021 +
  1.1022 +status = inSection(135);
  1.1023 +pattern = /$/i;
  1.1024 +string = 'ABC';
  1.1025 +actualmatch = string.match(pattern);
  1.1026 +expectedmatch = Array('');
  1.1027 +addThis();
  1.1028 +
  1.1029 +status = inSection(136);
  1.1030 +pattern = /a.c/i;
  1.1031 +string = 'ABC';
  1.1032 +actualmatch = string.match(pattern);
  1.1033 +expectedmatch = Array('ABC');
  1.1034 +addThis();
  1.1035 +
  1.1036 +status = inSection(137);
  1.1037 +pattern = /a.c/i;
  1.1038 +string = 'AXC';
  1.1039 +actualmatch = string.match(pattern);
  1.1040 +expectedmatch = Array('AXC');
  1.1041 +addThis();
  1.1042 +
  1.1043 +status = inSection(138);
  1.1044 +pattern = /a.*?c/i;
  1.1045 +string = 'AXYZC';
  1.1046 +actualmatch = string.match(pattern);
  1.1047 +expectedmatch = Array('AXYZC');
  1.1048 +addThis();
  1.1049 +
  1.1050 +status = inSection(139);
  1.1051 +pattern = /a[bc]d/i;
  1.1052 +string = 'ABD';
  1.1053 +actualmatch = string.match(pattern);
  1.1054 +expectedmatch = Array('ABD');
  1.1055 +addThis();
  1.1056 +
  1.1057 +status = inSection(140);
  1.1058 +pattern = /a[b-d]e/i;
  1.1059 +string = 'ACE';
  1.1060 +actualmatch = string.match(pattern);
  1.1061 +expectedmatch = Array('ACE');
  1.1062 +addThis();
  1.1063 +
  1.1064 +status = inSection(141);
  1.1065 +pattern = /a[b-d]/i;
  1.1066 +string = 'AAC';
  1.1067 +actualmatch = string.match(pattern);
  1.1068 +expectedmatch = Array('AC');
  1.1069 +addThis();
  1.1070 +
  1.1071 +status = inSection(142);
  1.1072 +pattern = /a[-b]/i;
  1.1073 +string = 'A-';
  1.1074 +actualmatch = string.match(pattern);
  1.1075 +expectedmatch = Array('A-');
  1.1076 +addThis();
  1.1077 +
  1.1078 +status = inSection(143);
  1.1079 +pattern = /a[b-]/i;
  1.1080 +string = 'A-';
  1.1081 +actualmatch = string.match(pattern);
  1.1082 +expectedmatch = Array('A-');
  1.1083 +addThis();
  1.1084 +
  1.1085 +status = inSection(144);
  1.1086 +pattern = /a]/i;
  1.1087 +string = 'A]';
  1.1088 +actualmatch = string.match(pattern);
  1.1089 +expectedmatch = Array('A]');
  1.1090 +addThis();
  1.1091 +
  1.1092 +/* Perl supports ] & ^] inside a [], ECMA does not
  1.1093 +   status = inSection(145);
  1.1094 +   pattern = /a[]]b/i;
  1.1095 +   string = 'A]B';
  1.1096 +   actualmatch = string.match(pattern);
  1.1097 +   expectedmatch = Array('A]B');
  1.1098 +   addThis();
  1.1099 +*/
  1.1100 +
  1.1101 +status = inSection(146);
  1.1102 +pattern = /a[^bc]d/i;
  1.1103 +string = 'AED';
  1.1104 +actualmatch = string.match(pattern);
  1.1105 +expectedmatch = Array('AED');
  1.1106 +addThis();
  1.1107 +
  1.1108 +status = inSection(147);
  1.1109 +pattern = /a[^-b]c/i;
  1.1110 +string = 'ADC';
  1.1111 +actualmatch = string.match(pattern);
  1.1112 +expectedmatch = Array('ADC');
  1.1113 +addThis();
  1.1114 +
  1.1115 +/* Perl supports ] & ^] inside a [], ECMA does not
  1.1116 +   status = inSection(148);
  1.1117 +   pattern = /a[^]b]c/i;
  1.1118 +   string = 'ADC';
  1.1119 +   actualmatch = string.match(pattern);
  1.1120 +   expectedmatch = Array('ADC');
  1.1121 +   addThis();
  1.1122 +*/
  1.1123 +
  1.1124 +status = inSection(149);
  1.1125 +pattern = /ab|cd/i;
  1.1126 +string = 'ABC';
  1.1127 +actualmatch = string.match(pattern);
  1.1128 +expectedmatch = Array('AB');
  1.1129 +addThis();
  1.1130 +
  1.1131 +status = inSection(150);
  1.1132 +pattern = /ab|cd/i;
  1.1133 +string = 'ABCD';
  1.1134 +actualmatch = string.match(pattern);
  1.1135 +expectedmatch = Array('AB');
  1.1136 +addThis();
  1.1137 +
  1.1138 +status = inSection(151);
  1.1139 +pattern = /()ef/i;
  1.1140 +string = 'DEF';
  1.1141 +actualmatch = string.match(pattern);
  1.1142 +expectedmatch = Array('EF', '');
  1.1143 +addThis();
  1.1144 +
  1.1145 +status = inSection(152);
  1.1146 +pattern = /a\(b/i;
  1.1147 +string = 'A(B';
  1.1148 +actualmatch = string.match(pattern);
  1.1149 +expectedmatch = Array('A(B');
  1.1150 +addThis();
  1.1151 +
  1.1152 +status = inSection(153);
  1.1153 +pattern = /a\(*b/i;
  1.1154 +string = 'AB';
  1.1155 +actualmatch = string.match(pattern);
  1.1156 +expectedmatch = Array('AB');
  1.1157 +addThis();
  1.1158 +
  1.1159 +status = inSection(154);
  1.1160 +pattern = /a\(*b/i;
  1.1161 +string = 'A((B';
  1.1162 +actualmatch = string.match(pattern);
  1.1163 +expectedmatch = Array('A((B');
  1.1164 +addThis();
  1.1165 +
  1.1166 +status = inSection(155);
  1.1167 +pattern = /a\\b/i;
  1.1168 +string = 'A\\B';
  1.1169 +actualmatch = string.match(pattern);
  1.1170 +expectedmatch = Array('A\\B');
  1.1171 +addThis();
  1.1172 +
  1.1173 +status = inSection(156);
  1.1174 +pattern = /((a))/i;
  1.1175 +string = 'ABC';
  1.1176 +actualmatch = string.match(pattern);
  1.1177 +expectedmatch = Array('A', 'A', 'A');
  1.1178 +addThis();
  1.1179 +
  1.1180 +status = inSection(157);
  1.1181 +pattern = /(a)b(c)/i;
  1.1182 +string = 'ABC';
  1.1183 +actualmatch = string.match(pattern);
  1.1184 +expectedmatch = Array('ABC', 'A', 'C');
  1.1185 +addThis();
  1.1186 +
  1.1187 +status = inSection(158);
  1.1188 +pattern = /a+b+c/i;
  1.1189 +string = 'AABBABC';
  1.1190 +actualmatch = string.match(pattern);
  1.1191 +expectedmatch = Array('ABC');
  1.1192 +addThis();
  1.1193 +
  1.1194 +status = inSection(159);
  1.1195 +pattern = /a{1,}b{1,}c/i;
  1.1196 +string = 'AABBABC';
  1.1197 +actualmatch = string.match(pattern);
  1.1198 +expectedmatch = Array('ABC');
  1.1199 +addThis();
  1.1200 +
  1.1201 +status = inSection(160);
  1.1202 +pattern = /a.+?c/i;
  1.1203 +string = 'ABCABC';
  1.1204 +actualmatch = string.match(pattern);
  1.1205 +expectedmatch = Array('ABC');
  1.1206 +addThis();
  1.1207 +
  1.1208 +status = inSection(161);
  1.1209 +pattern = /a.*?c/i;
  1.1210 +string = 'ABCABC';
  1.1211 +actualmatch = string.match(pattern);
  1.1212 +expectedmatch = Array('ABC');
  1.1213 +addThis();
  1.1214 +
  1.1215 +status = inSection(162);
  1.1216 +pattern = /a.{0,5}?c/i;
  1.1217 +string = 'ABCABC';
  1.1218 +actualmatch = string.match(pattern);
  1.1219 +expectedmatch = Array('ABC');
  1.1220 +addThis();
  1.1221 +
  1.1222 +status = inSection(163);
  1.1223 +pattern = /(a+|b)*/i;
  1.1224 +string = 'AB';
  1.1225 +actualmatch = string.match(pattern);
  1.1226 +expectedmatch = Array('AB', 'B');
  1.1227 +addThis();
  1.1228 +
  1.1229 +status = inSection(164);
  1.1230 +pattern = /(a+|b){0,}/i;
  1.1231 +string = 'AB';
  1.1232 +actualmatch = string.match(pattern);
  1.1233 +expectedmatch = Array('AB', 'B');
  1.1234 +addThis();
  1.1235 +
  1.1236 +status = inSection(165);
  1.1237 +pattern = /(a+|b)+/i;
  1.1238 +string = 'AB';
  1.1239 +actualmatch = string.match(pattern);
  1.1240 +expectedmatch = Array('AB', 'B');
  1.1241 +addThis();
  1.1242 +
  1.1243 +status = inSection(166);
  1.1244 +pattern = /(a+|b){1,}/i;
  1.1245 +string = 'AB';
  1.1246 +actualmatch = string.match(pattern);
  1.1247 +expectedmatch = Array('AB', 'B');
  1.1248 +addThis();
  1.1249 +
  1.1250 +status = inSection(167);
  1.1251 +pattern = /(a+|b)?/i;
  1.1252 +string = 'AB';
  1.1253 +actualmatch = string.match(pattern);
  1.1254 +expectedmatch = Array('A', 'A');
  1.1255 +addThis();
  1.1256 +
  1.1257 +status = inSection(168);
  1.1258 +pattern = /(a+|b){0,1}/i;
  1.1259 +string = 'AB';
  1.1260 +actualmatch = string.match(pattern);
  1.1261 +expectedmatch = Array('A', 'A');
  1.1262 +addThis();
  1.1263 +
  1.1264 +status = inSection(169);
  1.1265 +pattern = /(a+|b){0,1}?/i;
  1.1266 +string = 'AB';
  1.1267 +actualmatch = string.match(pattern);
  1.1268 +expectedmatch = Array('', undefined);
  1.1269 +addThis();
  1.1270 +
  1.1271 +status = inSection(170);
  1.1272 +pattern = /[^ab]*/i;
  1.1273 +string = 'CDE';
  1.1274 +actualmatch = string.match(pattern);
  1.1275 +expectedmatch = Array('CDE');
  1.1276 +addThis();
  1.1277 +
  1.1278 +status = inSection(171);
  1.1279 +pattern = /([abc])*d/i;
  1.1280 +string = 'ABBBCD';
  1.1281 +actualmatch = string.match(pattern);
  1.1282 +expectedmatch = Array('ABBBCD', 'C');
  1.1283 +addThis();
  1.1284 +
  1.1285 +status = inSection(172);
  1.1286 +pattern = /([abc])*bcd/i;
  1.1287 +string = 'ABCD';
  1.1288 +actualmatch = string.match(pattern);
  1.1289 +expectedmatch = Array('ABCD', 'A');
  1.1290 +addThis();
  1.1291 +
  1.1292 +status = inSection(173);
  1.1293 +pattern = /a|b|c|d|e/i;
  1.1294 +string = 'E';
  1.1295 +actualmatch = string.match(pattern);
  1.1296 +expectedmatch = Array('E');
  1.1297 +addThis();
  1.1298 +
  1.1299 +status = inSection(174);
  1.1300 +pattern = /(a|b|c|d|e)f/i;
  1.1301 +string = 'EF';
  1.1302 +actualmatch = string.match(pattern);
  1.1303 +expectedmatch = Array('EF', 'E');
  1.1304 +addThis();
  1.1305 +
  1.1306 +status = inSection(175);
  1.1307 +pattern = /abcd*efg/i;
  1.1308 +string = 'ABCDEFG';
  1.1309 +actualmatch = string.match(pattern);
  1.1310 +expectedmatch = Array('ABCDEFG');
  1.1311 +addThis();
  1.1312 +
  1.1313 +status = inSection(176);
  1.1314 +pattern = /ab*/i;
  1.1315 +string = 'XABYABBBZ';
  1.1316 +actualmatch = string.match(pattern);
  1.1317 +expectedmatch = Array('AB');
  1.1318 +addThis();
  1.1319 +
  1.1320 +status = inSection(177);
  1.1321 +pattern = /ab*/i;
  1.1322 +string = 'XAYABBBZ';
  1.1323 +actualmatch = string.match(pattern);
  1.1324 +expectedmatch = Array('A');
  1.1325 +addThis();
  1.1326 +
  1.1327 +status = inSection(178);
  1.1328 +pattern = /(ab|cd)e/i;
  1.1329 +string = 'ABCDE';
  1.1330 +actualmatch = string.match(pattern);
  1.1331 +expectedmatch = Array('CDE', 'CD');
  1.1332 +addThis();
  1.1333 +
  1.1334 +status = inSection(179);
  1.1335 +pattern = /[abhgefdc]ij/i;
  1.1336 +string = 'HIJ';
  1.1337 +actualmatch = string.match(pattern);
  1.1338 +expectedmatch = Array('HIJ');
  1.1339 +addThis();
  1.1340 +
  1.1341 +status = inSection(180);
  1.1342 +pattern = /(abc|)ef/i;
  1.1343 +string = 'ABCDEF';
  1.1344 +actualmatch = string.match(pattern);
  1.1345 +expectedmatch = Array('EF', '');
  1.1346 +addThis();
  1.1347 +
  1.1348 +status = inSection(181);
  1.1349 +pattern = /(a|b)c*d/i;
  1.1350 +string = 'ABCD';
  1.1351 +actualmatch = string.match(pattern);
  1.1352 +expectedmatch = Array('BCD', 'B');
  1.1353 +addThis();
  1.1354 +
  1.1355 +status = inSection(182);
  1.1356 +pattern = /(ab|ab*)bc/i;
  1.1357 +string = 'ABC';
  1.1358 +actualmatch = string.match(pattern);
  1.1359 +expectedmatch = Array('ABC', 'A');
  1.1360 +addThis();
  1.1361 +
  1.1362 +status = inSection(183);
  1.1363 +pattern = /a([bc]*)c*/i;
  1.1364 +string = 'ABC';
  1.1365 +actualmatch = string.match(pattern);
  1.1366 +expectedmatch = Array('ABC', 'BC');
  1.1367 +addThis();
  1.1368 +
  1.1369 +status = inSection(184);
  1.1370 +pattern = /a([bc]*)(c*d)/i;
  1.1371 +string = 'ABCD';
  1.1372 +actualmatch = string.match(pattern);
  1.1373 +expectedmatch = Array('ABCD', 'BC', 'D');
  1.1374 +addThis();
  1.1375 +
  1.1376 +status = inSection(185);
  1.1377 +pattern = /a([bc]+)(c*d)/i;
  1.1378 +string = 'ABCD';
  1.1379 +actualmatch = string.match(pattern);
  1.1380 +expectedmatch = Array('ABCD', 'BC', 'D');
  1.1381 +addThis();
  1.1382 +
  1.1383 +status = inSection(186);
  1.1384 +pattern = /a([bc]*)(c+d)/i;
  1.1385 +string = 'ABCD';
  1.1386 +actualmatch = string.match(pattern);
  1.1387 +expectedmatch = Array('ABCD', 'B', 'CD');
  1.1388 +addThis();
  1.1389 +
  1.1390 +status = inSection(187);
  1.1391 +pattern = /a[bcd]*dcdcde/i;
  1.1392 +string = 'ADCDCDE';
  1.1393 +actualmatch = string.match(pattern);
  1.1394 +expectedmatch = Array('ADCDCDE');
  1.1395 +addThis();
  1.1396 +
  1.1397 +status = inSection(188);
  1.1398 +pattern = /(ab|a)b*c/i;
  1.1399 +string = 'ABC';
  1.1400 +actualmatch = string.match(pattern);
  1.1401 +expectedmatch = Array('ABC', 'AB');
  1.1402 +addThis();
  1.1403 +
  1.1404 +status = inSection(189);
  1.1405 +pattern = /((a)(b)c)(d)/i;
  1.1406 +string = 'ABCD';
  1.1407 +actualmatch = string.match(pattern);
  1.1408 +expectedmatch = Array('ABCD', 'ABC', 'A', 'B', 'D');
  1.1409 +addThis();
  1.1410 +
  1.1411 +status = inSection(190);
  1.1412 +pattern = /[a-zA-Z_][a-zA-Z0-9_]*/i;
  1.1413 +string = 'ALPHA';
  1.1414 +actualmatch = string.match(pattern);
  1.1415 +expectedmatch = Array('ALPHA');
  1.1416 +addThis();
  1.1417 +
  1.1418 +status = inSection(191);
  1.1419 +pattern = /^a(bc+|b[eh])g|.h$/i;
  1.1420 +string = 'ABH';
  1.1421 +actualmatch = string.match(pattern);
  1.1422 +expectedmatch = Array('BH', undefined);
  1.1423 +addThis();
  1.1424 +
  1.1425 +status = inSection(192);
  1.1426 +pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
  1.1427 +string = 'EFFGZ';
  1.1428 +actualmatch = string.match(pattern);
  1.1429 +expectedmatch = Array('EFFGZ', 'EFFGZ', undefined);
  1.1430 +addThis();
  1.1431 +
  1.1432 +status = inSection(193);
  1.1433 +pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
  1.1434 +string = 'IJ';
  1.1435 +actualmatch = string.match(pattern);
  1.1436 +expectedmatch = Array('IJ', 'IJ', 'J');
  1.1437 +addThis();
  1.1438 +
  1.1439 +status = inSection(194);
  1.1440 +pattern = /(bc+d$|ef*g.|h?i(j|k))/i;
  1.1441 +string = 'REFFGZ';
  1.1442 +actualmatch = string.match(pattern);
  1.1443 +expectedmatch = Array('EFFGZ', 'EFFGZ', undefined);
  1.1444 +addThis();
  1.1445 +
  1.1446 +status = inSection(195);
  1.1447 +pattern = /((((((((((a))))))))))/i;
  1.1448 +string = 'A';
  1.1449 +actualmatch = string.match(pattern);
  1.1450 +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
  1.1451 +addThis();
  1.1452 +
  1.1453 +status = inSection(196);
  1.1454 +pattern = /((((((((((a))))))))))\10/i;
  1.1455 +string = 'AA';
  1.1456 +actualmatch = string.match(pattern);
  1.1457 +expectedmatch = Array('AA', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
  1.1458 +addThis();
  1.1459 +
  1.1460 +status = inSection(197);
  1.1461 +pattern = /((((((((((a))))))))))/i;
  1.1462 +string = 'A!';
  1.1463 +actualmatch = string.match(pattern);
  1.1464 +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
  1.1465 +addThis();
  1.1466 +
  1.1467 +status = inSection(198);
  1.1468 +pattern = /(((((((((a)))))))))/i;
  1.1469 +string = 'A';
  1.1470 +actualmatch = string.match(pattern);
  1.1471 +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A');
  1.1472 +addThis();
  1.1473 +
  1.1474 +status = inSection(199);
  1.1475 +pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i;
  1.1476 +string = 'A';
  1.1477 +actualmatch = string.match(pattern);
  1.1478 +expectedmatch = Array('A', 'A');
  1.1479 +addThis();
  1.1480 +
  1.1481 +status = inSection(200);
  1.1482 +pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i;
  1.1483 +string = 'C';
  1.1484 +actualmatch = string.match(pattern);
  1.1485 +expectedmatch = Array('C', 'C');
  1.1486 +addThis();
  1.1487 +
  1.1488 +status = inSection(201);
  1.1489 +pattern = /(.*)c(.*)/i;
  1.1490 +string = 'ABCDE';
  1.1491 +actualmatch = string.match(pattern);
  1.1492 +expectedmatch = Array('ABCDE', 'AB', 'DE');
  1.1493 +addThis();
  1.1494 +
  1.1495 +status = inSection(202);
  1.1496 +pattern = /abcd/i;
  1.1497 +string = 'ABCD';
  1.1498 +actualmatch = string.match(pattern);
  1.1499 +expectedmatch = Array('ABCD');
  1.1500 +addThis();
  1.1501 +
  1.1502 +status = inSection(203);
  1.1503 +pattern = /a(bc)d/i;
  1.1504 +string = 'ABCD';
  1.1505 +actualmatch = string.match(pattern);
  1.1506 +expectedmatch = Array('ABCD', 'BC');
  1.1507 +addThis();
  1.1508 +
  1.1509 +status = inSection(204);
  1.1510 +pattern = /a[-]?c/i;
  1.1511 +string = 'AC';
  1.1512 +actualmatch = string.match(pattern);
  1.1513 +expectedmatch = Array('AC');
  1.1514 +addThis();
  1.1515 +
  1.1516 +status = inSection(205);
  1.1517 +pattern = /(abc)\1/i;
  1.1518 +string = 'ABCABC';
  1.1519 +actualmatch = string.match(pattern);
  1.1520 +expectedmatch = Array('ABCABC', 'ABC');
  1.1521 +addThis();
  1.1522 +
  1.1523 +status = inSection(206);
  1.1524 +pattern = /([a-c]*)\1/i;
  1.1525 +string = 'ABCABC';
  1.1526 +actualmatch = string.match(pattern);
  1.1527 +expectedmatch = Array('ABCABC', 'ABC');
  1.1528 +addThis();
  1.1529 +
  1.1530 +status = inSection(207);
  1.1531 +pattern = /a(?!b)./;
  1.1532 +string = 'abad';
  1.1533 +actualmatch = string.match(pattern);
  1.1534 +expectedmatch = Array('ad');
  1.1535 +addThis();
  1.1536 +
  1.1537 +status = inSection(208);
  1.1538 +pattern = /a(?=d)./;
  1.1539 +string = 'abad';
  1.1540 +actualmatch = string.match(pattern);
  1.1541 +expectedmatch = Array('ad');
  1.1542 +addThis();
  1.1543 +
  1.1544 +status = inSection(209);
  1.1545 +pattern = /a(?=c|d)./;
  1.1546 +string = 'abad';
  1.1547 +actualmatch = string.match(pattern);
  1.1548 +expectedmatch = Array('ad');
  1.1549 +addThis();
  1.1550 +
  1.1551 +status = inSection(210);
  1.1552 +pattern = /a(?:b|c|d)(.)/;
  1.1553 +string = 'ace';
  1.1554 +actualmatch = string.match(pattern);
  1.1555 +expectedmatch = Array('ace', 'e');
  1.1556 +addThis();
  1.1557 +
  1.1558 +status = inSection(211);
  1.1559 +pattern = /a(?:b|c|d)*(.)/;
  1.1560 +string = 'ace';
  1.1561 +actualmatch = string.match(pattern);
  1.1562 +expectedmatch = Array('ace', 'e');
  1.1563 +addThis();
  1.1564 +
  1.1565 +status = inSection(212);
  1.1566 +pattern = /a(?:b|c|d)+?(.)/;
  1.1567 +string = 'ace';
  1.1568 +actualmatch = string.match(pattern);
  1.1569 +expectedmatch = Array('ace', 'e');
  1.1570 +addThis();
  1.1571 +
  1.1572 +status = inSection(213);
  1.1573 +pattern = /a(?:b|c|d)+?(.)/;
  1.1574 +string = 'acdbcdbe';
  1.1575 +actualmatch = string.match(pattern);
  1.1576 +expectedmatch = Array('acd', 'd');
  1.1577 +addThis();
  1.1578 +
  1.1579 +status = inSection(214);
  1.1580 +pattern = /a(?:b|c|d)+(.)/;
  1.1581 +string = 'acdbcdbe';
  1.1582 +actualmatch = string.match(pattern);
  1.1583 +expectedmatch = Array('acdbcdbe', 'e');
  1.1584 +addThis();
  1.1585 +
  1.1586 +status = inSection(215);
  1.1587 +pattern = /a(?:b|c|d){2}(.)/;
  1.1588 +string = 'acdbcdbe';
  1.1589 +actualmatch = string.match(pattern);
  1.1590 +expectedmatch = Array('acdb', 'b');
  1.1591 +addThis();
  1.1592 +
  1.1593 +status = inSection(216);
  1.1594 +pattern = /a(?:b|c|d){4,5}(.)/;
  1.1595 +string = 'acdbcdbe';
  1.1596 +actualmatch = string.match(pattern);
  1.1597 +expectedmatch = Array('acdbcdb', 'b');
  1.1598 +addThis();
  1.1599 +
  1.1600 +status = inSection(217);
  1.1601 +pattern = /a(?:b|c|d){4,5}?(.)/;
  1.1602 +string = 'acdbcdbe';
  1.1603 +actualmatch = string.match(pattern);
  1.1604 +expectedmatch = Array('acdbcd', 'd');
  1.1605 +addThis();
  1.1606 +
  1.1607 +// MODIFIED - ECMA has different rules for paren contents
  1.1608 +status = inSection(218);
  1.1609 +pattern = /((foo)|(bar))*/;
  1.1610 +string = 'foobar';
  1.1611 +actualmatch = string.match(pattern);
  1.1612 +//expectedmatch = Array('foobar', 'bar', 'foo', 'bar');
  1.1613 +expectedmatch = Array('foobar', 'bar', undefined, 'bar');
  1.1614 +addThis();
  1.1615 +
  1.1616 +status = inSection(219);
  1.1617 +pattern = /a(?:b|c|d){6,7}(.)/;
  1.1618 +string = 'acdbcdbe';
  1.1619 +actualmatch = string.match(pattern);
  1.1620 +expectedmatch = Array('acdbcdbe', 'e');
  1.1621 +addThis();
  1.1622 +
  1.1623 +status = inSection(220);
  1.1624 +pattern = /a(?:b|c|d){6,7}?(.)/;
  1.1625 +string = 'acdbcdbe';
  1.1626 +actualmatch = string.match(pattern);
  1.1627 +expectedmatch = Array('acdbcdbe', 'e');
  1.1628 +addThis();
  1.1629 +
  1.1630 +status = inSection(221);
  1.1631 +pattern = /a(?:b|c|d){5,6}(.)/;
  1.1632 +string = 'acdbcdbe';
  1.1633 +actualmatch = string.match(pattern);
  1.1634 +expectedmatch = Array('acdbcdbe', 'e');
  1.1635 +addThis();
  1.1636 +
  1.1637 +status = inSection(222);
  1.1638 +pattern = /a(?:b|c|d){5,6}?(.)/;
  1.1639 +string = 'acdbcdbe';
  1.1640 +actualmatch = string.match(pattern);
  1.1641 +expectedmatch = Array('acdbcdb', 'b');
  1.1642 +addThis();
  1.1643 +
  1.1644 +status = inSection(223);
  1.1645 +pattern = /a(?:b|c|d){5,7}(.)/;
  1.1646 +string = 'acdbcdbe';
  1.1647 +actualmatch = string.match(pattern);
  1.1648 +expectedmatch = Array('acdbcdbe', 'e');
  1.1649 +addThis();
  1.1650 +
  1.1651 +status = inSection(224);
  1.1652 +pattern = /a(?:b|c|d){5,7}?(.)/;
  1.1653 +string = 'acdbcdbe';
  1.1654 +actualmatch = string.match(pattern);
  1.1655 +expectedmatch = Array('acdbcdb', 'b');
  1.1656 +addThis();
  1.1657 +
  1.1658 +status = inSection(225);
  1.1659 +pattern = /a(?:b|(c|e){1,2}?|d)+?(.)/;
  1.1660 +string = 'ace';
  1.1661 +actualmatch = string.match(pattern);
  1.1662 +expectedmatch = Array('ace', 'c', 'e');
  1.1663 +addThis();
  1.1664 +
  1.1665 +status = inSection(226);
  1.1666 +pattern = /^(.+)?B/;
  1.1667 +string = 'AB';
  1.1668 +actualmatch = string.match(pattern);
  1.1669 +expectedmatch = Array('AB', 'A');
  1.1670 +addThis();
  1.1671 +
  1.1672 +/* MODIFIED - ECMA has different rules for paren contents */
  1.1673 +status = inSection(227);
  1.1674 +pattern = /^([^a-z])|(\^)$/;
  1.1675 +string = '.';
  1.1676 +actualmatch = string.match(pattern);
  1.1677 +//expectedmatch = Array('.', '.', '');
  1.1678 +expectedmatch = Array('.', '.', undefined);
  1.1679 +addThis();
  1.1680 +
  1.1681 +status = inSection(228);
  1.1682 +pattern = /^[<>]&/;
  1.1683 +string = '<&OUT';
  1.1684 +actualmatch = string.match(pattern);
  1.1685 +expectedmatch = Array('<&');
  1.1686 +addThis();
  1.1687 +
  1.1688 +/* Can't refer to a capture before it's encountered & completed
  1.1689 +   status = inSection(229);
  1.1690 +   pattern = /^(a\1?){4}$/;
  1.1691 +   string = 'aaaaaaaaaa';
  1.1692 +   actualmatch = string.match(pattern);
  1.1693 +   expectedmatch = Array('aaaaaaaaaa', 'aaaa');
  1.1694 +   addThis();
  1.1695 +
  1.1696 +   status = inSection(230);
  1.1697 +   pattern = /^(a(?(1)\1)){4}$/;
  1.1698 +   string = 'aaaaaaaaaa';
  1.1699 +   actualmatch = string.match(pattern);
  1.1700 +   expectedmatch = Array('aaaaaaaaaa', 'aaaa');
  1.1701 +   addThis();
  1.1702 +*/
  1.1703 +
  1.1704 +status = inSection(231);
  1.1705 +pattern = /((a{4})+)/;
  1.1706 +string = 'aaaaaaaaa';
  1.1707 +actualmatch = string.match(pattern);
  1.1708 +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa');
  1.1709 +addThis();
  1.1710 +
  1.1711 +status = inSection(232);
  1.1712 +pattern = /(((aa){2})+)/;
  1.1713 +string = 'aaaaaaaaaa';
  1.1714 +actualmatch = string.match(pattern);
  1.1715 +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa');
  1.1716 +addThis();
  1.1717 +
  1.1718 +status = inSection(233);
  1.1719 +pattern = /(((a{2}){2})+)/;
  1.1720 +string = 'aaaaaaaaaa';
  1.1721 +actualmatch = string.match(pattern);
  1.1722 +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa');
  1.1723 +addThis();
  1.1724 +
  1.1725 +status = inSection(234);
  1.1726 +pattern = /(?:(f)(o)(o)|(b)(a)(r))*/;
  1.1727 +string = 'foobar';
  1.1728 +actualmatch = string.match(pattern);
  1.1729 +//expectedmatch = Array('foobar', 'f', 'o', 'o', 'b', 'a', 'r');
  1.1730 +expectedmatch = Array('foobar', undefined, undefined, undefined, 'b', 'a', 'r');
  1.1731 +addThis();
  1.1732 +
  1.1733 +/* ECMA supports (?: (?= and (?! but doesn't support (?< etc.
  1.1734 +   status = inSection(235);
  1.1735 +   pattern = /(?<=a)b/;
  1.1736 +   string = 'ab';
  1.1737 +   actualmatch = string.match(pattern);
  1.1738 +   expectedmatch = Array('b');
  1.1739 +   addThis();
  1.1740 +
  1.1741 +   status = inSection(236);
  1.1742 +   pattern = /(?<!c)b/;
  1.1743 +   string = 'ab';
  1.1744 +   actualmatch = string.match(pattern);
  1.1745 +   expectedmatch = Array('b');
  1.1746 +   addThis();
  1.1747 +
  1.1748 +   status = inSection(237);
  1.1749 +   pattern = /(?<!c)b/;
  1.1750 +   string = 'b';
  1.1751 +   actualmatch = string.match(pattern);
  1.1752 +   expectedmatch = Array('b');
  1.1753 +   addThis();
  1.1754 +
  1.1755 +   status = inSection(238);
  1.1756 +   pattern = /(?<!c)b/;
  1.1757 +   string = 'b';
  1.1758 +   actualmatch = string.match(pattern);
  1.1759 +   expectedmatch = Array('b');
  1.1760 +   addThis();
  1.1761 +*/
  1.1762 +
  1.1763 +status = inSection(239);
  1.1764 +pattern = /(?:..)*a/;
  1.1765 +string = 'aba';
  1.1766 +actualmatch = string.match(pattern);
  1.1767 +expectedmatch = Array('aba');
  1.1768 +addThis();
  1.1769 +
  1.1770 +status = inSection(240);
  1.1771 +pattern = /(?:..)*?a/;
  1.1772 +string = 'aba';
  1.1773 +actualmatch = string.match(pattern);
  1.1774 +expectedmatch = Array('a');
  1.1775 +addThis();
  1.1776 +
  1.1777 +/*
  1.1778 + * MODIFIED - ECMA has different rules for paren contents. Note
  1.1779 + * this regexp has two non-capturing parens, and one capturing
  1.1780 + *
  1.1781 + * The issue: shouldn't the match be ['ab', undefined]? Because the
  1.1782 + * '\1' matches the undefined value of the second iteration of the '*'
  1.1783 + * (in which the 'b' part of the '|' matches). But Perl wants ['ab','b'].
  1.1784 + *
  1.1785 + * Answer: waldemar@netscape.com:
  1.1786 + *
  1.1787 + * The correct answer is ['ab', undefined].  Perl doesn't match
  1.1788 + * ECMAScript here, and I'd say that Perl is wrong in this case.
  1.1789 + */
  1.1790 +status = inSection(241);
  1.1791 +pattern = /^(?:b|a(?=(.)))*\1/;
  1.1792 +string = 'abc';
  1.1793 +actualmatch = string.match(pattern);
  1.1794 +//expectedmatch = Array('ab', 'b');
  1.1795 +expectedmatch = Array('ab', undefined);
  1.1796 +addThis();
  1.1797 +
  1.1798 +status = inSection(242);
  1.1799 +pattern = /^(){3,5}/;
  1.1800 +string = 'abc';
  1.1801 +actualmatch = string.match(pattern);
  1.1802 +expectedmatch = Array('', '');
  1.1803 +addThis();
  1.1804 +
  1.1805 +status = inSection(243);
  1.1806 +pattern = /^(a+)*ax/;
  1.1807 +string = 'aax';
  1.1808 +actualmatch = string.match(pattern);
  1.1809 +expectedmatch = Array('aax', 'a');
  1.1810 +addThis();
  1.1811 +
  1.1812 +status = inSection(244);
  1.1813 +pattern = /^((a|b)+)*ax/;
  1.1814 +string = 'aax';
  1.1815 +actualmatch = string.match(pattern);
  1.1816 +expectedmatch = Array('aax', 'a', 'a');
  1.1817 +addThis();
  1.1818 +
  1.1819 +status = inSection(245);
  1.1820 +pattern = /^((a|bc)+)*ax/;
  1.1821 +string = 'aax';
  1.1822 +actualmatch = string.match(pattern);
  1.1823 +expectedmatch = Array('aax', 'a', 'a');
  1.1824 +addThis();
  1.1825 +
  1.1826 +/* MODIFIED - ECMA has different rules for paren contents */
  1.1827 +status = inSection(246);
  1.1828 +pattern = /(a|x)*ab/;
  1.1829 +string = 'cab';
  1.1830 +actualmatch = string.match(pattern);
  1.1831 +//expectedmatch = Array('ab', '');
  1.1832 +expectedmatch = Array('ab', undefined);
  1.1833 +addThis();
  1.1834 +
  1.1835 +status = inSection(247);
  1.1836 +pattern = /(a)*ab/;
  1.1837 +string = 'cab';
  1.1838 +actualmatch = string.match(pattern);
  1.1839 +expectedmatch = Array('ab', undefined);
  1.1840 +addThis();
  1.1841 +
  1.1842 +/* ECMA doesn't support (?imsx or (?-imsx
  1.1843 +   status = inSection(248);
  1.1844 +   pattern = /(?:(?i)a)b/;
  1.1845 +   string = 'ab';
  1.1846 +   actualmatch = string.match(pattern);
  1.1847 +   expectedmatch = Array('ab');
  1.1848 +   addThis();
  1.1849 +
  1.1850 +   status = inSection(249);
  1.1851 +   pattern = /((?i)a)b/;
  1.1852 +   string = 'ab';
  1.1853 +   actualmatch = string.match(pattern);
  1.1854 +   expectedmatch = Array('ab', 'a');
  1.1855 +   addThis();
  1.1856 +
  1.1857 +   status = inSection(250);
  1.1858 +   pattern = /(?:(?i)a)b/;
  1.1859 +   string = 'Ab';
  1.1860 +   actualmatch = string.match(pattern);
  1.1861 +   expectedmatch = Array('Ab');
  1.1862 +   addThis();
  1.1863 +
  1.1864 +   status = inSection(251);
  1.1865 +   pattern = /((?i)a)b/;
  1.1866 +   string = 'Ab';
  1.1867 +   actualmatch = string.match(pattern);
  1.1868 +   expectedmatch = Array('Ab', 'A');
  1.1869 +   addThis();
  1.1870 +
  1.1871 +   status = inSection(252);
  1.1872 +   pattern = /(?i:a)b/;
  1.1873 +   string = 'ab';
  1.1874 +   actualmatch = string.match(pattern);
  1.1875 +   expectedmatch = Array('ab');
  1.1876 +   addThis();
  1.1877 +
  1.1878 +   status = inSection(253);
  1.1879 +   pattern = /((?i:a))b/;
  1.1880 +   string = 'ab';
  1.1881 +   actualmatch = string.match(pattern);
  1.1882 +   expectedmatch = Array('ab', 'a');
  1.1883 +   addThis();
  1.1884 +
  1.1885 +   status = inSection(254);
  1.1886 +   pattern = /(?i:a)b/;
  1.1887 +   string = 'Ab';
  1.1888 +   actualmatch = string.match(pattern);
  1.1889 +   expectedmatch = Array('Ab');
  1.1890 +   addThis();
  1.1891 +
  1.1892 +   status = inSection(255);
  1.1893 +   pattern = /((?i:a))b/;
  1.1894 +   string = 'Ab';
  1.1895 +   actualmatch = string.match(pattern);
  1.1896 +   expectedmatch = Array('Ab', 'A');
  1.1897 +   addThis();
  1.1898 +
  1.1899 +   status = inSection(256);
  1.1900 +   pattern = /(?:(?-i)a)b/i;
  1.1901 +   string = 'ab';
  1.1902 +   actualmatch = string.match(pattern);
  1.1903 +   expectedmatch = Array('ab');
  1.1904 +   addThis();
  1.1905 +
  1.1906 +   status = inSection(257);
  1.1907 +   pattern = /((?-i)a)b/i;
  1.1908 +   string = 'ab';
  1.1909 +   actualmatch = string.match(pattern);
  1.1910 +   expectedmatch = Array('ab', 'a');
  1.1911 +   addThis();
  1.1912 +
  1.1913 +   status = inSection(258);
  1.1914 +   pattern = /(?:(?-i)a)b/i;
  1.1915 +   string = 'aB';
  1.1916 +   actualmatch = string.match(pattern);
  1.1917 +   expectedmatch = Array('aB');
  1.1918 +   addThis();
  1.1919 +
  1.1920 +   status = inSection(259);
  1.1921 +   pattern = /((?-i)a)b/i;
  1.1922 +   string = 'aB';
  1.1923 +   actualmatch = string.match(pattern);
  1.1924 +   expectedmatch = Array('aB', 'a');
  1.1925 +   addThis();
  1.1926 +
  1.1927 +   status = inSection(260);
  1.1928 +   pattern = /(?:(?-i)a)b/i;
  1.1929 +   string = 'aB';
  1.1930 +   actualmatch = string.match(pattern);
  1.1931 +   expectedmatch = Array('aB');
  1.1932 +   addThis();
  1.1933 +
  1.1934 +   status = inSection(261);
  1.1935 +   pattern = /((?-i)a)b/i;
  1.1936 +   string = 'aB';
  1.1937 +   actualmatch = string.match(pattern);
  1.1938 +   expectedmatch = Array('aB', 'a');
  1.1939 +   addThis();
  1.1940 +
  1.1941 +   status = inSection(262);
  1.1942 +   pattern = /(?-i:a)b/i;
  1.1943 +   string = 'ab';
  1.1944 +   actualmatch = string.match(pattern);
  1.1945 +   expectedmatch = Array('ab');
  1.1946 +   addThis();
  1.1947 +
  1.1948 +   status = inSection(263);
  1.1949 +   pattern = /((?-i:a))b/i;
  1.1950 +   string = 'ab';
  1.1951 +   actualmatch = string.match(pattern);
  1.1952 +   expectedmatch = Array('ab', 'a');
  1.1953 +   addThis();
  1.1954 +
  1.1955 +   status = inSection(264);
  1.1956 +   pattern = /(?-i:a)b/i;
  1.1957 +   string = 'aB';
  1.1958 +   actualmatch = string.match(pattern);
  1.1959 +   expectedmatch = Array('aB');
  1.1960 +   addThis();
  1.1961 +
  1.1962 +   status = inSection(265);
  1.1963 +   pattern = /((?-i:a))b/i;
  1.1964 +   string = 'aB';
  1.1965 +   actualmatch = string.match(pattern);
  1.1966 +   expectedmatch = Array('aB', 'a');
  1.1967 +   addThis();
  1.1968 +
  1.1969 +   status = inSection(266);
  1.1970 +   pattern = /(?-i:a)b/i;
  1.1971 +   string = 'aB';
  1.1972 +   actualmatch = string.match(pattern);
  1.1973 +   expectedmatch = Array('aB');
  1.1974 +   addThis();
  1.1975 +
  1.1976 +   status = inSection(267);
  1.1977 +   pattern = /((?-i:a))b/i;
  1.1978 +   string = 'aB';
  1.1979 +   actualmatch = string.match(pattern);
  1.1980 +   expectedmatch = Array('aB', 'a');
  1.1981 +   addThis();
  1.1982 +
  1.1983 +   status = inSection(268);
  1.1984 +   pattern = /((?s-i:a.))b/i;
  1.1985 +   string = 'a\nB';
  1.1986 +   actualmatch = string.match(pattern);
  1.1987 +   expectedmatch = Array('a\nB', 'a\n');
  1.1988 +   addThis();
  1.1989 +*/
  1.1990 +
  1.1991 +status = inSection(269);
  1.1992 +pattern = /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/;
  1.1993 +string = 'cabbbb';
  1.1994 +actualmatch = string.match(pattern);
  1.1995 +expectedmatch = Array('cabbbb');
  1.1996 +addThis();
  1.1997 +
  1.1998 +status = inSection(270);
  1.1999 +pattern = /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/;
  1.2000 +string = 'caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
  1.2001 +actualmatch = string.match(pattern);
  1.2002 +expectedmatch = Array('caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
  1.2003 +addThis();
  1.2004 +
  1.2005 +status = inSection(271);
  1.2006 +pattern = /(ab)\d\1/i;
  1.2007 +string = 'Ab4ab';
  1.2008 +actualmatch = string.match(pattern);
  1.2009 +expectedmatch = Array('Ab4ab', 'Ab');
  1.2010 +addThis();
  1.2011 +
  1.2012 +status = inSection(272);
  1.2013 +pattern = /(ab)\d\1/i;
  1.2014 +string = 'ab4Ab';
  1.2015 +actualmatch = string.match(pattern);
  1.2016 +expectedmatch = Array('ab4Ab', 'ab');
  1.2017 +addThis();
  1.2018 +
  1.2019 +status = inSection(273);
  1.2020 +pattern = /foo\w*\d{4}baz/;
  1.2021 +string = 'foobar1234baz';
  1.2022 +actualmatch = string.match(pattern);
  1.2023 +expectedmatch = Array('foobar1234baz');
  1.2024 +addThis();
  1.2025 +
  1.2026 +status = inSection(274);
  1.2027 +pattern = /x(~~)*(?:(?:F)?)?/;
  1.2028 +string = 'x~~';
  1.2029 +actualmatch = string.match(pattern);
  1.2030 +expectedmatch = Array('x~~', '~~');
  1.2031 +addThis();
  1.2032 +
  1.2033 +/* Perl supports (?# but JS doesn't
  1.2034 +   status = inSection(275);
  1.2035 +   pattern = /^a(?#xxx){3}c/;
  1.2036 +   string = 'aaac';
  1.2037 +   actualmatch = string.match(pattern);
  1.2038 +   expectedmatch = Array('aaac');
  1.2039 +   addThis();
  1.2040 +*/
  1.2041 +
  1.2042 +/* ECMA doesn't support (?< etc
  1.2043 +   status = inSection(276);
  1.2044 +   pattern = /(?<![cd])[ab]/;
  1.2045 +   string = 'dbaacb';
  1.2046 +   actualmatch = string.match(pattern);
  1.2047 +   expectedmatch = Array('a');
  1.2048 +   addThis();
  1.2049 +
  1.2050 +   status = inSection(277);
  1.2051 +   pattern = /(?<!(c|d))[ab]/;
  1.2052 +   string = 'dbaacb';
  1.2053 +   actualmatch = string.match(pattern);
  1.2054 +   expectedmatch = Array('a');
  1.2055 +   addThis();
  1.2056 +
  1.2057 +   status = inSection(278);
  1.2058 +   pattern = /(?<!cd)[ab]/;
  1.2059 +   string = 'cdaccb';
  1.2060 +   actualmatch = string.match(pattern);
  1.2061 +   expectedmatch = Array('b');
  1.2062 +   addThis();
  1.2063 +
  1.2064 +   status = inSection(279);
  1.2065 +   pattern = /((?s)^a(.))((?m)^b$)/;
  1.2066 +   string = 'a\nb\nc\n';
  1.2067 +   actualmatch = string.match(pattern);
  1.2068 +   expectedmatch = Array('a\nb', 'a\n', '\n', 'b');
  1.2069 +   addThis();
  1.2070 +
  1.2071 +   status = inSection(280);
  1.2072 +   pattern = /((?m)^b$)/;
  1.2073 +   string = 'a\nb\nc\n';
  1.2074 +   actualmatch = string.match(pattern);
  1.2075 +   expectedmatch = Array('b', 'b');
  1.2076 +   addThis();
  1.2077 +
  1.2078 +   status = inSection(281);
  1.2079 +   pattern = /(?m)^b/;
  1.2080 +   string = 'a\nb\n';
  1.2081 +   actualmatch = string.match(pattern);
  1.2082 +   expectedmatch = Array('b');
  1.2083 +   addThis();
  1.2084 +
  1.2085 +   status = inSection(282);
  1.2086 +   pattern = /(?m)^(b)/;
  1.2087 +   string = 'a\nb\n';
  1.2088 +   actualmatch = string.match(pattern);
  1.2089 +   expectedmatch = Array('b', 'b');
  1.2090 +   addThis();
  1.2091 +
  1.2092 +   status = inSection(283);
  1.2093 +   pattern = /((?m)^b)/;
  1.2094 +   string = 'a\nb\n';
  1.2095 +   actualmatch = string.match(pattern);
  1.2096 +   expectedmatch = Array('b', 'b');
  1.2097 +   addThis();
  1.2098 +
  1.2099 +   status = inSection(284);
  1.2100 +   pattern = /\n((?m)^b)/;
  1.2101 +   string = 'a\nb\n';
  1.2102 +   actualmatch = string.match(pattern);
  1.2103 +   expectedmatch = Array('\nb', 'b');
  1.2104 +   addThis();
  1.2105 +
  1.2106 +   status = inSection(285);
  1.2107 +   pattern = /((?s).)c(?!.)/;
  1.2108 +   string = 'a\nb\nc\n';
  1.2109 +   actualmatch = string.match(pattern);
  1.2110 +   expectedmatch = Array('\nc', '\n');
  1.2111 +   addThis();
  1.2112 +
  1.2113 +   status = inSection(286);
  1.2114 +   pattern = /((?s).)c(?!.)/;
  1.2115 +   string = 'a\nb\nc\n';
  1.2116 +   actualmatch = string.match(pattern);
  1.2117 +   expectedmatch = Array('\nc', '\n');
  1.2118 +   addThis();
  1.2119 +
  1.2120 +   status = inSection(287);
  1.2121 +   pattern = /((?s)b.)c(?!.)/;
  1.2122 +   string = 'a\nb\nc\n';
  1.2123 +   actualmatch = string.match(pattern);
  1.2124 +   expectedmatch = Array('b\nc', 'b\n');
  1.2125 +   addThis();
  1.2126 +
  1.2127 +   status = inSection(288);
  1.2128 +   pattern = /((?s)b.)c(?!.)/;
  1.2129 +   string = 'a\nb\nc\n';
  1.2130 +   actualmatch = string.match(pattern);
  1.2131 +   expectedmatch = Array('b\nc', 'b\n');
  1.2132 +   addThis();
  1.2133 +
  1.2134 +   status = inSection(289);
  1.2135 +   pattern = /((?m)^b)/;
  1.2136 +   string = 'a\nb\nc\n';
  1.2137 +   actualmatch = string.match(pattern);
  1.2138 +   expectedmatch = Array('b', 'b');
  1.2139 +   addThis();
  1.2140 +*/
  1.2141 +
  1.2142 +/* ECMA doesn't support (?(condition)
  1.2143 +   status = inSection(290);
  1.2144 +   pattern = /(?(1)b|a)/;
  1.2145 +   string = 'a';
  1.2146 +   actualmatch = string.match(pattern);
  1.2147 +   expectedmatch = Array('a');
  1.2148 +   addThis();
  1.2149 +
  1.2150 +   status = inSection(291);
  1.2151 +   pattern = /(x)?(?(1)b|a)/;
  1.2152 +   string = 'a';
  1.2153 +   actualmatch = string.match(pattern);
  1.2154 +   expectedmatch = Array('a');
  1.2155 +   addThis();
  1.2156 +
  1.2157 +   status = inSection(292);
  1.2158 +   pattern = /()?(?(1)b|a)/;
  1.2159 +   string = 'a';
  1.2160 +   actualmatch = string.match(pattern);
  1.2161 +   expectedmatch = Array('a');
  1.2162 +   addThis();
  1.2163 +
  1.2164 +   status = inSection(293);
  1.2165 +   pattern = /()?(?(1)a|b)/;
  1.2166 +   string = 'a';
  1.2167 +   actualmatch = string.match(pattern);
  1.2168 +   expectedmatch = Array('a');
  1.2169 +   addThis();
  1.2170 +
  1.2171 +   status = inSection(294);
  1.2172 +   pattern = /^(\()?blah(?(1)(\)))$/;
  1.2173 +   string = '(blah)';
  1.2174 +   actualmatch = string.match(pattern);
  1.2175 +   expectedmatch = Array('(blah)', '(', ')');
  1.2176 +   addThis();
  1.2177 +
  1.2178 +   status = inSection(295);
  1.2179 +   pattern = /^(\()?blah(?(1)(\)))$/;
  1.2180 +   string = 'blah';
  1.2181 +   actualmatch = string.match(pattern);
  1.2182 +   expectedmatch = Array('blah');
  1.2183 +   addThis();
  1.2184 +
  1.2185 +   status = inSection(296);
  1.2186 +   pattern = /^(\(+)?blah(?(1)(\)))$/;
  1.2187 +   string = '(blah)';
  1.2188 +   actualmatch = string.match(pattern);
  1.2189 +   expectedmatch = Array('(blah)', '(', ')');
  1.2190 +   addThis();
  1.2191 +
  1.2192 +   status = inSection(297);
  1.2193 +   pattern = /^(\(+)?blah(?(1)(\)))$/;
  1.2194 +   string = 'blah';
  1.2195 +   actualmatch = string.match(pattern);
  1.2196 +   expectedmatch = Array('blah');
  1.2197 +   addThis();
  1.2198 +
  1.2199 +   status = inSection(298);
  1.2200 +   pattern = /(?(?!a)b|a)/;
  1.2201 +   string = 'a';
  1.2202 +   actualmatch = string.match(pattern);
  1.2203 +   expectedmatch = Array('a');
  1.2204 +   addThis();
  1.2205 +
  1.2206 +   status = inSection(299);
  1.2207 +   pattern = /(?(?=a)a|b)/;
  1.2208 +   string = 'a';
  1.2209 +   actualmatch = string.match(pattern);
  1.2210 +   expectedmatch = Array('a');
  1.2211 +   addThis();
  1.2212 +*/
  1.2213 +
  1.2214 +status = inSection(300);
  1.2215 +pattern = /(?=(a+?))(\1ab)/;
  1.2216 +string = 'aaab';
  1.2217 +actualmatch = string.match(pattern);
  1.2218 +expectedmatch = Array('aab', 'a', 'aab');
  1.2219 +addThis();
  1.2220 +
  1.2221 +status = inSection(301);
  1.2222 +pattern = /(\w+:)+/;
  1.2223 +string = 'one:';
  1.2224 +actualmatch = string.match(pattern);
  1.2225 +expectedmatch = Array('one:', 'one:');
  1.2226 +addThis();
  1.2227 +
  1.2228 +/* ECMA doesn't support (?< etc
  1.2229 +   status = inSection(302);
  1.2230 +   pattern = /$(?<=^(a))/;
  1.2231 +   string = 'a';
  1.2232 +   actualmatch = string.match(pattern);
  1.2233 +   expectedmatch = Array('', 'a');
  1.2234 +   addThis();
  1.2235 +*/
  1.2236 +
  1.2237 +status = inSection(303);
  1.2238 +pattern = /(?=(a+?))(\1ab)/;
  1.2239 +string = 'aaab';
  1.2240 +actualmatch = string.match(pattern);
  1.2241 +expectedmatch = Array('aab', 'a', 'aab');
  1.2242 +addThis();
  1.2243 +
  1.2244 +/* MODIFIED - ECMA has different rules for paren contents */
  1.2245 +status = inSection(304);
  1.2246 +pattern = /([\w:]+::)?(\w+)$/;
  1.2247 +string = 'abcd';
  1.2248 +actualmatch = string.match(pattern);
  1.2249 +//expectedmatch = Array('abcd', '', 'abcd');
  1.2250 +expectedmatch = Array('abcd', undefined, 'abcd');
  1.2251 +addThis();
  1.2252 +
  1.2253 +status = inSection(305);
  1.2254 +pattern = /([\w:]+::)?(\w+)$/;
  1.2255 +string = 'xy:z:::abcd';
  1.2256 +actualmatch = string.match(pattern);
  1.2257 +expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd');
  1.2258 +addThis();
  1.2259 +
  1.2260 +status = inSection(306);
  1.2261 +pattern = /^[^bcd]*(c+)/;
  1.2262 +string = 'aexycd';
  1.2263 +actualmatch = string.match(pattern);
  1.2264 +expectedmatch = Array('aexyc', 'c');
  1.2265 +addThis();
  1.2266 +
  1.2267 +status = inSection(307);
  1.2268 +pattern = /(a*)b+/;
  1.2269 +string = 'caab';
  1.2270 +actualmatch = string.match(pattern);
  1.2271 +expectedmatch = Array('aab', 'aa');
  1.2272 +addThis();
  1.2273 +
  1.2274 +/* MODIFIED - ECMA has different rules for paren contents */
  1.2275 +status = inSection(308);
  1.2276 +pattern = /([\w:]+::)?(\w+)$/;
  1.2277 +string = 'abcd';
  1.2278 +actualmatch = string.match(pattern);
  1.2279 +//expectedmatch = Array('abcd', '', 'abcd');
  1.2280 +expectedmatch = Array('abcd', undefined, 'abcd');
  1.2281 +addThis();
  1.2282 +
  1.2283 +status = inSection(309);
  1.2284 +pattern = /([\w:]+::)?(\w+)$/;
  1.2285 +string = 'xy:z:::abcd';
  1.2286 +actualmatch = string.match(pattern);
  1.2287 +expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd');
  1.2288 +addThis();
  1.2289 +
  1.2290 +status = inSection(310);
  1.2291 +pattern = /^[^bcd]*(c+)/;
  1.2292 +string = 'aexycd';
  1.2293 +actualmatch = string.match(pattern);
  1.2294 +expectedmatch = Array('aexyc', 'c');
  1.2295 +addThis();
  1.2296 +
  1.2297 +/* ECMA doesn't support (?>
  1.2298 +   status = inSection(311);
  1.2299 +   pattern = /(?>a+)b/;
  1.2300 +   string = 'aaab';
  1.2301 +   actualmatch = string.match(pattern);
  1.2302 +   expectedmatch = Array('aaab');
  1.2303 +   addThis();
  1.2304 +*/
  1.2305 +
  1.2306 +status = inSection(312);
  1.2307 +pattern = /([[:]+)/;
  1.2308 +	    string = 'a:[b]:';
  1.2309 +	    actualmatch = string.match(pattern);
  1.2310 +	    expectedmatch = Array(':[', ':[');
  1.2311 +	    addThis();
  1.2312 +
  1.2313 +	    status = inSection(313);
  1.2314 +	    pattern = /([[=]+)/;
  1.2315 +			string = 'a=[b]=';
  1.2316 +			actualmatch = string.match(pattern);
  1.2317 +			expectedmatch = Array('=[', '=[');
  1.2318 +			addThis();
  1.2319 +
  1.2320 +			status = inSection(314);
  1.2321 +			pattern = /([[.]+)/;
  1.2322 +				    string = 'a.[b].';
  1.2323 +				    actualmatch = string.match(pattern);
  1.2324 +				    expectedmatch = Array('.[', '.[');
  1.2325 +				    addThis();
  1.2326 +
  1.2327 +/* ECMA doesn't have rules for [:
  1.2328 +   status = inSection(315);
  1.2329 +   pattern = /[a[:]b[:c]/;
  1.2330 +   string = 'abc';
  1.2331 +   actualmatch = string.match(pattern);
  1.2332 +   expectedmatch = Array('abc');
  1.2333 +   addThis();
  1.2334 +*/
  1.2335 +
  1.2336 +/* ECMA doesn't support (?>
  1.2337 +   status = inSection(316);
  1.2338 +   pattern = /((?>a+)b)/;
  1.2339 +   string = 'aaab';
  1.2340 +   actualmatch = string.match(pattern);
  1.2341 +   expectedmatch = Array('aaab', 'aaab');
  1.2342 +   addThis();
  1.2343 +
  1.2344 +   status = inSection(317);
  1.2345 +   pattern = /(?>(a+))b/;
  1.2346 +   string = 'aaab';
  1.2347 +   actualmatch = string.match(pattern);
  1.2348 +   expectedmatch = Array('aaab', 'aaa');
  1.2349 +   addThis();
  1.2350 +
  1.2351 +   status = inSection(318);
  1.2352 +   pattern = /((?>[^()]+)|\([^()]*\))+/;
  1.2353 +   string = '((abc(ade)ufh()()x';
  1.2354 +   actualmatch = string.match(pattern);
  1.2355 +   expectedmatch = Array('abc(ade)ufh()()x', 'x');
  1.2356 +   addThis();
  1.2357 +*/
  1.2358 +
  1.2359 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2360 +   status = inSection(319);
  1.2361 +   pattern = /\Z/;
  1.2362 +   string = 'a\nb\n';
  1.2363 +   actualmatch = string.match(pattern);
  1.2364 +   expectedmatch = Array('');
  1.2365 +   addThis();
  1.2366 +
  1.2367 +   status = inSection(320);
  1.2368 +   pattern = /\z/;
  1.2369 +   string = 'a\nb\n';
  1.2370 +   actualmatch = string.match(pattern);
  1.2371 +   expectedmatch = Array('');
  1.2372 +   addThis();
  1.2373 +*/
  1.2374 +
  1.2375 +				    status = inSection(321);
  1.2376 +				    pattern = /$/;
  1.2377 +				    string = 'a\nb\n';
  1.2378 +				    actualmatch = string.match(pattern);
  1.2379 +				    expectedmatch = Array('');
  1.2380 +				    addThis();
  1.2381 +
  1.2382 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2383 +   status = inSection(322);
  1.2384 +   pattern = /\Z/;
  1.2385 +   string = 'b\na\n';
  1.2386 +   actualmatch = string.match(pattern);
  1.2387 +   expectedmatch = Array('');
  1.2388 +   addThis();
  1.2389 +
  1.2390 +   status = inSection(323);
  1.2391 +   pattern = /\z/;
  1.2392 +   string = 'b\na\n';
  1.2393 +   actualmatch = string.match(pattern);
  1.2394 +   expectedmatch = Array('');
  1.2395 +   addThis();
  1.2396 +*/
  1.2397 +
  1.2398 +				    status = inSection(324);
  1.2399 +				    pattern = /$/;
  1.2400 +				    string = 'b\na\n';
  1.2401 +				    actualmatch = string.match(pattern);
  1.2402 +				    expectedmatch = Array('');
  1.2403 +				    addThis();
  1.2404 +
  1.2405 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2406 +   status = inSection(325);
  1.2407 +   pattern = /\Z/;
  1.2408 +   string = 'b\na';
  1.2409 +   actualmatch = string.match(pattern);
  1.2410 +   expectedmatch = Array('');
  1.2411 +   addThis();
  1.2412 +
  1.2413 +   status = inSection(326);
  1.2414 +   pattern = /\z/;
  1.2415 +   string = 'b\na';
  1.2416 +   actualmatch = string.match(pattern);
  1.2417 +   expectedmatch = Array('');
  1.2418 +   addThis();
  1.2419 +*/
  1.2420 +
  1.2421 +				    status = inSection(327);
  1.2422 +				    pattern = /$/;
  1.2423 +				    string = 'b\na';
  1.2424 +				    actualmatch = string.match(pattern);
  1.2425 +				    expectedmatch = Array('');
  1.2426 +				    addThis();
  1.2427 +
  1.2428 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2429 +   status = inSection(328);
  1.2430 +   pattern = /\Z/m;
  1.2431 +   string = 'a\nb\n';
  1.2432 +   actualmatch = string.match(pattern);
  1.2433 +   expectedmatch = Array('');
  1.2434 +   addThis();
  1.2435 +
  1.2436 +   status = inSection(329);
  1.2437 +   pattern = /\z/m;
  1.2438 +   string = 'a\nb\n';
  1.2439 +   actualmatch = string.match(pattern);
  1.2440 +   expectedmatch = Array('');
  1.2441 +   addThis();
  1.2442 +*/
  1.2443 +
  1.2444 +				    status = inSection(330);
  1.2445 +				    pattern = /$/m;
  1.2446 +				    string = 'a\nb\n';
  1.2447 +				    actualmatch = string.match(pattern);
  1.2448 +				    expectedmatch = Array('');
  1.2449 +				    addThis();
  1.2450 +
  1.2451 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2452 +   status = inSection(331);
  1.2453 +   pattern = /\Z/m;
  1.2454 +   string = 'b\na\n';
  1.2455 +   actualmatch = string.match(pattern);
  1.2456 +   expectedmatch = Array('');
  1.2457 +   addThis();
  1.2458 +
  1.2459 +   status = inSection(332);
  1.2460 +   pattern = /\z/m;
  1.2461 +   string = 'b\na\n';
  1.2462 +   actualmatch = string.match(pattern);
  1.2463 +   expectedmatch = Array('');
  1.2464 +   addThis();
  1.2465 +*/
  1.2466 +
  1.2467 +				    status = inSection(333);
  1.2468 +				    pattern = /$/m;
  1.2469 +				    string = 'b\na\n';
  1.2470 +				    actualmatch = string.match(pattern);
  1.2471 +				    expectedmatch = Array('');
  1.2472 +				    addThis();
  1.2473 +
  1.2474 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2475 +   status = inSection(334);
  1.2476 +   pattern = /\Z/m;
  1.2477 +   string = 'b\na';
  1.2478 +   actualmatch = string.match(pattern);
  1.2479 +   expectedmatch = Array('');
  1.2480 +   addThis();
  1.2481 +
  1.2482 +   status = inSection(335);
  1.2483 +   pattern = /\z/m;
  1.2484 +   string = 'b\na';
  1.2485 +   actualmatch = string.match(pattern);
  1.2486 +   expectedmatch = Array('');
  1.2487 +   addThis();
  1.2488 +*/
  1.2489 +
  1.2490 +				    status = inSection(336);
  1.2491 +				    pattern = /$/m;
  1.2492 +				    string = 'b\na';
  1.2493 +				    actualmatch = string.match(pattern);
  1.2494 +				    expectedmatch = Array('');
  1.2495 +				    addThis();
  1.2496 +
  1.2497 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2498 +   status = inSection(337);
  1.2499 +   pattern = /a\Z/;
  1.2500 +   string = 'b\na\n';
  1.2501 +   actualmatch = string.match(pattern);
  1.2502 +   expectedmatch = Array('a');
  1.2503 +   addThis();
  1.2504 +*/
  1.2505 +
  1.2506 +/* $ only matches end of input unless multiline
  1.2507 +   status = inSection(338);
  1.2508 +   pattern = /a$/;
  1.2509 +   string = 'b\na\n';
  1.2510 +   actualmatch = string.match(pattern);
  1.2511 +   expectedmatch = Array('a');
  1.2512 +   addThis();
  1.2513 +*/
  1.2514 +
  1.2515 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2516 +   status = inSection(339);
  1.2517 +   pattern = /a\Z/;
  1.2518 +   string = 'b\na';
  1.2519 +   actualmatch = string.match(pattern);
  1.2520 +   expectedmatch = Array('a');
  1.2521 +   addThis();
  1.2522 +
  1.2523 +   status = inSection(340);
  1.2524 +   pattern = /a\z/;
  1.2525 +   string = 'b\na';
  1.2526 +   actualmatch = string.match(pattern);
  1.2527 +   expectedmatch = Array('a');
  1.2528 +   addThis();
  1.2529 +*/
  1.2530 +
  1.2531 +				    status = inSection(341);
  1.2532 +				    pattern = /a$/;
  1.2533 +				    string = 'b\na';
  1.2534 +				    actualmatch = string.match(pattern);
  1.2535 +				    expectedmatch = Array('a');
  1.2536 +				    addThis();
  1.2537 +
  1.2538 +				    status = inSection(342);
  1.2539 +				    pattern = /a$/m;
  1.2540 +				    string = 'a\nb\n';
  1.2541 +				    actualmatch = string.match(pattern);
  1.2542 +				    expectedmatch = Array('a');
  1.2543 +				    addThis();
  1.2544 +
  1.2545 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2546 +   status = inSection(343);
  1.2547 +   pattern = /a\Z/m;
  1.2548 +   string = 'b\na\n';
  1.2549 +   actualmatch = string.match(pattern);
  1.2550 +   expectedmatch = Array('a');
  1.2551 +   addThis();
  1.2552 +*/
  1.2553 +
  1.2554 +				    status = inSection(344);
  1.2555 +				    pattern = /a$/m;
  1.2556 +				    string = 'b\na\n';
  1.2557 +				    actualmatch = string.match(pattern);
  1.2558 +				    expectedmatch = Array('a');
  1.2559 +				    addThis();
  1.2560 +
  1.2561 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2562 +   status = inSection(345);
  1.2563 +   pattern = /a\Z/m;
  1.2564 +   string = 'b\na';
  1.2565 +   actualmatch = string.match(pattern);
  1.2566 +   expectedmatch = Array('a');
  1.2567 +   addThis();
  1.2568 +
  1.2569 +   status = inSection(346);
  1.2570 +   pattern = /a\z/m;
  1.2571 +   string = 'b\na';
  1.2572 +   actualmatch = string.match(pattern);
  1.2573 +   expectedmatch = Array('a');
  1.2574 +   addThis();
  1.2575 +*/
  1.2576 +
  1.2577 +				    status = inSection(347);
  1.2578 +				    pattern = /a$/m;
  1.2579 +				    string = 'b\na';
  1.2580 +				    actualmatch = string.match(pattern);
  1.2581 +				    expectedmatch = Array('a');
  1.2582 +				    addThis();
  1.2583 +
  1.2584 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2585 +   status = inSection(348);
  1.2586 +   pattern = /aa\Z/;
  1.2587 +   string = 'b\naa\n';
  1.2588 +   actualmatch = string.match(pattern);
  1.2589 +   expectedmatch = Array('aa');
  1.2590 +   addThis();
  1.2591 +*/
  1.2592 +
  1.2593 +/* $ only matches end of input unless multiline
  1.2594 +   status = inSection(349);
  1.2595 +   pattern = /aa$/;
  1.2596 +   string = 'b\naa\n';
  1.2597 +   actualmatch = string.match(pattern);
  1.2598 +   expectedmatch = Array('aa');
  1.2599 +   addThis();
  1.2600 +*/
  1.2601 +
  1.2602 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2603 +   status = inSection(350);
  1.2604 +   pattern = /aa\Z/;
  1.2605 +   string = 'b\naa';
  1.2606 +   actualmatch = string.match(pattern);
  1.2607 +   expectedmatch = Array('aa');
  1.2608 +   addThis();
  1.2609 +
  1.2610 +   status = inSection(351);
  1.2611 +   pattern = /aa\z/;
  1.2612 +   string = 'b\naa';
  1.2613 +   actualmatch = string.match(pattern);
  1.2614 +   expectedmatch = Array('aa');
  1.2615 +   addThis();
  1.2616 +*/
  1.2617 +
  1.2618 +				    status = inSection(352);
  1.2619 +				    pattern = /aa$/;
  1.2620 +				    string = 'b\naa';
  1.2621 +				    actualmatch = string.match(pattern);
  1.2622 +				    expectedmatch = Array('aa');
  1.2623 +				    addThis();
  1.2624 +
  1.2625 +				    status = inSection(353);
  1.2626 +				    pattern = /aa$/m;
  1.2627 +				    string = 'aa\nb\n';
  1.2628 +				    actualmatch = string.match(pattern);
  1.2629 +				    expectedmatch = Array('aa');
  1.2630 +				    addThis();
  1.2631 +
  1.2632 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2633 +   status = inSection(354);
  1.2634 +   pattern = /aa\Z/m;
  1.2635 +   string = 'b\naa\n';
  1.2636 +   actualmatch = string.match(pattern);
  1.2637 +   expectedmatch = Array('aa');
  1.2638 +   addThis();
  1.2639 +*/
  1.2640 +
  1.2641 +				    status = inSection(355);
  1.2642 +				    pattern = /aa$/m;
  1.2643 +				    string = 'b\naa\n';
  1.2644 +				    actualmatch = string.match(pattern);
  1.2645 +				    expectedmatch = Array('aa');
  1.2646 +				    addThis();
  1.2647 +
  1.2648 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2649 +   status = inSection(356);
  1.2650 +   pattern = /aa\Z/m;
  1.2651 +   string = 'b\naa';
  1.2652 +   actualmatch = string.match(pattern);
  1.2653 +   expectedmatch = Array('aa');
  1.2654 +   addThis();
  1.2655 +
  1.2656 +   status = inSection(357);
  1.2657 +   pattern = /aa\z/m;
  1.2658 +   string = 'b\naa';
  1.2659 +   actualmatch = string.match(pattern);
  1.2660 +   expectedmatch = Array('aa');
  1.2661 +   addThis();
  1.2662 +*/
  1.2663 +
  1.2664 +				    status = inSection(358);
  1.2665 +				    pattern = /aa$/m;
  1.2666 +				    string = 'b\naa';
  1.2667 +				    actualmatch = string.match(pattern);
  1.2668 +				    expectedmatch = Array('aa');
  1.2669 +				    addThis();
  1.2670 +
  1.2671 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2672 +   status = inSection(359);
  1.2673 +   pattern = /ab\Z/;
  1.2674 +   string = 'b\nab\n';
  1.2675 +   actualmatch = string.match(pattern);
  1.2676 +   expectedmatch = Array('ab');
  1.2677 +   addThis();
  1.2678 +*/
  1.2679 +
  1.2680 +/* $ only matches end of input unless multiline
  1.2681 +   status = inSection(360);
  1.2682 +   pattern = /ab$/;
  1.2683 +   string = 'b\nab\n';
  1.2684 +   actualmatch = string.match(pattern);
  1.2685 +   expectedmatch = Array('ab');
  1.2686 +   addThis();
  1.2687 +*/
  1.2688 +
  1.2689 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2690 +   status = inSection(361);
  1.2691 +   pattern = /ab\Z/;
  1.2692 +   string = 'b\nab';
  1.2693 +   actualmatch = string.match(pattern);
  1.2694 +   expectedmatch = Array('ab');
  1.2695 +   addThis();
  1.2696 +
  1.2697 +   status = inSection(362);
  1.2698 +   pattern = /ab\z/;
  1.2699 +   string = 'b\nab';
  1.2700 +   actualmatch = string.match(pattern);
  1.2701 +   expectedmatch = Array('ab');
  1.2702 +   addThis();
  1.2703 +*/
  1.2704 +
  1.2705 +				    status = inSection(363);
  1.2706 +				    pattern = /ab$/;
  1.2707 +				    string = 'b\nab';
  1.2708 +				    actualmatch = string.match(pattern);
  1.2709 +				    expectedmatch = Array('ab');
  1.2710 +				    addThis();
  1.2711 +
  1.2712 +				    status = inSection(364);
  1.2713 +				    pattern = /ab$/m;
  1.2714 +				    string = 'ab\nb\n';
  1.2715 +				    actualmatch = string.match(pattern);
  1.2716 +				    expectedmatch = Array('ab');
  1.2717 +				    addThis();
  1.2718 +
  1.2719 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2720 +   status = inSection(365);
  1.2721 +   pattern = /ab\Z/m;
  1.2722 +   string = 'b\nab\n';
  1.2723 +   actualmatch = string.match(pattern);
  1.2724 +   expectedmatch = Array('ab');
  1.2725 +   addThis();
  1.2726 +*/
  1.2727 +
  1.2728 +				    status = inSection(366);
  1.2729 +				    pattern = /ab$/m;
  1.2730 +				    string = 'b\nab\n';
  1.2731 +				    actualmatch = string.match(pattern);
  1.2732 +				    expectedmatch = Array('ab');
  1.2733 +				    addThis();
  1.2734 +
  1.2735 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2736 +   status = inSection(367);
  1.2737 +   pattern = /ab\Z/m;
  1.2738 +   string = 'b\nab';
  1.2739 +   actualmatch = string.match(pattern);
  1.2740 +   expectedmatch = Array('ab');
  1.2741 +   addThis();
  1.2742 +
  1.2743 +   status = inSection(368);
  1.2744 +   pattern = /ab\z/m;
  1.2745 +   string = 'b\nab';
  1.2746 +   actualmatch = string.match(pattern);
  1.2747 +   expectedmatch = Array('ab');
  1.2748 +   addThis();
  1.2749 +*/
  1.2750 +
  1.2751 +				    status = inSection(369);
  1.2752 +				    pattern = /ab$/m;
  1.2753 +				    string = 'b\nab';
  1.2754 +				    actualmatch = string.match(pattern);
  1.2755 +				    expectedmatch = Array('ab');
  1.2756 +				    addThis();
  1.2757 +
  1.2758 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2759 +   status = inSection(370);
  1.2760 +   pattern = /abb\Z/;
  1.2761 +   string = 'b\nabb\n';
  1.2762 +   actualmatch = string.match(pattern);
  1.2763 +   expectedmatch = Array('abb');
  1.2764 +   addThis();
  1.2765 +*/
  1.2766 +
  1.2767 +/* $ only matches end of input unless multiline
  1.2768 +   status = inSection(371);
  1.2769 +   pattern = /abb$/;
  1.2770 +   string = 'b\nabb\n';
  1.2771 +   actualmatch = string.match(pattern);
  1.2772 +   expectedmatch = Array('abb');
  1.2773 +   addThis();
  1.2774 +*/
  1.2775 +
  1.2776 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2777 +   status = inSection(372);
  1.2778 +   pattern = /abb\Z/;
  1.2779 +   string = 'b\nabb';
  1.2780 +   actualmatch = string.match(pattern);
  1.2781 +   expectedmatch = Array('abb');
  1.2782 +   addThis();
  1.2783 +
  1.2784 +   status = inSection(373);
  1.2785 +   pattern = /abb\z/;
  1.2786 +   string = 'b\nabb';
  1.2787 +   actualmatch = string.match(pattern);
  1.2788 +   expectedmatch = Array('abb');
  1.2789 +   addThis();
  1.2790 +*/
  1.2791 +
  1.2792 +				    status = inSection(374);
  1.2793 +				    pattern = /abb$/;
  1.2794 +				    string = 'b\nabb';
  1.2795 +				    actualmatch = string.match(pattern);
  1.2796 +				    expectedmatch = Array('abb');
  1.2797 +				    addThis();
  1.2798 +
  1.2799 +				    status = inSection(375);
  1.2800 +				    pattern = /abb$/m;
  1.2801 +				    string = 'abb\nb\n';
  1.2802 +				    actualmatch = string.match(pattern);
  1.2803 +				    expectedmatch = Array('abb');
  1.2804 +				    addThis();
  1.2805 +
  1.2806 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2807 +   status = inSection(376);
  1.2808 +   pattern = /abb\Z/m;
  1.2809 +   string = 'b\nabb\n';
  1.2810 +   actualmatch = string.match(pattern);
  1.2811 +   expectedmatch = Array('abb');
  1.2812 +   addThis();
  1.2813 +*/
  1.2814 +
  1.2815 +				    status = inSection(377);
  1.2816 +				    pattern = /abb$/m;
  1.2817 +				    string = 'b\nabb\n';
  1.2818 +				    actualmatch = string.match(pattern);
  1.2819 +				    expectedmatch = Array('abb');
  1.2820 +				    addThis();
  1.2821 +
  1.2822 +/* Perl has \Z has end-of-line, ECMA doesn't
  1.2823 +   status = inSection(378);
  1.2824 +   pattern = /abb\Z/m;
  1.2825 +   string = 'b\nabb';
  1.2826 +   actualmatch = string.match(pattern);
  1.2827 +   expectedmatch = Array('abb');
  1.2828 +   addThis();
  1.2829 +
  1.2830 +   status = inSection(379);
  1.2831 +   pattern = /abb\z/m;
  1.2832 +   string = 'b\nabb';
  1.2833 +   actualmatch = string.match(pattern);
  1.2834 +   expectedmatch = Array('abb');
  1.2835 +   addThis();
  1.2836 +*/
  1.2837 +
  1.2838 +				    status = inSection(380);
  1.2839 +				    pattern = /abb$/m;
  1.2840 +				    string = 'b\nabb';
  1.2841 +				    actualmatch = string.match(pattern);
  1.2842 +				    expectedmatch = Array('abb');
  1.2843 +				    addThis();
  1.2844 +
  1.2845 +				    status = inSection(381);
  1.2846 +				    pattern = /(^|x)(c)/;
  1.2847 +				    string = 'ca';
  1.2848 +				    actualmatch = string.match(pattern);
  1.2849 +				    expectedmatch = Array('c', '', 'c');
  1.2850 +				    addThis();
  1.2851 +
  1.2852 +				    status = inSection(382);
  1.2853 +				    pattern = /foo.bart/;
  1.2854 +				    string = 'foo.bart';
  1.2855 +				    actualmatch = string.match(pattern);
  1.2856 +				    expectedmatch = Array('foo.bart');
  1.2857 +				    addThis();
  1.2858 +
  1.2859 +				    status = inSection(383);
  1.2860 +				    pattern = /^d[x][x][x]/m;
  1.2861 +				    string = 'abcd\ndxxx';
  1.2862 +				    actualmatch = string.match(pattern);
  1.2863 +				    expectedmatch = Array('dxxx');
  1.2864 +				    addThis();
  1.2865 +
  1.2866 +				    status = inSection(384);
  1.2867 +				    pattern = /tt+$/;
  1.2868 +				    string = 'xxxtt';
  1.2869 +				    actualmatch = string.match(pattern);
  1.2870 +				    expectedmatch = Array('tt');
  1.2871 +				    addThis();
  1.2872 +
  1.2873 +/* ECMA spec says that each atom in a range must be a single character
  1.2874 +   status = inSection(385);
  1.2875 +   pattern = /([a-\d]+)/;
  1.2876 +   string = 'za-9z';
  1.2877 +   actualmatch = string.match(pattern);
  1.2878 +   expectedmatch = Array('9', '9');
  1.2879 +   addThis();
  1.2880 +
  1.2881 +   status = inSection(386);
  1.2882 +   pattern = /([\d-z]+)/;
  1.2883 +   string = 'a0-za';
  1.2884 +   actualmatch = string.match(pattern);
  1.2885 +   expectedmatch = Array('0-z', '0-z');
  1.2886 +   addThis();
  1.2887 +*/
  1.2888 +
  1.2889 +/* ECMA doesn't support [:
  1.2890 +   status = inSection(387);
  1.2891 +   pattern = /([a-[:digit:]]+)/;
  1.2892 +   string = 'za-9z';
  1.2893 +   actualmatch = string.match(pattern);
  1.2894 +   expectedmatch = Array('a-9', 'a-9');
  1.2895 +   addThis();
  1.2896 +
  1.2897 +   status = inSection(388);
  1.2898 +   pattern = /([[:digit:]-z]+)/;
  1.2899 +   string = '=0-z=';
  1.2900 +   actualmatch = string.match(pattern);
  1.2901 +   expectedmatch = Array('0-z', '0-z');
  1.2902 +   addThis();
  1.2903 +
  1.2904 +   status = inSection(389);
  1.2905 +   pattern = /([[:digit:]-[:alpha:]]+)/;
  1.2906 +   string = '=0-z=';
  1.2907 +   actualmatch = string.match(pattern);
  1.2908 +   expectedmatch = Array('0-z', '0-z');
  1.2909 +   addThis();
  1.2910 +*/
  1.2911 +
  1.2912 +				    status = inSection(390);
  1.2913 +				    pattern = /(\d+\.\d+)/;
  1.2914 +				    string = '3.1415926';
  1.2915 +				    actualmatch = string.match(pattern);
  1.2916 +				    expectedmatch = Array('3.1415926', '3.1415926');
  1.2917 +				    addThis();
  1.2918 +
  1.2919 +				    status = inSection(391);
  1.2920 +				    pattern = /\.c(pp|xx|c)?$/i;
  1.2921 +				    string = 'IO.c';
  1.2922 +				    actualmatch = string.match(pattern);
  1.2923 +				    expectedmatch = Array('.c', undefined);
  1.2924 +				    addThis();
  1.2925 +
  1.2926 +				    status = inSection(392);
  1.2927 +				    pattern = /(\.c(pp|xx|c)?$)/i;
  1.2928 +				    string = 'IO.c';
  1.2929 +				    actualmatch = string.match(pattern);
  1.2930 +				    expectedmatch = Array('.c', '.c', undefined);
  1.2931 +				    addThis();
  1.2932 +
  1.2933 +				    status = inSection(393);
  1.2934 +				    pattern = /(^|a)b/;
  1.2935 +				    string = 'ab';
  1.2936 +				    actualmatch = string.match(pattern);
  1.2937 +				    expectedmatch = Array('ab', 'a');
  1.2938 +				    addThis();
  1.2939 +
  1.2940 +				    status = inSection(394);
  1.2941 +				    pattern = /^([ab]*?)(b)?(c)$/;
  1.2942 +				    string = 'abac';
  1.2943 +				    actualmatch = string.match(pattern);
  1.2944 +				    expectedmatch = Array('abac', 'aba', undefined, 'c');
  1.2945 +				    addThis();
  1.2946 +
  1.2947 +				    status = inSection(395);
  1.2948 +				    pattern = /^(?:.,){2}c/i;
  1.2949 +				    string = 'a,b,c';
  1.2950 +				    actualmatch = string.match(pattern);
  1.2951 +				    expectedmatch = Array('a,b,c');
  1.2952 +				    addThis();
  1.2953 +
  1.2954 +				    status = inSection(396);
  1.2955 +				    pattern = /^(.,){2}c/i;
  1.2956 +				    string = 'a,b,c';
  1.2957 +				    actualmatch = string.match(pattern);
  1.2958 +				    expectedmatch =  Array('a,b,c', 'b,');
  1.2959 +				    addThis();
  1.2960 +
  1.2961 +				    status = inSection(397);
  1.2962 +				    pattern = /^(?:[^,]*,){2}c/;
  1.2963 +				    string = 'a,b,c';
  1.2964 +				    actualmatch = string.match(pattern);
  1.2965 +				    expectedmatch = Array('a,b,c');
  1.2966 +				    addThis();
  1.2967 +
  1.2968 +				    status = inSection(398);
  1.2969 +				    pattern = /^([^,]*,){2}c/;
  1.2970 +				    string = 'a,b,c';
  1.2971 +				    actualmatch = string.match(pattern);
  1.2972 +				    expectedmatch = Array('a,b,c', 'b,');
  1.2973 +				    addThis();
  1.2974 +
  1.2975 +				    status = inSection(399);
  1.2976 +				    pattern = /^([^,]*,){3}d/;
  1.2977 +				    string = 'aaa,b,c,d';
  1.2978 +				    actualmatch = string.match(pattern);
  1.2979 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.2980 +				    addThis();
  1.2981 +
  1.2982 +				    status = inSection(400);
  1.2983 +				    pattern = /^([^,]*,){3,}d/;
  1.2984 +				    string = 'aaa,b,c,d';
  1.2985 +				    actualmatch = string.match(pattern);
  1.2986 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.2987 +				    addThis();
  1.2988 +
  1.2989 +				    status = inSection(401);
  1.2990 +				    pattern = /^([^,]*,){0,3}d/;
  1.2991 +				    string = 'aaa,b,c,d';
  1.2992 +				    actualmatch = string.match(pattern);
  1.2993 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.2994 +				    addThis();
  1.2995 +
  1.2996 +				    status = inSection(402);
  1.2997 +				    pattern = /^([^,]{1,3},){3}d/i;
  1.2998 +				    string = 'aaa,b,c,d';
  1.2999 +				    actualmatch = string.match(pattern);
  1.3000 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3001 +				    addThis();
  1.3002 +
  1.3003 +				    status = inSection(403);
  1.3004 +				    pattern = /^([^,]{1,3},){3,}d/;
  1.3005 +				    string = 'aaa,b,c,d';
  1.3006 +				    actualmatch = string.match(pattern);
  1.3007 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3008 +				    addThis();
  1.3009 +
  1.3010 +				    status = inSection(404);
  1.3011 +				    pattern = /^([^,]{1,3},){0,3}d/;
  1.3012 +				    string = 'aaa,b,c,d';
  1.3013 +				    actualmatch = string.match(pattern);
  1.3014 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3015 +				    addThis();
  1.3016 +
  1.3017 +				    status = inSection(405);
  1.3018 +				    pattern = /^([^,]{1,},){3}d/;
  1.3019 +				    string = 'aaa,b,c,d';
  1.3020 +				    actualmatch = string.match(pattern);
  1.3021 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3022 +				    addThis();
  1.3023 +
  1.3024 +				    status = inSection(406);
  1.3025 +				    pattern = /^([^,]{1,},){3,}d/;
  1.3026 +				    string = 'aaa,b,c,d';
  1.3027 +				    actualmatch = string.match(pattern);
  1.3028 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3029 +				    addThis();
  1.3030 +
  1.3031 +				    status = inSection(407);
  1.3032 +				    pattern = /^([^,]{1,},){0,3}d/;
  1.3033 +				    string = 'aaa,b,c,d';
  1.3034 +				    actualmatch = string.match(pattern);
  1.3035 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3036 +				    addThis();
  1.3037 +
  1.3038 +				    status = inSection(408);
  1.3039 +				    pattern = /^([^,]{0,3},){3}d/i;
  1.3040 +				    string = 'aaa,b,c,d';
  1.3041 +				    actualmatch = string.match(pattern);
  1.3042 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3043 +				    addThis();
  1.3044 +
  1.3045 +				    status = inSection(409);
  1.3046 +				    pattern = /^([^,]{0,3},){3,}d/;
  1.3047 +				    string = 'aaa,b,c,d';
  1.3048 +				    actualmatch = string.match(pattern);
  1.3049 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3050 +				    addThis();
  1.3051 +
  1.3052 +				    status = inSection(410);
  1.3053 +				    pattern = /^([^,]{0,3},){0,3}d/;
  1.3054 +				    string = 'aaa,b,c,d';
  1.3055 +				    actualmatch = string.match(pattern);
  1.3056 +				    expectedmatch = Array('aaa,b,c,d', 'c,');
  1.3057 +				    addThis();
  1.3058 +
  1.3059 +/* ECMA doesn't support \A
  1.3060 +   status = inSection(411);
  1.3061 +   pattern = /(?!\A)x/m;
  1.3062 +   string = 'a\nxb\n';
  1.3063 +   actualmatch = string.match(pattern);
  1.3064 +   expectedmatch = Array('\n');
  1.3065 +   addThis();
  1.3066 +*/
  1.3067 +
  1.3068 +				    status = inSection(412);
  1.3069 +				    pattern = /^(a(b)?)+$/;
  1.3070 +				    string = 'aba';
  1.3071 +				    actualmatch = string.match(pattern);
  1.3072 +				    expectedmatch = Array('aba', 'a', undefined);
  1.3073 +				    addThis();
  1.3074 +
  1.3075 +				    status = inSection(413);
  1.3076 +				    pattern = /^(aa(bb)?)+$/;
  1.3077 +				    string = 'aabbaa';
  1.3078 +				    actualmatch = string.match(pattern);
  1.3079 +				    expectedmatch = Array('aabbaa', 'aa', undefined);
  1.3080 +				    addThis();
  1.3081 +
  1.3082 +				    status = inSection(414);
  1.3083 +				    pattern = /^.{9}abc.*\n/m;
  1.3084 +				    string = '123\nabcabcabcabc\n';
  1.3085 +				    actualmatch = string.match(pattern);
  1.3086 +				    expectedmatch = Array('abcabcabcabc\n');
  1.3087 +				    addThis();
  1.3088 +
  1.3089 +				    status = inSection(415);
  1.3090 +				    pattern = /^(a)?a$/;
  1.3091 +				    string = 'a';
  1.3092 +				    actualmatch = string.match(pattern);
  1.3093 +				    expectedmatch = Array('a', undefined);
  1.3094 +				    addThis();
  1.3095 +
  1.3096 +				    status = inSection(416);
  1.3097 +				    pattern = /^(a\1?)(a\1?)(a\2?)(a\3?)$/;
  1.3098 +				    string = 'aaaaaa';
  1.3099 +				    actualmatch = string.match(pattern);
  1.3100 +				    expectedmatch = Array('aaaaaa', 'a', 'aa', 'a', 'aa');
  1.3101 +				    addThis();
  1.3102 +
  1.3103 +/* Can't refer to a capture before it's encountered & completed
  1.3104 +   status = inSection(417);
  1.3105 +   pattern = /^(a\1?){4}$/;
  1.3106 +   string = 'aaaaaa';
  1.3107 +   actualmatch = string.match(pattern);
  1.3108 +   expectedmatch = Array('aaaaaa', 'aaa');
  1.3109 +   addThis();
  1.3110 +*/
  1.3111 +
  1.3112 +				    status = inSection(418);
  1.3113 +				    pattern = /^(0+)?(?:x(1))?/;
  1.3114 +				    string = 'x1';
  1.3115 +				    actualmatch = string.match(pattern);
  1.3116 +				    expectedmatch = Array('x1', undefined, '1');
  1.3117 +				    addThis();
  1.3118 +
  1.3119 +				    status = inSection(419);
  1.3120 +				    pattern = /^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?/;
  1.3121 +				    string = '012cxx0190';
  1.3122 +				    actualmatch = string.match(pattern);
  1.3123 +				    expectedmatch = Array('012cxx0190', '012c', undefined, '0190');
  1.3124 +				    addThis();
  1.3125 +
  1.3126 +				    status = inSection(420);
  1.3127 +				    pattern = /^(b+?|a){1,2}c/;
  1.3128 +				    string = 'bbbac';
  1.3129 +				    actualmatch = string.match(pattern);
  1.3130 +				    expectedmatch = Array('bbbac', 'a');
  1.3131 +				    addThis();
  1.3132 +
  1.3133 +				    status = inSection(421);
  1.3134 +				    pattern = /^(b+?|a){1,2}c/;
  1.3135 +				    string = 'bbbbac';
  1.3136 +				    actualmatch = string.match(pattern);
  1.3137 +				    expectedmatch = Array('bbbbac', 'a');
  1.3138 +				    addThis();
  1.3139 +
  1.3140 +				    status = inSection(422);
  1.3141 +				    pattern = /((?:aaaa|bbbb)cccc)?/;
  1.3142 +				    string = 'aaaacccc';
  1.3143 +				    actualmatch = string.match(pattern);
  1.3144 +				    expectedmatch = Array('aaaacccc', 'aaaacccc');
  1.3145 +				    addThis();
  1.3146 +
  1.3147 +				    status = inSection(423);
  1.3148 +				    pattern = /((?:aaaa|bbbb)cccc)?/;
  1.3149 +				    string = 'bbbbcccc';
  1.3150 +				    actualmatch = string.match(pattern);
  1.3151 +				    expectedmatch = Array('bbbbcccc', 'bbbbcccc');
  1.3152 +				    addThis();
  1.3153 +
  1.3154 +
  1.3155 +
  1.3156 +
  1.3157 +//-----------------------------------------------------------------------------
  1.3158 +				    test();
  1.3159 +//-----------------------------------------------------------------------------
  1.3160 +
  1.3161 +
  1.3162 +
  1.3163 +				    function addThis()
  1.3164 +			  {
  1.3165 +			    if(omitCurrentSection())
  1.3166 +			      return;
  1.3167 +
  1.3168 +			    statusmessages[i] = status;
  1.3169 +			    patterns[i] = pattern;
  1.3170 +			    strings[i] = string;
  1.3171 +			    actualmatches[i] = actualmatch;
  1.3172 +			    expectedmatches[i] = expectedmatch;
  1.3173 +			    i++;
  1.3174 +			  }
  1.3175 +
  1.3176 +
  1.3177 +				    function omitCurrentSection()
  1.3178 +			  {
  1.3179 +			    try
  1.3180 +			    {
  1.3181 +			      // current section number is in global status variable
  1.3182 +			      var n = status.match(/(\d+)/)[1];
  1.3183 +			      return ((n < cnLBOUND) || (n > cnUBOUND));
  1.3184 +			    }
  1.3185 +			    catch(e)
  1.3186 +			    {
  1.3187 +			      return false;
  1.3188 +			    }
  1.3189 +			  }
  1.3190 +
  1.3191 +
  1.3192 +				    function test()
  1.3193 +			  {
  1.3194 +			    enterFunc ('test');
  1.3195 +			    printBugNumber(BUGNUMBER);
  1.3196 +			    printStatus (summary);
  1.3197 +			    testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
  1.3198 +			    exitFunc ('test');
  1.3199 +			  }

mercurial