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 c48ac58738c18d8a1f4eb4bbdc1e1a82678c50fb..1233aa4843d826ea10f6d9277f0c437a0e2275a7 100644 |
--- a/test/unittests/interpreter/constant-array-builder-unittest.cc |
+++ b/test/unittests/interpreter/constant-array-builder-unittest.cc |
@@ -43,7 +43,7 @@ TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithIdx8Reservations) { |
for (size_t reserved = 1; reserved < k8BitCapacity; reserved *= 3) { |
ConstantArrayBuilder builder(isolate(), zone()); |
for (size_t i = 0; i < reserved; i++) { |
- OperandSize operand_size = builder.CreateReservedEntry(); |
+ OperandSize operand_size = builder.CreateDiscardableReservedEntry(); |
CHECK(operand_size == OperandSize::kByte); |
} |
for (size_t i = 0; i < 2 * k8BitCapacity; i++) { |
@@ -94,7 +94,7 @@ TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithIdx8Reservations) { |
// Now make reservations, and commit them with unique entries. |
for (size_t i = 0; i < duplicates_in_idx8_space; i++) { |
- OperandSize operand_size = builder.CreateReservedEntry(); |
+ OperandSize operand_size = builder.CreateDiscardableReservedEntry(); |
CHECK(operand_size == OperandSize::kByte); |
} |
for (size_t i = 0; i < duplicates_in_idx8_space; i++) { |
@@ -118,7 +118,7 @@ TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithWideReservations) { |
CHECK_EQ(builder.size(), i + 1); |
} |
for (size_t i = 0; i < reserved; i++) { |
- OperandSize operand_size = builder.CreateReservedEntry(); |
+ OperandSize operand_size = builder.CreateDiscardableReservedEntry(); |
CHECK(operand_size == OperandSize::kShort); |
CHECK_EQ(builder.size(), k8BitCapacity); |
} |
@@ -127,14 +127,14 @@ TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithWideReservations) { |
CHECK_EQ(builder.size(), k8BitCapacity); |
} |
for (size_t i = 0; i < reserved; i++) { |
- OperandSize operand_size = builder.CreateReservedEntry(); |
+ OperandSize operand_size = builder.CreateDiscardableReservedEntry(); |
CHECK(operand_size == OperandSize::kShort); |
Handle<Object> object = isolate()->factory()->NewNumberFromSize(i); |
builder.CommitReservedEntry(operand_size, object); |
CHECK_EQ(builder.size(), k8BitCapacity); |
} |
for (size_t i = k8BitCapacity; i < k8BitCapacity + reserved; i++) { |
- OperandSize operand_size = builder.CreateReservedEntry(); |
+ OperandSize operand_size = builder.CreateDiscardableReservedEntry(); |
CHECK(operand_size == OperandSize::kShort); |
Handle<Object> object = isolate()->factory()->NewNumberFromSize(i); |
builder.CommitReservedEntry(operand_size, object); |
@@ -177,7 +177,7 @@ TEST_F(ConstantArrayBuilderTest, ToLargeFixedArray) { |
TEST_F(ConstantArrayBuilderTest, GapFilledWhenLowReservationCommitted) { |
ConstantArrayBuilder builder(isolate(), zone()); |
for (size_t i = 0; i < k8BitCapacity; i++) { |
- OperandSize operand_size = builder.CreateReservedEntry(); |
+ OperandSize operand_size = builder.CreateDiscardableReservedEntry(); |
CHECK(OperandSize::kByte == operand_size); |
CHECK_EQ(builder.size(), 0); |
} |
@@ -203,7 +203,7 @@ TEST_F(ConstantArrayBuilderTest, GapFilledWhenLowReservationCommitted) { |
TEST_F(ConstantArrayBuilderTest, GapNotFilledWhenLowReservationDiscarded) { |
ConstantArrayBuilder builder(isolate(), zone()); |
for (size_t i = 0; i < k8BitCapacity; i++) { |
- OperandSize operand_size = builder.CreateReservedEntry(); |
+ OperandSize operand_size = builder.CreateDiscardableReservedEntry(); |
CHECK(OperandSize::kByte == operand_size); |
CHECK_EQ(builder.size(), 0); |
} |
@@ -230,7 +230,7 @@ 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); |
+ CHECK_EQ(builder.CreateDiscardableReservedEntry(), OperandSize::kByte); |
} |
for (int i = 0; i < 128; ++i) { |
CHECK_EQ(builder.Insert(isolate()->factory()->NewNumber(i)), i); |
@@ -252,13 +252,13 @@ TEST_F(ConstantArrayBuilderTest, HolesWithUnusedReservations) { |
TEST_F(ConstantArrayBuilderTest, ReservationsAtAllScales) { |
ConstantArrayBuilder builder(isolate(), zone()); |
for (int i = 0; i < 256; i++) { |
- CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kByte); |
+ CHECK_EQ(builder.CreateDiscardableReservedEntry(), OperandSize::kByte); |
} |
for (int i = 256; i < 65536; ++i) { |
- CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kShort); |
+ CHECK_EQ(builder.CreateDiscardableReservedEntry(), OperandSize::kShort); |
} |
for (int i = 65536; i < 131072; ++i) { |
- CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kQuad); |
+ CHECK_EQ(builder.CreateDiscardableReservedEntry(), OperandSize::kQuad); |
} |
CHECK_EQ(builder.CommitReservedEntry(OperandSize::kByte, |
isolate()->factory()->NewNumber(1)), |
@@ -283,6 +283,40 @@ TEST_F(ConstantArrayBuilderTest, ReservationsAtAllScales) { |
} |
} |
+TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithFixedReservations) { |
+ ConstantArrayBuilder builder(isolate(), zone()); |
+ for (size_t i = 0; i < k16BitCapacity; i++) { |
+ if ((i % 2) == 0) { |
+ CHECK_EQ(i, builder.ReserveEntry()); |
+ } else { |
+ builder.Insert(handle(Smi::FromInt(static_cast<int>(i)), isolate())); |
+ } |
+ } |
+ CHECK_EQ(builder.size(), k16BitCapacity); |
+ |
+ // Check values before reserved entries are inserted. |
+ for (size_t i = 0; i < k16BitCapacity; i++) { |
+ if ((i % 2) == 0) { |
+ // Check reserved values are the hole. |
+ Handle<Object> empty = builder.At(i); |
+ CHECK(empty->SameValue(isolate()->heap()->the_hole_value())); |
+ } else { |
+ CHECK_EQ(Handle<Smi>::cast(builder.At(i))->value(), i); |
+ } |
+ } |
+ |
+ // Insert reserved entries. |
+ for (size_t i = 0; i < k16BitCapacity; i += 2) { |
+ builder.InsertReservedEntry( |
+ i, handle(Smi::FromInt(static_cast<int>(i)), isolate())); |
+ } |
+ |
+ // Check values after reserved entries are inserted. |
+ for (size_t i = 0; i < k16BitCapacity; i++) { |
+ CHECK_EQ(Handle<Smi>::cast(builder.At(i))->value(), i); |
+ } |
+} |
+ |
} // namespace interpreter |
} // namespace internal |
} // namespace v8 |