// This test checks for proper incrementing around / over individual surrogates and surrogate pairs.
// This test should run without crashing.

function testRegExpMatch(re, str)
{
    for (let i = 0; i < 100; ++i) {
        let match = re.exec(str);
        if (!match || match[0] != str) {
            print(match);
            throw "Expected " + re + " to match \"" + str + "\" but it didn't";
        }
    }
}

function testRegExpNotMatch(re, str)
{
    for (let i = 0; i < 100; ++i) {
        let match = re.exec(str);
        if (match) {
            print(match);
            throw "Expected " + re + " to match \"" + str + "\" but it didn't";
        }
    }
}

let testString = "\ud800\ud800\udc00";
let greedyRegExp = /([^x]+)[^]*\1([^])/u;

testRegExpNotMatch(greedyRegExp, testString);

let nonGreedyRegExp = /(.*[^x]+?)[^]*([^])/u;

testRegExpMatch(nonGreedyRegExp, testString);

let testString2 = "\ud800\ud800\udc00Test\udc00123";
let backtrackGreedyRegExp = /.*[\x20-\udffff].\w*.\d{3}/u;

testRegExpMatch(backtrackGreedyRegExp, testString2);
