11510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
21510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
31510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
41510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Redistribution and use in source and binary forms, with or without
51510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// modification, are permitted provided that the following conditions
61510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// are met:
71510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 1.  Redistributions of source code must retain the above copyright
81510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     notice, this list of conditions and the following disclaimer.
91510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 2.  Redistributions in binary form must reproduce the above copyright
101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     notice, this list of conditions and the following disclaimer in the
111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     documentation and/or other materials provided with the distribution.
121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgdescription(
251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org'Test regular expression processing with alternatives that match consuming no characters'
261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org);
271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar emptyStr = "";
291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar s1 = "xxxx";
301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar s2 = "aaaa";
311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar s3 = "aax";
321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar s4 = "abab";
331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar s5 = "ab";
341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar s6 = "xabx";
351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar s7 = "g0";
361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty first alternative greedy '*'
381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re1 = new RegExp(/(?:|a|z)*/);
391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re1)', '[""]');
401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re1)', '[""]');
411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re1)', '["aaaa"]');
421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re1)', '["aa"]');
431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty middle alternative greedy '*'
451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re2 = new RegExp(/(?:a||z)*/);
461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re2)', '[""]');
471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re2)', '[""]');
481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re2)', '["aaaa"]');
491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re2)', '["aa"]');
501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty last alternative greedy '*'
521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re3 = new RegExp(/(?:a|z|)*/);
531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re3)', '[""]');
541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re3)', '[""]');
551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re3)', '["aaaa"]');
561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re3)', '["aa"]');
571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty first alternative greedy '*'
591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re4 = new RegExp(/(|a|z)*/);
601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re4)', '["", undefined]');
611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re4)', '["", undefined]');
621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re4)', '["aaaa", "a"]');
631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re4)', '["aa", "a"]');
641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty middle alternative greedy '*'
661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re5 = new RegExp(/(a||z)*/);
671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re5)', '["", undefined]');
681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re5)', '["", undefined]');
691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re5)', '["aaaa", "a"]');
701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re5)', '["aa", "a"]');
711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty last alternative greedy '*'
731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re6 = new RegExp(/(a|z|)*/);
741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re6)', '["", undefined]');
751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re6)', '["", undefined]');
761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re6)', '["aaaa", "a"]');
771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re6)', '["aa", "a"]');
781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty first alternative fixed-count
801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re7 = new RegExp(/(?:|a|z){2,5}/);
811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re7)', '[""]');
821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re7)', '[""]');
831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re7)', '["aaa"]');
841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re7)', '["aa"]');
851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty middle alternative fixed-count
871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re8 = new RegExp(/(?:a||z){2,5}/);
881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re8)', '[""]');
891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re8)', '[""]');
901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re8)', '["aaaa"]');
911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re8)', '["aa"]');
921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty last alternative fixed-count
941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re9 = new RegExp(/(?:a|z|){2,5}/);
951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re9)', '[""]');
961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re9)', '[""]');
971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re9)', '["aaaa"]');
981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re9)', '["aa"]');
991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty first alternative non-greedy '*'
1011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re10 = new RegExp(/(?:|a|z)*?/);
1021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re10)', '[""]');
1031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re10)', '[""]');
1041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re10)', '[""]');
1051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re10)', '[""]');
1061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty middle alternative non-greedy '*'
1081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re11 = new RegExp(/(?:a||z)*?/);
1091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re11)', '[""]');
1101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re11)', '[""]');
1111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re11)', '[""]');
1121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re11)', '[""]');
1131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty last alternative non-greedy '*'
1151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re12 = new RegExp(/(?:a|z|)*?/);
1161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re12)', '[""]');
1171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re12)', '[""]');
1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re12)', '[""]');
1191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re12)', '[""]');
1201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty first alternative non-greedy '*'
1221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re13 = new RegExp(/(|a|z)*?/);
1231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re13)', '["", undefined]');
1241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re13)', '["", undefined]');
1251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re13)', '["", undefined]');
1261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re13)', '["", undefined]');
1271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty middle alternative non-greedy '*'
1291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re14 = new RegExp(/(a||z)*?/);
1301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re14)', '["", undefined]');
1311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re14)', '["", undefined]');
1321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re14)', '["", undefined]');
1331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re14)', '["", undefined]');
1341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty last alternative non-greedy '*'
1361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re15 = new RegExp(/(a|z|)*?/);
1371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re15)', '["", undefined]');
1381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re15)', '["", undefined]');
1391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re15)', '["", undefined]');
1401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re15)', '["", undefined]');
1411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty first alternative greedy '?'
1431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re16 = new RegExp(/(?:|a|z)?/);
1441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re16)', '[""]');
1451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re16)', '[""]');
1461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re16)', '["a"]');
1471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re16)', '["a"]');
1481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty middle alternative greedy '?'
1501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re17 = new RegExp(/(?:a||z)?/);
1511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re17)', '[""]');
1521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re17)', '[""]');
1531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re17)', '["a"]');
1541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re17)', '["a"]');
1551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty last alternative greedy '?'
1571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re18 = new RegExp(/(?:a|z|)?/);
1581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re18)', '[""]');
1591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re18)', '[""]');
1601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re18)', '["a"]');
1611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re18)', '["a"]');
1621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty first alternative greedy '?'
1641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re19 = new RegExp(/(|a|z)?/);
1651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re19)', '["", undefined]');
1661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re19)', '["", undefined]');
1671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re19)', '["a", "a"]');
1681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re19)', '["a", "a"]');
1691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty middle alternative greedy '?'
1711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re20 = new RegExp(/(a||z)?/);
1721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re20)', '["", undefined]');
1731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re20)', '["", undefined]');
1741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re20)', '["a", "a"]');
1751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re20)', '["a", "a"]');
1761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty last alternative greedy '?'
1781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re21 = new RegExp(/(a|z|)?/);
1791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re21)', '["", undefined]');
1801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re21)', '["", undefined]');
1811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re21)', '["a", "a"]');
1821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re21)', '["a", "a"]');
1831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty first alternative non-greedy '?'
1851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re22 = new RegExp(/(?:|a|z)??/);
1861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re22)', '[""]');
1871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re22)', '[""]');
1881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re22)', '[""]');
1891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re22)', '[""]');
1901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty middle alternative non-greedy '?'
1921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re23 = new RegExp(/(?:a||z)??/);
1931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re23)', '[""]');
1941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re23)', '[""]');
1951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re23)', '[""]');
1961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re23)', '[""]');
1971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty last alternative non-greedy '?'
1991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re24 = new RegExp(/(?:a|z|)??/);
2001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re24)', '[""]');
2011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re24)', '[""]');
2021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re24)', '[""]');
2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re24)', '[""]');
2041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty first alternative non-greedy '?'
2061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re25 = new RegExp(/(|a|z)??/);
2071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re25)', '["", undefined]');
2081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re25)', '["", undefined]');
2091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re25)', '["", undefined]');
2101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re25)', '["", undefined]');
2111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty middle alternative non-greedy '?'
2131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re26 = new RegExp(/(a||z)??/);
2141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re26)', '["", undefined]');
2151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re26)', '["", undefined]');
2161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re26)', '["", undefined]');
2171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re26)', '["", undefined]');
2181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Capturing empty last alternative non-greedy '?'
2201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re27 = new RegExp(/(a|z|)??/);
2211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re27)', '["", undefined]');
2221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re27)', '["", undefined]');
2231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re27)', '["", undefined]');
2241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re27)', '["", undefined]');
2251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty first alternative greedy '*' non-terminal
2271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re28 = new RegExp(/(?:|a|z)*x/);
2281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re28)', 'null');
2291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re28)', '["x"]');
2301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re28)', 'null');
2311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re28)', '["aax"]');
2321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty middle alternative greedy '*' non-terminal
2341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re29 = new RegExp(/(?:a||z)*x/);
2351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re29)', 'null');
2361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re29)', '["x"]');
2371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re29)', 'null');
2381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re29)', '["aax"]');
2391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing empty last alternative greedy '*' non-terminal
2411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re30 = new RegExp(/(?:a|z|)*x/);
2421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re30)', 'null');
2431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re30)', '["x"]');
2441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re30)', 'null');
2451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re30)', '["aax"]');
2461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing two possibly empty alternatives greedy '*'
2481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re31 = new RegExp(/(?:a*|b*)*/);
2491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re31)', '[""]');
2501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re31)', '[""]');
2511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re31)', '["aa"]');
2521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s4.match(re31)', '["abab"]');
2531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Non-capturing two possibly empty non-greedy alternatives non-greedy '*'
2551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re32 = new RegExp(/(?:a*?|b*?)*/);
2561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re32)', '[""]');
2571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re32)', '[""]');
2581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re32)', '["aaaa"]');
2591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s4.match(re32)', '["abab"]');
2601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s5.match(re32)', '["ab"]');
2611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s6.match(re32)', '[""]');
2621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Three possibly empty alternatives with greedy +
2641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re33 = new RegExp(/(?:(?:(?!))|g?|0*\*?)+/);
2651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re33)', '[""]');
2661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re33)', '[""]');
2671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s7.match(re33)', '["g0"]');
2681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// first alternative zero length fixed count
2701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar re34 = new RegExp(/(?:|a)/);
2711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('emptyStr.match(re34)', '[""]');
2721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s1.match(re34)', '[""]');
2731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s2.match(re34)', '[""]');
2741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgshouldBe('s3.match(re34)', '[""]');
275