@@ -28644,7 +28644,7 @@ TEST(MicrotaskContextShouldBeNativeContext) {
28644
28644
isolate->RunMicrotasks();
28645
28645
}
28646
28646
28647
- TEST(PreviewSetIteratorEntriesWithDeleted ) {
28647
+ TEST(PreviewSetKeysIteratorEntriesWithDeleted ) {
28648
28648
LocalContext env;
28649
28649
v8::HandleScope handle_scope(env->GetIsolate());
28650
28650
v8::Local<v8::Context> context = env.local();
@@ -28743,7 +28743,142 @@ TEST(PreviewSetIteratorEntriesWithDeleted) {
28743
28743
}
28744
28744
}
28745
28745
28746
- TEST(PreviewMapIteratorEntriesWithDeleted) {
28746
+ TEST(PreviewSetValuesIteratorEntriesWithDeleted) {
28747
+ LocalContext env;
28748
+ v8::HandleScope handle_scope(env->GetIsolate());
28749
+ v8::Local<v8::Context> context = env.local();
28750
+
28751
+ {
28752
+ // Create set, delete entry, create iterator, preview.
28753
+ v8::Local<v8::Object> iterator =
28754
+ CompileRun("var set = new Set([1,2,3]); set.delete(1); set.values()")
28755
+ ->ToObject(context)
28756
+ .ToLocalChecked();
28757
+ bool is_key;
28758
+ v8::Local<v8::Array> entries =
28759
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28760
+ CHECK(!is_key);
28761
+ CHECK_EQ(2, entries->Length());
28762
+ CHECK_EQ(2, entries->Get(context, 0)
28763
+ .ToLocalChecked()
28764
+ ->Int32Value(context)
28765
+ .FromJust());
28766
+ CHECK_EQ(3, entries->Get(context, 1)
28767
+ .ToLocalChecked()
28768
+ ->Int32Value(context)
28769
+ .FromJust());
28770
+ }
28771
+ {
28772
+ // Create set, create iterator, delete entry, preview.
28773
+ v8::Local<v8::Object> iterator =
28774
+ CompileRun("var set = new Set([1,2,3]); set.values()")
28775
+ ->ToObject(context)
28776
+ .ToLocalChecked();
28777
+ CompileRun("set.delete(1);");
28778
+ bool is_key;
28779
+ v8::Local<v8::Array> entries =
28780
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28781
+ CHECK(!is_key);
28782
+ CHECK_EQ(2, entries->Length());
28783
+ CHECK_EQ(2, entries->Get(context, 0)
28784
+ .ToLocalChecked()
28785
+ ->Int32Value(context)
28786
+ .FromJust());
28787
+ CHECK_EQ(3, entries->Get(context, 1)
28788
+ .ToLocalChecked()
28789
+ ->Int32Value(context)
28790
+ .FromJust());
28791
+ }
28792
+ {
28793
+ // Create set, create iterator, delete entry, iterate, preview.
28794
+ v8::Local<v8::Object> iterator =
28795
+ CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")
28796
+ ->ToObject(context)
28797
+ .ToLocalChecked();
28798
+ CompileRun("set.delete(1); it.next();");
28799
+ bool is_key;
28800
+ v8::Local<v8::Array> entries =
28801
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28802
+ CHECK(!is_key);
28803
+ CHECK_EQ(1, entries->Length());
28804
+ CHECK_EQ(3, entries->Get(context, 0)
28805
+ .ToLocalChecked()
28806
+ ->Int32Value(context)
28807
+ .FromJust());
28808
+ }
28809
+ {
28810
+ // Create set, create iterator, delete entry, iterate until empty, preview.
28811
+ v8::Local<v8::Object> iterator =
28812
+ CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")
28813
+ ->ToObject(context)
28814
+ .ToLocalChecked();
28815
+ CompileRun("set.delete(1); it.next(); it.next();");
28816
+ bool is_key;
28817
+ v8::Local<v8::Array> entries =
28818
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28819
+ CHECK(!is_key);
28820
+ CHECK_EQ(0, entries->Length());
28821
+ }
28822
+ {
28823
+ // Create set, create iterator, delete entry, iterate, trigger rehash,
28824
+ // preview.
28825
+ v8::Local<v8::Object> iterator =
28826
+ CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")
28827
+ ->ToObject(context)
28828
+ .ToLocalChecked();
28829
+ CompileRun("set.delete(1); it.next();");
28830
+ CompileRun("for (var i = 4; i < 20; i++) set.add(i);");
28831
+ bool is_key;
28832
+ v8::Local<v8::Array> entries =
28833
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28834
+ CHECK(!is_key);
28835
+ CHECK_EQ(17, entries->Length());
28836
+ for (uint32_t i = 0; i < 17; i++) {
28837
+ CHECK_EQ(i + 3, entries->Get(context, i)
28838
+ .ToLocalChecked()
28839
+ ->Int32Value(context)
28840
+ .FromJust());
28841
+ }
28842
+ }
28843
+ }
28844
+
28845
+ TEST(PreviewMapEntriesIteratorEntries) {
28846
+ LocalContext env;
28847
+ v8::HandleScope handle_scope(env->GetIsolate());
28848
+ v8::Local<v8::Context> context = env.local();
28849
+ {
28850
+ // Create set, delete entry, create entries iterator, preview.
28851
+ v8::Local<v8::Object> iterator =
28852
+ CompileRun("var set = new Set([1,2,3]); set.delete(2); set.entries()")
28853
+ ->ToObject(context)
28854
+ .ToLocalChecked();
28855
+ bool is_key;
28856
+ v8::Local<v8::Array> entries =
28857
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
28858
+ CHECK(is_key);
28859
+ CHECK_EQ(4, entries->Length());
28860
+ uint32_t first = entries->Get(context, 0)
28861
+ .ToLocalChecked()
28862
+ ->Int32Value(context)
28863
+ .FromJust();
28864
+ uint32_t second = entries->Get(context, 2)
28865
+ .ToLocalChecked()
28866
+ ->Int32Value(context)
28867
+ .FromJust();
28868
+ CHECK_EQ(1, first);
28869
+ CHECK_EQ(3, second);
28870
+ CHECK_EQ(first, entries->Get(context, 1)
28871
+ .ToLocalChecked()
28872
+ ->Int32Value(context)
28873
+ .FromJust());
28874
+ CHECK_EQ(second, entries->Get(context, 3)
28875
+ .ToLocalChecked()
28876
+ ->Int32Value(context)
28877
+ .FromJust());
28878
+ }
28879
+ }
28880
+
28881
+ TEST(PreviewMapValuesIteratorEntriesWithDeleted) {
28747
28882
LocalContext env;
28748
28883
v8::HandleScope handle_scope(env->GetIsolate());
28749
28884
v8::Local<v8::Context> context = env.local();
@@ -28858,6 +28993,97 @@ TEST(PreviewMapIteratorEntriesWithDeleted) {
28858
28993
}
28859
28994
}
28860
28995
28996
+ TEST(PreviewMapKeysIteratorEntriesWithDeleted) {
28997
+ LocalContext env;
28998
+ v8::HandleScope handle_scope(env->GetIsolate());
28999
+ v8::Local<v8::Context> context = env.local();
29000
+
29001
+ {
29002
+ // Create map, delete entry, create iterator, preview.
29003
+ v8::Local<v8::Object> iterator = CompileRun(
29004
+ "var map = new Map();"
29005
+ "var key = 1; map.set(key, {});"
29006
+ "map.set(2, {}); map.set(3, {});"
29007
+ "map.delete(key);"
29008
+ "map.keys()")
29009
+ ->ToObject(context)
29010
+ .ToLocalChecked();
29011
+ bool is_key;
29012
+ v8::Local<v8::Array> entries =
29013
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29014
+ CHECK(!is_key);
29015
+ CHECK_EQ(2, entries->Length());
29016
+ CHECK_EQ(2, entries->Get(context, 0)
29017
+ .ToLocalChecked()
29018
+ ->Int32Value(context)
29019
+ .FromJust());
29020
+ CHECK_EQ(3, entries->Get(context, 1)
29021
+ .ToLocalChecked()
29022
+ ->Int32Value(context)
29023
+ .FromJust());
29024
+ }
29025
+ {
29026
+ // Create map, create iterator, delete entry, preview.
29027
+ v8::Local<v8::Object> iterator = CompileRun(
29028
+ "var map = new Map();"
29029
+ "var key = 1; map.set(key, {});"
29030
+ "map.set(2, {}); map.set(3, {});"
29031
+ "map.keys()")
29032
+ ->ToObject(context)
29033
+ .ToLocalChecked();
29034
+ CompileRun("map.delete(key);");
29035
+ bool is_key;
29036
+ v8::Local<v8::Array> entries =
29037
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29038
+ CHECK(!is_key);
29039
+ CHECK_EQ(2, entries->Length());
29040
+ CHECK_EQ(2, entries->Get(context, 0)
29041
+ .ToLocalChecked()
29042
+ ->Int32Value(context)
29043
+ .FromJust());
29044
+ CHECK_EQ(3, entries->Get(context, 1)
29045
+ .ToLocalChecked()
29046
+ ->Int32Value(context)
29047
+ .FromJust());
29048
+ }
29049
+ {
29050
+ // Create map, create iterator, delete entry, iterate, preview.
29051
+ v8::Local<v8::Object> iterator = CompileRun(
29052
+ "var map = new Map();"
29053
+ "var key = 1; map.set(key, {});"
29054
+ "map.set(2, {}); map.set(3, {});"
29055
+ "var it = map.keys(); it")
29056
+ ->ToObject(context)
29057
+ .ToLocalChecked();
29058
+ CompileRun("map.delete(key); it.next();");
29059
+ bool is_key;
29060
+ v8::Local<v8::Array> entries =
29061
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29062
+ CHECK(!is_key);
29063
+ CHECK_EQ(1, entries->Length());
29064
+ CHECK_EQ(3, entries->Get(context, 0)
29065
+ .ToLocalChecked()
29066
+ ->Int32Value(context)
29067
+ .FromJust());
29068
+ }
29069
+ {
29070
+ // Create map, create iterator, delete entry, iterate until empty, preview.
29071
+ v8::Local<v8::Object> iterator = CompileRun(
29072
+ "var map = new Map();"
29073
+ "var key = 1; map.set(key, {});"
29074
+ "map.set(2, {}); map.set(3, {});"
29075
+ "var it = map.keys(); it")
29076
+ ->ToObject(context)
29077
+ .ToLocalChecked();
29078
+ CompileRun("map.delete(key); it.next(); it.next();");
29079
+ bool is_key;
29080
+ v8::Local<v8::Array> entries =
29081
+ iterator->PreviewEntries(&is_key).ToLocalChecked();
29082
+ CHECK(!is_key);
29083
+ CHECK_EQ(0, entries->Length());
29084
+ }
29085
+ }
29086
+
28861
29087
namespace {
28862
29088
static v8::Isolate* isolate_1;
28863
29089
static v8::Isolate* isolate_2;
0 commit comments