Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: test/unittests/interpreter/constant-array-builder-unittest.cc

Issue 1845313002: [interpreter] A few code coverage improvements. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/factory.h" 7 #include "src/factory.h"
8 #include "src/handles-inl.h" 8 #include "src/handles-inl.h"
9 #include "src/interpreter/constant-array-builder.h" 9 #include "src/interpreter/constant-array-builder.h"
10 #include "src/isolate.h" 10 #include "src/isolate.h"
(...skipping 21 matching lines...) Expand all
32 ConstantArrayBuilder builder(isolate(), zone()); 32 ConstantArrayBuilder builder(isolate(), zone());
33 for (size_t i = 0; i < k16BitCapacity; i++) { 33 for (size_t i = 0; i < k16BitCapacity; i++) {
34 builder.Insert(handle(Smi::FromInt(static_cast<int>(i)), isolate())); 34 builder.Insert(handle(Smi::FromInt(static_cast<int>(i)), isolate()));
35 } 35 }
36 CHECK_EQ(builder.size(), k16BitCapacity); 36 CHECK_EQ(builder.size(), k16BitCapacity);
37 for (size_t i = 0; i < k16BitCapacity; i++) { 37 for (size_t i = 0; i < k16BitCapacity; i++) {
38 CHECK_EQ(Handle<Smi>::cast(builder.At(i))->value(), i); 38 CHECK_EQ(Handle<Smi>::cast(builder.At(i))->value(), i);
39 } 39 }
40 } 40 }
41 41
42
43 TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithIdx8Reservations) { 42 TEST_F(ConstantArrayBuilderTest, AllocateEntriesWithIdx8Reservations) {
44 for (size_t reserved = 1; reserved < k8BitCapacity; reserved *= 3) { 43 for (size_t reserved = 1; reserved < k8BitCapacity; reserved *= 3) {
45 ConstantArrayBuilder builder(isolate(), zone()); 44 ConstantArrayBuilder builder(isolate(), zone());
46 for (size_t i = 0; i < reserved; i++) { 45 for (size_t i = 0; i < reserved; i++) {
47 OperandSize operand_size = builder.CreateReservedEntry(); 46 OperandSize operand_size = builder.CreateReservedEntry();
48 CHECK(operand_size == OperandSize::kByte); 47 CHECK(operand_size == OperandSize::kByte);
49 } 48 }
50 for (size_t i = 0; i < 2 * k8BitCapacity; i++) { 49 for (size_t i = 0; i < 2 * k8BitCapacity; i++) {
51 Handle<Object> object = isolate()->factory()->NewNumberFromSize(i); 50 Handle<Object> object = isolate()->factory()->NewNumberFromSize(i);
52 builder.Insert(object); 51 builder.Insert(object);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 } 193 }
195 for (size_t i = 0; i < k8BitCapacity; i++) { 194 for (size_t i = 0; i < k8BitCapacity; i++) {
196 Handle<Object> original = builder.At(k8BitCapacity + i); 195 Handle<Object> original = builder.At(k8BitCapacity + i);
197 Handle<Object> duplicate = builder.At(i); 196 Handle<Object> duplicate = builder.At(i);
198 CHECK(original->SameValue(*duplicate)); 197 CHECK(original->SameValue(*duplicate));
199 Handle<Object> reference = isolate()->factory()->NewNumberFromSize(i); 198 Handle<Object> reference = isolate()->factory()->NewNumberFromSize(i);
200 CHECK(original->SameValue(*reference)); 199 CHECK(original->SameValue(*reference));
201 } 200 }
202 } 201 }
203 202
204
205 TEST_F(ConstantArrayBuilderTest, GapNotFilledWhenLowReservationDiscarded) { 203 TEST_F(ConstantArrayBuilderTest, GapNotFilledWhenLowReservationDiscarded) {
206 ConstantArrayBuilder builder(isolate(), zone()); 204 ConstantArrayBuilder builder(isolate(), zone());
207 for (size_t i = 0; i < k8BitCapacity; i++) { 205 for (size_t i = 0; i < k8BitCapacity; i++) {
208 OperandSize operand_size = builder.CreateReservedEntry(); 206 OperandSize operand_size = builder.CreateReservedEntry();
209 CHECK(OperandSize::kByte == operand_size); 207 CHECK(OperandSize::kByte == operand_size);
210 CHECK_EQ(builder.size(), 0); 208 CHECK_EQ(builder.size(), 0);
211 } 209 }
212 for (size_t i = 0; i < k8BitCapacity; i++) { 210 for (size_t i = 0; i < k8BitCapacity; i++) {
213 Handle<Object> object = isolate()->factory()->NewNumberFromSize(i); 211 Handle<Object> object = isolate()->factory()->NewNumberFromSize(i);
214 builder.Insert(object); 212 builder.Insert(object);
215 CHECK_EQ(builder.size(), i + k8BitCapacity + 1); 213 CHECK_EQ(builder.size(), i + k8BitCapacity + 1);
216 } 214 }
217 for (size_t i = 0; i < k8BitCapacity; i++) { 215 for (size_t i = 0; i < k8BitCapacity; i++) {
218 builder.DiscardReservedEntry(OperandSize::kByte); 216 builder.DiscardReservedEntry(OperandSize::kByte);
219 builder.Insert(builder.At(i + k8BitCapacity)); 217 builder.Insert(builder.At(i + k8BitCapacity));
220 CHECK_EQ(builder.size(), 2 * k8BitCapacity); 218 CHECK_EQ(builder.size(), 2 * k8BitCapacity);
221 } 219 }
222 for (size_t i = 0; i < k8BitCapacity; i++) { 220 for (size_t i = 0; i < k8BitCapacity; i++) {
223 Handle<Object> reference = isolate()->factory()->NewNumberFromSize(i); 221 Handle<Object> reference = isolate()->factory()->NewNumberFromSize(i);
224 Handle<Object> original = builder.At(k8BitCapacity + i); 222 Handle<Object> original = builder.At(k8BitCapacity + i);
225 CHECK(original->SameValue(*reference)); 223 CHECK(original->SameValue(*reference));
226 Handle<Object> duplicate = builder.At(i); 224 Handle<Object> duplicate = builder.At(i);
227 CHECK(duplicate->SameValue(*isolate()->factory()->the_hole_value())); 225 CHECK(duplicate->SameValue(*isolate()->factory()->the_hole_value()));
228 } 226 }
229 } 227 }
230 228
229 TEST_F(ConstantArrayBuilderTest, HolesWithUnusedReservations) {
230 static int kNumberOfHoles = 128;
231 ConstantArrayBuilder builder(isolate(), zone());
232 for (int i = 0; i < kNumberOfHoles; ++i) {
233 CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kByte);
234 }
235 for (int i = 0; i < 128; ++i) {
236 CHECK_EQ(builder.Insert(isolate()->factory()->NewNumber(i)), i);
237 }
238 CHECK_EQ(builder.Insert(isolate()->factory()->NewNumber(256)), 256);
239
240 Handle<FixedArray> constant_array = builder.ToFixedArray();
241 CHECK_EQ(constant_array->length(), 257);
242 for (int i = 128; i < 256; i++) {
243 CHECK(constant_array->get(i)->SameValue(
244 *isolate()->factory()->the_hole_value()));
245 }
246 CHECK(!constant_array->get(127)->SameValue(
247 *isolate()->factory()->the_hole_value()));
248 CHECK(!constant_array->get(256)->SameValue(
249 *isolate()->factory()->the_hole_value()));
250 }
251
252 TEST_F(ConstantArrayBuilderTest, ReservationsAtAllScales) {
253 ConstantArrayBuilder builder(isolate(), zone());
254 for (int i = 0; i < 256; i++) {
255 CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kByte);
256 }
257 for (int i = 256; i < 65536; ++i) {
258 CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kShort);
259 }
260 for (int i = 65536; i < 131072; ++i) {
261 CHECK_EQ(builder.CreateReservedEntry(), OperandSize::kQuad);
262 }
263 CHECK_EQ(builder.CommitReservedEntry(OperandSize::kByte,
264 isolate()->factory()->NewNumber(1)),
265 0);
266 CHECK_EQ(builder.CommitReservedEntry(OperandSize::kShort,
267 isolate()->factory()->NewNumber(2)),
268 256);
269 CHECK_EQ(builder.CommitReservedEntry(OperandSize::kQuad,
270 isolate()->factory()->NewNumber(3)),
271 65536);
272 Handle<FixedArray> constant_array = builder.ToFixedArray();
273 CHECK_EQ(constant_array->length(), 65537);
274 int count = 1;
275 for (int i = 0; i < constant_array->length(); ++i) {
276 Handle<Object> expected;
277 if (i == 0 || i == 256 || i == 65536) {
278 expected = isolate()->factory()->NewNumber(count++);
279 } else {
280 expected = isolate()->factory()->the_hole_value();
281 }
282 CHECK(constant_array->get(i)->SameValue(*expected));
283 }
284 }
285
231 } // namespace interpreter 286 } // namespace interpreter
232 } // namespace internal 287 } // namespace internal
233 } // namespace v8 288 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698