function shouldBe(actual, expected) {
    if (actual !== expected)
        throw new Error('bad value: ' + actual);
}

var hello0 = "Hello"; // Ensure that "Hello" is registered in AtomStringTable.
var hello1 = createNonRopeNonAtomString("Hello");

function test(string)
{
    var result = [0, 0, 0, 0];
    var object = { };
    for (var i = 0; i < 10000; ++i) {
        var index = i % 4;
        result[index] = string.codePointAt(index);
        if (i === 5000) {
            // Enforce JSValue::toPropertyKey. After this, string is atomic.
            object[string];
        }
    }
    return result;
}
noInline(test);

for (var i = 0; i < 1000; ++i) {
    var newString = createNonRopeNonAtomString("Hello");
    var result = test(newString)
    shouldBe(result[0], 72);
    shouldBe(result[1], 101);
    shouldBe(result[2], 108);
    shouldBe(result[3], 108);
}
