X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/array-find-does-not-lookup-twice.js diff --git a/tests/stress/array-find-does-not-lookup-twice.js b/tests/stress/array-find-does-not-lookup-twice.js new file mode 100644 index 0000000..87f767f --- /dev/null +++ b/tests/stress/array-find-does-not-lookup-twice.js @@ -0,0 +1,47 @@ +function shouldBe(actual, expected) { + if (actual !== expected) + throw new Error('bad value: ' + actual); +} + +function shouldThrow(func, message) { + var error = null; + try { + func(); + } catch (e) { + error = e; + } + if (!error) + throw new Error("not thrown."); + if (String(error) !== message) + throw new Error("bad error: " + String(error)); +} + +var array = new Array(10); + +for (var i = 0; i < 10; ++i) { + (function (index) { + var seenOnce = false; + Object.defineProperty(array, index, { + get() { + if (seenOnce) + throw new Error('get is called.' + index); + seenOnce = true; + return index; + } + }); + }(i)); +} + +shouldBe(array.length, 10); + +// Doesn't throw any errors. +var findValue = array.find(function (value) { + return value === 9; +}); +shouldBe(findValue, 9); + +for (var i = 0; i < 10; ++i) { + shouldThrow(function () { + var value = array[i]; + }, "Error: get is called." + i); +}