diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /js/src/jit-test/tests/basic/dictionary-delete-compact.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/basic/dictionary-delete-compact.js')
-rw-r--r-- | js/src/jit-test/tests/basic/dictionary-delete-compact.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/basic/dictionary-delete-compact.js b/js/src/jit-test/tests/basic/dictionary-delete-compact.js new file mode 100644 index 0000000000..73887c978c --- /dev/null +++ b/js/src/jit-test/tests/basic/dictionary-delete-compact.js @@ -0,0 +1,74 @@ +// Stress test dictionary object/map property deletion/addition/compaction. + +const numProps = 1000; + +// Delete a range of properties and check correctness. +function deleteRange(deleteStart, deleteEnd) { + for (var i = 0; i < numProps; i++) { + o["x" + i] = i; + } + for (var i = deleteStart; i < deleteEnd; i++) { + delete o["x" + i]; + } + assertEq(Object.getOwnPropertyNames(o).length, + numProps - (deleteEnd - deleteStart)); + for (var i = 0; i < numProps; i++) { + if (deleteStart <= i && i < deleteEnd) { + assertEq(("x" + i) in o, false); + } else { + assertEq(o["x" + i], i); + } + } +} + +// For every "stride" properties, delete all of them except one. +function deleteMany(stride) { + for (var i = 0; i < numProps; i++) { + o["x" + i] = i; + } + var propsNotDeleted = 0; + for (var i = 0; i < numProps; i++) { + if ((i % stride) === 1) { + propsNotDeleted++; + continue; + } + delete o["x" + i]; + } + assertEq(Object.getOwnPropertyNames(o).length, propsNotDeleted); + for (var i = 0; i < numProps; i++) { + if ((i % stride) !== 1) { + assertEq(("x" + i) in o, false); + } else { + assertEq(o["x" + i], i); + } + } +} + +var o = {}; + +function test(useFreshObject) { + function testOne(f) { + if (useFreshObject) { + o = {}; + } + f(); + } + + for (var i = 6; i < 12; i++) { + testOne(_ => deleteRange(i, 1000)); + } + testOne(_ => deleteRange(100, 1000)); + testOne(_ => deleteRange(0, 1000)); + testOne(_ => deleteRange(1, 1000)); + testOne(_ => deleteRange(8, 990)); + + testOne(_ => deleteMany(3)); + testOne(_ => deleteMany(7)); + testOne(_ => deleteMany(8)); + testOne(_ => deleteMany(15)); + testOne(_ => deleteMany(111)); +} + +test(true); +o = {}; +test(false); |