Rework Map object (#2760)
This patch reworks the core of the builtin Map object. Advantages: - Provide sublinear access time for the elements via Lcache and property hashmap - This implementation is suitable for the builtin Set object as well Also add the missing 'forEach' routine for the builtin object as well. JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
committed by
László Langó
parent
bc9efb07a5
commit
d2931c6e40
@@ -73,6 +73,43 @@ assert(m.get(1) === 8);
|
||||
assert(m.get(2) === 8);
|
||||
assert(m.get(3) === 8);
|
||||
|
||||
m.set(NaN, "not a number");
|
||||
assert(m.size === 4);
|
||||
assert(m.get(NaN) === "not a number");
|
||||
assert(m.get(Number("foo")) === "not a number")
|
||||
|
||||
m.set(0, "PosZero");
|
||||
assert(m.size === 5);
|
||||
m.set(-0, "NegZero");
|
||||
assert(m.size === 5);
|
||||
assert(m.get (0) === "NegZero");
|
||||
assert(m.get (-0) === "NegZero");
|
||||
|
||||
var symbolFoo = Symbol ("foo");
|
||||
m.set (symbolFoo, "SymbolFoo");
|
||||
assert(m.size === 6);
|
||||
assert(m.get(symbolFoo) === "SymbolFoo");
|
||||
|
||||
var object = {};
|
||||
m.set (object, "object");
|
||||
assert(m.size === 7);
|
||||
assert(m.get(object) === "object");
|
||||
assert(m.get({}) === undefined);
|
||||
|
||||
var myObj = { o : 4 };
|
||||
m.set("foo", myObj);
|
||||
assert(m.size === 8);
|
||||
assert(m.get ("foo") === myObj);
|
||||
assert(m.get ("foo").o === 4);
|
||||
|
||||
m.clear();
|
||||
assert(m.size === 0);
|
||||
|
||||
m.set("foo", myObj);
|
||||
assert(m.size === 1);
|
||||
assert(m.get ("foo") === myObj);
|
||||
assert(m.get ("foo").o === 4);
|
||||
|
||||
var mapNameDesc = Object.getOwnPropertyDescriptor (Map, 'name');
|
||||
assert(mapNameDesc.value === "Map");
|
||||
assert(mapNameDesc.writable === false);
|
||||
|
||||
Reference in New Issue
Block a user