@@ -28853,7 +28853,7 @@ TEST(TestGetEmbeddedCodeRange) {
2885328853 }
2885428854}
2885528855
28856- TEST(PreviewSetIteratorEntriesWithDeleted ) {
28856+ TEST(PreviewSetKeysIteratorEntriesWithDeleted ) {
2885728857 LocalContext env;
2885828858 v8::HandleScope handle_scope(env->GetIsolate());
2885928859 v8::Local<v8::Context> context = env.local();
@@ -28952,7 +28952,142 @@ TEST(PreviewSetIteratorEntriesWithDeleted) {
2895228952 }
2895328953}
2895428954
28955- TEST(PreviewMapIteratorEntriesWithDeleted) {
28955+ TEST(PreviewSetValuesIteratorEntriesWithDeleted) {
28956+ LocalContext env;
28957+ v8::HandleScope handle_scope(env->GetIsolate());
28958+ v8::Local<v8::Context> context = env.local();
28959+
28960+ {
28961+ // Create set, delete entry, create iterator, preview.
28962+ v8::Local<v8::Object> iterator =
28963+ CompileRun("var set = new Set([1,2,3]); set.delete(1); set.values()")
28964+ ->ToObject(context)
28965+ .ToLocalChecked();
28966+ bool is_key;
28967+ v8::Local<v8::Array> entries =
28968+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28969+ CHECK(!is_key);
28970+ CHECK_EQ(2, entries->Length());
28971+ CHECK_EQ(2, entries->Get(context, 0)
28972+ .ToLocalChecked()
28973+ ->Int32Value(context)
28974+ .FromJust());
28975+ CHECK_EQ(3, entries->Get(context, 1)
28976+ .ToLocalChecked()
28977+ ->Int32Value(context)
28978+ .FromJust());
28979+ }
28980+ {
28981+ // Create set, create iterator, delete entry, preview.
28982+ v8::Local<v8::Object> iterator =
28983+ CompileRun("var set = new Set([1,2,3]); set.values()")
28984+ ->ToObject(context)
28985+ .ToLocalChecked();
28986+ CompileRun("set.delete(1);");
28987+ bool is_key;
28988+ v8::Local<v8::Array> entries =
28989+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28990+ CHECK(!is_key);
28991+ CHECK_EQ(2, entries->Length());
28992+ CHECK_EQ(2, entries->Get(context, 0)
28993+ .ToLocalChecked()
28994+ ->Int32Value(context)
28995+ .FromJust());
28996+ CHECK_EQ(3, entries->Get(context, 1)
28997+ .ToLocalChecked()
28998+ ->Int32Value(context)
28999+ .FromJust());
29000+ }
29001+ {
29002+ // Create set, create iterator, delete entry, iterate, preview.
29003+ v8::Local<v8::Object> iterator =
29004+ CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")
29005+ ->ToObject(context)
29006+ .ToLocalChecked();
29007+ CompileRun("set.delete(1); it.next();");
29008+ bool is_key;
29009+ v8::Local<v8::Array> entries =
29010+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29011+ CHECK(!is_key);
29012+ CHECK_EQ(1, entries->Length());
29013+ CHECK_EQ(3, entries->Get(context, 0)
29014+ .ToLocalChecked()
29015+ ->Int32Value(context)
29016+ .FromJust());
29017+ }
29018+ {
29019+ // Create set, create iterator, delete entry, iterate until empty, preview.
29020+ v8::Local<v8::Object> iterator =
29021+ CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")
29022+ ->ToObject(context)
29023+ .ToLocalChecked();
29024+ CompileRun("set.delete(1); it.next(); it.next();");
29025+ bool is_key;
29026+ v8::Local<v8::Array> entries =
29027+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29028+ CHECK(!is_key);
29029+ CHECK_EQ(0, entries->Length());
29030+ }
29031+ {
29032+ // Create set, create iterator, delete entry, iterate, trigger rehash,
29033+ // preview.
29034+ v8::Local<v8::Object> iterator =
29035+ CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")
29036+ ->ToObject(context)
29037+ .ToLocalChecked();
29038+ CompileRun("set.delete(1); it.next();");
29039+ CompileRun("for (var i = 4; i < 20; i++) set.add(i);");
29040+ bool is_key;
29041+ v8::Local<v8::Array> entries =
29042+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29043+ CHECK(!is_key);
29044+ CHECK_EQ(17, entries->Length());
29045+ for (uint32_t i = 0; i < 17; i++) {
29046+ CHECK_EQ(i + 3, entries->Get(context, i)
29047+ .ToLocalChecked()
29048+ ->Int32Value(context)
29049+ .FromJust());
29050+ }
29051+ }
29052+ }
29053+
29054+ TEST(PreviewMapEntriesIteratorEntries) {
29055+ LocalContext env;
29056+ v8::HandleScope handle_scope(env->GetIsolate());
29057+ v8::Local<v8::Context> context = env.local();
29058+ {
29059+ // Create set, delete entry, create entries iterator, preview.
29060+ v8::Local<v8::Object> iterator =
29061+ CompileRun("var set = new Set([1,2,3]); set.delete(2); set.entries()")
29062+ ->ToObject(context)
29063+ .ToLocalChecked();
29064+ bool is_key;
29065+ v8::Local<v8::Array> entries =
29066+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29067+ CHECK(is_key);
29068+ CHECK_EQ(4, entries->Length());
29069+ uint32_t first = entries->Get(context, 0)
29070+ .ToLocalChecked()
29071+ ->Int32Value(context)
29072+ .FromJust();
29073+ uint32_t second = entries->Get(context, 2)
29074+ .ToLocalChecked()
29075+ ->Int32Value(context)
29076+ .FromJust();
29077+ CHECK_EQ(1, first);
29078+ CHECK_EQ(3, second);
29079+ CHECK_EQ(first, entries->Get(context, 1)
29080+ .ToLocalChecked()
29081+ ->Int32Value(context)
29082+ .FromJust());
29083+ CHECK_EQ(second, entries->Get(context, 3)
29084+ .ToLocalChecked()
29085+ ->Int32Value(context)
29086+ .FromJust());
29087+ }
29088+ }
29089+
29090+ TEST(PreviewMapValuesIteratorEntriesWithDeleted) {
2895629091 LocalContext env;
2895729092 v8::HandleScope handle_scope(env->GetIsolate());
2895829093 v8::Local<v8::Context> context = env.local();
@@ -29066,3 +29201,94 @@ TEST(PreviewMapIteratorEntriesWithDeleted) {
2906629201 }
2906729202 }
2906829203}
29204+
29205+ TEST(PreviewMapKeysIteratorEntriesWithDeleted) {
29206+ LocalContext env;
29207+ v8::HandleScope handle_scope(env->GetIsolate());
29208+ v8::Local<v8::Context> context = env.local();
29209+
29210+ {
29211+ // Create map, delete entry, create iterator, preview.
29212+ v8::Local<v8::Object> iterator = CompileRun(
29213+ "var map = new Map();"
29214+ "var key = 1; map.set(key, {});"
29215+ "map.set(2, {}); map.set(3, {});"
29216+ "map.delete(key);"
29217+ "map.keys()")
29218+ ->ToObject(context)
29219+ .ToLocalChecked();
29220+ bool is_key;
29221+ v8::Local<v8::Array> entries =
29222+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29223+ CHECK(!is_key);
29224+ CHECK_EQ(2, entries->Length());
29225+ CHECK_EQ(2, entries->Get(context, 0)
29226+ .ToLocalChecked()
29227+ ->Int32Value(context)
29228+ .FromJust());
29229+ CHECK_EQ(3, entries->Get(context, 1)
29230+ .ToLocalChecked()
29231+ ->Int32Value(context)
29232+ .FromJust());
29233+ }
29234+ {
29235+ // Create map, create iterator, delete entry, preview.
29236+ v8::Local<v8::Object> iterator = CompileRun(
29237+ "var map = new Map();"
29238+ "var key = 1; map.set(key, {});"
29239+ "map.set(2, {}); map.set(3, {});"
29240+ "map.keys()")
29241+ ->ToObject(context)
29242+ .ToLocalChecked();
29243+ CompileRun("map.delete(key);");
29244+ bool is_key;
29245+ v8::Local<v8::Array> entries =
29246+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29247+ CHECK(!is_key);
29248+ CHECK_EQ(2, entries->Length());
29249+ CHECK_EQ(2, entries->Get(context, 0)
29250+ .ToLocalChecked()
29251+ ->Int32Value(context)
29252+ .FromJust());
29253+ CHECK_EQ(3, entries->Get(context, 1)
29254+ .ToLocalChecked()
29255+ ->Int32Value(context)
29256+ .FromJust());
29257+ }
29258+ {
29259+ // Create map, create iterator, delete entry, iterate, preview.
29260+ v8::Local<v8::Object> iterator = CompileRun(
29261+ "var map = new Map();"
29262+ "var key = 1; map.set(key, {});"
29263+ "map.set(2, {}); map.set(3, {});"
29264+ "var it = map.keys(); it")
29265+ ->ToObject(context)
29266+ .ToLocalChecked();
29267+ CompileRun("map.delete(key); it.next();");
29268+ bool is_key;
29269+ v8::Local<v8::Array> entries =
29270+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29271+ CHECK(!is_key);
29272+ CHECK_EQ(1, entries->Length());
29273+ CHECK_EQ(3, entries->Get(context, 0)
29274+ .ToLocalChecked()
29275+ ->Int32Value(context)
29276+ .FromJust());
29277+ }
29278+ {
29279+ // Create map, create iterator, delete entry, iterate until empty, preview.
29280+ v8::Local<v8::Object> iterator = CompileRun(
29281+ "var map = new Map();"
29282+ "var key = 1; map.set(key, {});"
29283+ "map.set(2, {}); map.set(3, {});"
29284+ "var it = map.keys(); it")
29285+ ->ToObject(context)
29286+ .ToLocalChecked();
29287+ CompileRun("map.delete(key); it.next(); it.next();");
29288+ bool is_key;
29289+ v8::Local<v8::Array> entries =
29290+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29291+ CHECK(!is_key);
29292+ CHECK_EQ(0, entries->Length());
29293+ }
29294+ }
0 commit comments