Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(739)

Unified Diff: test/mjsunit/harmony/object-entries.js

Issue 1767113004: [esnext] handle elements in FastObjectValuesOrEntries() (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Make ElementsAccessor::GetCapacity() public, and use it Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects-inl.h ('k') | test/mjsunit/harmony/object-values.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/object-entries.js
diff --git a/test/mjsunit/harmony/object-entries.js b/test/mjsunit/harmony/object-entries.js
index 58af4d6f337924f21ec33f6a1860f2be89616ba5..91e494e165d4e36d367920ca39cdf78b2de03f65 100644
--- a/test/mjsunit/harmony/object-entries.js
+++ b/test/mjsunit/harmony/object-entries.js
@@ -247,3 +247,69 @@ function TestMutateDuringEnumeration() {
assertEquals([ [ "a", 1 ], [ "b", 2 ] ], Object.entries(aMakesBEnumerable));
}
TestMutateDuringEnumeration();
+
+
+(function TestElementKinds() {
+ var O1 = { name: "1" }, O2 = { name: "2" }, O3 = { name: "3" };
+ var PI = 3.141592653589793;
+ var E = 2.718281828459045;
+ function fastSloppyArguments(a, b, c) {
+ delete arguments[0];
+ arguments[0] = a;
+ return arguments;
+ }
+
+ function slowSloppyArguments(a, b, c) {
+ delete arguments[0];
+ arguments[0] = a;
+ Object.defineProperties(arguments, {
+ 0: {
+ enumerable: true,
+ value: a
+ },
+ 9999: {
+ enumerable: false,
+ value: "Y"
+ }
+ });
+ arguments[10000] = "X";
+ return arguments;
+ }
+
+ var element_kinds = {
+ FAST_SMI_ELEMENTS: [ [1, 2, 3], [ ["0", 1], ["1", 2], ["2", 3] ] ],
+ FAST_HOLEY_SMI_ELEMENTS: [ [, , 3], [ ["2", 3] ] ],
+ FAST_ELEMENTS: [ [O1, O2, O3], [ ["0", O1], ["1", O2], ["2", O3] ] ],
+ FAST_HOLEY_ELEMENTS: [ [, , O3], [ ["2", O3] ] ],
+ FAST_DOUBLE_ELEMENTS: [ [E, NaN, PI], [ ["0", E], ["1", NaN], ["2", PI] ] ],
+ FAST_HOLEY_DOUBLE_ELEMENTS: [ [, , NaN], [ ["2", NaN] ] ],
+
+ DICTIONARY_ELEMENTS: [ Object.defineProperties({ 10000: "world" }, {
+ 100: { enumerable: true, value: "hello" },
+ 99: { enumerable: false, value: "nope" }
+ }), [ ["100", "hello"], ["10000", "world" ] ] ],
+ FAST_SLOPPY_ARGUMENTS_ELEMENTS: [
+ fastSloppyArguments("a", "b", "c"),
+ [ ["0", "a"], ["1", "b"], ["2", "c"] ] ],
+ SLOW_SLOPPY_ARGUMENTS_ELEMENTS: [
+ slowSloppyArguments("a", "b", "c"),
+ [ ["0", "a"], ["1", "b"], ["2", "c"], ["10000", "X"] ] ],
+
+ FAST_STRING_WRAPPER_ELEMENTS: [ new String("str"),
+ [ ["0", "s"], ["1", "t"], ["2", "r"]] ],
+ SLOW_STRING_WRAPPER_ELEMENTS: [
+ Object.defineProperties(new String("str"), {
+ 10000: { enumerable: false, value: "X" },
+ 9999: { enumerable: true, value: "Y" }
+ }), [["0", "s"], ["1", "t"], ["2", "r"], ["9999", "Y"]] ],
+ };
+
+ for (let [kind, [object, expected]] of Object.entries(element_kinds)) {
+ let result1 = Object.entries(object);
+ assertEquals(expected, result1, `fast Object.entries() with ${kind}`);
+
+ let proxy = new Proxy(object, {});
+ let result2 = Object.entries(proxy);
+ assertEquals(result1, result2, `slow Object.entries() with ${kind}`);
+ }
+})();
« no previous file with comments | « src/objects-inl.h ('k') | test/mjsunit/harmony/object-values.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698