Index: test/unittests/interpreter/constant-array-builder-unittest.cc |
diff --git a/test/unittests/interpreter/constant-array-builder-unittest.cc b/test/unittests/interpreter/constant-array-builder-unittest.cc |
index dba3be05ec7c75d03abd33631d28c26020d0b42a..71224370cc14fdc32fd0a1243e85e301e7f1821f 100644 |
--- a/test/unittests/interpreter/constant-array-builder-unittest.cc |
+++ b/test/unittests/interpreter/constant-array-builder-unittest.cc |
@@ -39,7 +39,6 @@ TEST_F(ConstantArrayBuilderTest, AllocateAllEntries) { |
} |
} |
- |
TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithIdx8Reservations) { |
for (size_t reserved = 1; reserved < k8BitCapacity; reserved *= 3) { |
ConstantArrayBuilder builder(isolate(), zone()); |
@@ -201,7 +200,6 @@ TEST_F(ConstantArrayBuilderTest, GapFilledWhenLowReservationCommitted) { |
} |
} |
- |
TEST_F(ConstantArrayBuilderTest, GapNotFilledWhenLowReservationDiscarded) { |
ConstantArrayBuilder builder(isolate(), zone()); |
for (size_t i = 0; i < k8BitCapacity; i++) { |
@@ -228,6 +226,63 @@ TEST_F(ConstantArrayBuilderTest, GapNotFilledWhenLowReservationDiscarded) { |
} |
} |
+TEST_F(ConstantArrayBuilderTest, HolesWithUnusedReservations) { |
+ static int kNumberOfHoles = 128; |
+ ConstantArrayBuilder builder(isolate(), zone()); |
+ for (int i = 0; i < kNumberOfHoles; ++i) { |
+ CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kByte); |
+ } |
+ for (int i = 0; i < 128; ++i) { |
+ CHECK_EQ(builder.Insert(isolate()->factory()->NewNumber(i)), i); |
+ } |
+ CHECK_EQ(builder.Insert(isolate()->factory()->NewNumber(256)), 256); |
+ |
+ Handle<FixedArray> constant_array = builder.ToFixedArray(); |
+ CHECK_EQ(constant_array->length(), 257); |
+ for (int i = 128; i < 256; i++) { |
+ CHECK(constant_array->get(i)->SameValue( |
+ *isolate()->factory()->the_hole_value())); |
+ } |
+ CHECK(!constant_array->get(127)->SameValue( |
+ *isolate()->factory()->the_hole_value())); |
+ CHECK(!constant_array->get(256)->SameValue( |
+ *isolate()->factory()->the_hole_value())); |
+} |
+ |
+TEST_F(ConstantArrayBuilderTest, ReservationsAtAllScales) { |
+ ConstantArrayBuilder builder(isolate(), zone()); |
+ for (int i = 0; i < 256; i++) { |
+ CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kByte); |
+ } |
+ for (int i = 256; i < 65536; ++i) { |
+ CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kShort); |
+ } |
+ for (int i = 65536; i < 131072; ++i) { |
+ CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kQuad); |
+ } |
+ CHECK_EQ(builder.CommitReservedEntry(OperandSize::kByte, |
+ isolate()->factory()->NewNumber(1)), |
+ 0); |
+ CHECK_EQ(builder.CommitReservedEntry(OperandSize::kShort, |
+ isolate()->factory()->NewNumber(2)), |
+ 256); |
+ CHECK_EQ(builder.CommitReservedEntry(OperandSize::kQuad, |
+ isolate()->factory()->NewNumber(3)), |
+ 65536); |
+ Handle<FixedArray> constant_array = builder.ToFixedArray(); |
+ CHECK_EQ(constant_array->length(), 65537); |
+ int count = 1; |
+ for (int i = 0; i < constant_array->length(); ++i) { |
+ Handle<Object> expected; |
+ if (i == 0 || i == 256 || i == 65536) { |
+ expected = isolate()->factory()->NewNumber(count++); |
+ } else { |
+ expected = isolate()->factory()->the_hole_value(); |
+ } |
+ CHECK(constant_array->get(i)->SameValue(*expected)); |
+ } |
+} |
+ |
} // namespace interpreter |
} // namespace internal |
} // namespace v8 |