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

Side by Side Diff: test/unittests/wasm/module-decoder-unittest.cc

Issue 1970543003: [formatting] Remove all double blank lines in WASM code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 "test/unittests/test-utils.h" 5 #include "test/unittests/test-utils.h"
6 6
7 #include "src/wasm/module-decoder.h" 7 #include "src/wasm/module-decoder.h"
8 #include "src/wasm/wasm-macro-gen.h" 8 #include "src/wasm/wasm-macro-gen.h"
9 #include "src/wasm/wasm-opcodes.h" 9 #include "src/wasm/wasm-opcodes.h"
10 10
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 EXPECT_EQ(MachineType::Int32(), global->type); 162 EXPECT_EQ(MachineType::Int32(), global->type);
163 EXPECT_EQ(0, global->offset); 163 EXPECT_EQ(0, global->offset);
164 EXPECT_FALSE(global->exported); 164 EXPECT_FALSE(global->exported);
165 165
166 if (result.val) delete result.val; 166 if (result.val) delete result.val;
167 } 167 }
168 168
169 EXPECT_OFF_END_FAILURE(data, 1, sizeof(data)); 169 EXPECT_OFF_END_FAILURE(data, 1, sizeof(data));
170 } 170 }
171 171
172
173 TEST_F(WasmModuleVerifyTest, ZeroGlobals) { 172 TEST_F(WasmModuleVerifyTest, ZeroGlobals) {
174 static const byte data[] = { 173 static const byte data[] = {
175 SECTION(GLOBALS, 1), // -- 174 SECTION(GLOBALS, 1), // --
176 0, // declare 0 globals 175 0, // declare 0 globals
177 }; 176 };
178 ModuleResult result = DecodeModule(data, data + arraysize(data)); 177 ModuleResult result = DecodeModule(data, data + arraysize(data));
179 EXPECT_OK(result); 178 EXPECT_OK(result);
180 if (result.val) delete result.val; 179 if (result.val) delete result.val;
181 } 180 }
182 181
183
184 static void AppendUint32v(std::vector<byte>& buffer, uint32_t val) { 182 static void AppendUint32v(std::vector<byte>& buffer, uint32_t val) {
185 while (true) { 183 while (true) {
186 uint32_t next = val >> 7; 184 uint32_t next = val >> 7;
187 uint32_t out = val & 0x7f; 185 uint32_t out = val & 0x7f;
188 if (next) { 186 if (next) {
189 buffer.push_back(static_cast<byte>(0x80 | out)); 187 buffer.push_back(static_cast<byte>(0x80 | out));
190 val = next; 188 val = next;
191 } else { 189 } else {
192 buffer.push_back(static_cast<byte>(out)); 190 buffer.push_back(static_cast<byte>(out));
193 break; 191 break;
194 } 192 }
195 } 193 }
196 } 194 }
197 195
198
199 TEST_F(WasmModuleVerifyTest, NGlobals) { 196 TEST_F(WasmModuleVerifyTest, NGlobals) {
200 static const byte data[] = { 197 static const byte data[] = {
201 NO_NAME, // name length 198 NO_NAME, // name length
202 kMemI32, // memory type 199 kMemI32, // memory type
203 0, // exported 200 0, // exported
204 }; 201 };
205 202
206 for (uint32_t i = 0; i < 1000000; i = i * 13 + 1) { 203 for (uint32_t i = 0; i < 1000000; i = i * 13 + 1) {
207 std::vector<byte> buffer; 204 std::vector<byte> buffer;
208 size_t size = SizeOfVarInt(i) + i * sizeof(data); 205 size_t size = SizeOfVarInt(i) + i * sizeof(data);
(...skipping 29 matching lines...) Expand all
238 SECTION(GLOBALS, 7), 235 SECTION(GLOBALS, 7),
239 1, // declare one global 236 1, // declare one global
240 NO_NAME, // name offset 237 NO_NAME, // name offset
241 33, // memory type 238 33, // memory type
242 0, // exported 239 0, // exported
243 }; 240 };
244 241
245 EXPECT_FAILURE(data); 242 EXPECT_FAILURE(data);
246 } 243 }
247 244
248
249 TEST_F(WasmModuleVerifyTest, TwoGlobals) { 245 TEST_F(WasmModuleVerifyTest, TwoGlobals) {
250 static const byte data[] = { 246 static const byte data[] = {
251 SECTION(GLOBALS, 7), 247 SECTION(GLOBALS, 7),
252 2, 248 2,
253 NO_NAME, // #0: name length 249 NO_NAME, // #0: name length
254 kMemF32, // memory type 250 kMemF32, // memory type
255 0, // exported 251 0, // exported
256 NO_NAME, // #1: name length 252 NO_NAME, // #1: name length
257 kMemF64, // memory type 253 kMemF64, // memory type
258 1, // exported 254 1, // exported
(...skipping 19 matching lines...) Expand all
278 EXPECT_EQ(MachineType::Float64(), g1->type); 274 EXPECT_EQ(MachineType::Float64(), g1->type);
279 EXPECT_EQ(0, g1->offset); 275 EXPECT_EQ(0, g1->offset);
280 EXPECT_TRUE(g1->exported); 276 EXPECT_TRUE(g1->exported);
281 277
282 if (result.val) delete result.val; 278 if (result.val) delete result.val;
283 } 279 }
284 280
285 EXPECT_OFF_END_FAILURE(data, 1, sizeof(data)); 281 EXPECT_OFF_END_FAILURE(data, 1, sizeof(data));
286 } 282 }
287 283
288
289 TEST_F(WasmModuleVerifyTest, OneSignature) { 284 TEST_F(WasmModuleVerifyTest, OneSignature) {
290 { 285 {
291 static const byte data[] = {SIGNATURES_SECTION_VOID_VOID}; 286 static const byte data[] = {SIGNATURES_SECTION_VOID_VOID};
292 EXPECT_VERIFIES(data); 287 EXPECT_VERIFIES(data);
293 } 288 }
294 289
295 { 290 {
296 static const byte data[] = {SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_x_x), 291 static const byte data[] = {SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_x_x),
297 1, SIG_ENTRY_i_i}; 292 1, SIG_ENTRY_i_i};
298 EXPECT_VERIFIES(data); 293 EXPECT_VERIFIES(data);
299 } 294 }
300 } 295 }
301 296
302
303 TEST_F(WasmModuleVerifyTest, MultipleSignatures) { 297 TEST_F(WasmModuleVerifyTest, MultipleSignatures) {
304 static const byte data[] = { 298 static const byte data[] = {
305 SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_v_v + SIZEOF_SIG_ENTRY_x_x + 299 SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_v_v + SIZEOF_SIG_ENTRY_x_x +
306 SIZEOF_SIG_ENTRY_x_xx), // -- 300 SIZEOF_SIG_ENTRY_x_xx), // --
307 3, // -- 301 3, // --
308 SIG_ENTRY_v_v, // void -> void 302 SIG_ENTRY_v_v, // void -> void
309 SIG_ENTRY_x_x(kLocalI32, kLocalF32), // f32 -> i32 303 SIG_ENTRY_x_x(kLocalI32, kLocalF32), // f32 -> i32
310 SIG_ENTRY_x_xx(kLocalI32, kLocalF64, kLocalF64), // f64,f64 -> i32 304 SIG_ENTRY_x_xx(kLocalI32, kLocalF64, kLocalF64), // f64,f64 -> i32
311 }; 305 };
312 306
313 ModuleResult result = DecodeModule(data, data + arraysize(data)); 307 ModuleResult result = DecodeModule(data, data + arraysize(data));
314 EXPECT_OK(result); 308 EXPECT_OK(result);
315 EXPECT_EQ(3, result.val->signatures.size()); 309 EXPECT_EQ(3, result.val->signatures.size());
316 if (result.val->signatures.size() == 3) { 310 if (result.val->signatures.size() == 3) {
317 EXPECT_EQ(0, result.val->signatures[0]->return_count()); 311 EXPECT_EQ(0, result.val->signatures[0]->return_count());
318 EXPECT_EQ(1, result.val->signatures[1]->return_count()); 312 EXPECT_EQ(1, result.val->signatures[1]->return_count());
319 EXPECT_EQ(1, result.val->signatures[2]->return_count()); 313 EXPECT_EQ(1, result.val->signatures[2]->return_count());
320 314
321 EXPECT_EQ(0, result.val->signatures[0]->parameter_count()); 315 EXPECT_EQ(0, result.val->signatures[0]->parameter_count());
322 EXPECT_EQ(1, result.val->signatures[1]->parameter_count()); 316 EXPECT_EQ(1, result.val->signatures[1]->parameter_count());
323 EXPECT_EQ(2, result.val->signatures[2]->parameter_count()); 317 EXPECT_EQ(2, result.val->signatures[2]->parameter_count());
324 } 318 }
325 if (result.val) delete result.val; 319 if (result.val) delete result.val;
326 320
327 EXPECT_OFF_END_FAILURE(data, 1, sizeof(data)); 321 EXPECT_OFF_END_FAILURE(data, 1, sizeof(data));
328 } 322 }
329 323
330
331 TEST_F(WasmModuleVerifyTest, FunctionWithoutSig) { 324 TEST_F(WasmModuleVerifyTest, FunctionWithoutSig) {
332 static const byte data[] = { 325 static const byte data[] = {
333 SECTION(OLD_FUNCTIONS, 25), 1, 326 SECTION(OLD_FUNCTIONS, 25), 1,
334 // func#0 ------------------------------------------------------ 327 // func#0 ------------------------------------------------------
335 SIG_INDEX(0), // signature index 328 SIG_INDEX(0), // signature index
336 NO_NAME, // name length 329 NO_NAME, // name length
337 U32_LE(0), // code start offset 330 U32_LE(0), // code start offset
338 U32_LE(0), // code end offset 331 U32_LE(0), // code end offset
339 U16_LE(899), // local int32 count 332 U16_LE(899), // local int32 count
340 U16_LE(799), // local int64 count 333 U16_LE(799), // local int64 count
341 U16_LE(699), // local float32 count 334 U16_LE(699), // local float32 count
342 U16_LE(599), // local float64 count 335 U16_LE(599), // local float64 count
343 0, // exported 336 0, // exported
344 1 // external 337 1 // external
345 }; 338 };
346 339
347 ModuleResult result = DecodeModule(data, data + arraysize(data)); 340 ModuleResult result = DecodeModule(data, data + arraysize(data));
348 EXPECT_FALSE(result.ok()); 341 EXPECT_FALSE(result.ok());
349 if (result.val) delete result.val; 342 if (result.val) delete result.val;
350 } 343 }
351 344
352
353 TEST_F(WasmModuleVerifyTest, OneEmptyVoidVoidFunction) { 345 TEST_F(WasmModuleVerifyTest, OneEmptyVoidVoidFunction) {
354 const int kCodeStartOffset = 49; 346 const int kCodeStartOffset = 49;
355 const int kCodeEndOffset = kCodeStartOffset + 1; 347 const int kCodeEndOffset = kCodeStartOffset + 1;
356 348
357 static const byte data[] = { 349 static const byte data[] = {
358 // signatures 350 // signatures
359 SIGNATURES_SECTION_VOID_VOID, 351 SIGNATURES_SECTION_VOID_VOID,
360 // func#0 ------------------------------------------------------ 352 // func#0 ------------------------------------------------------
361 SECTION(OLD_FUNCTIONS, 18), 1, 353 SECTION(OLD_FUNCTIONS, 18), 1,
362 kDeclFunctionLocals | kDeclFunctionExport | kDeclFunctionName, 354 kDeclFunctionLocals | kDeclFunctionExport | kDeclFunctionName,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 386
395 EXPECT_TRUE(function->exported); 387 EXPECT_TRUE(function->exported);
396 EXPECT_FALSE(function->external); 388 EXPECT_FALSE(function->external);
397 389
398 if (result.val) delete result.val; 390 if (result.val) delete result.val;
399 } 391 }
400 392
401 EXPECT_OFF_END_FAILURE(data, 16, sizeof(data)); 393 EXPECT_OFF_END_FAILURE(data, 16, sizeof(data));
402 } 394 }
403 395
404
405 TEST_F(WasmModuleVerifyTest, OneFunctionImported) { 396 TEST_F(WasmModuleVerifyTest, OneFunctionImported) {
406 static const byte data[] = { 397 static const byte data[] = {
407 // signatures 398 // signatures
408 SIGNATURES_SECTION_VOID_VOID, 399 SIGNATURES_SECTION_VOID_VOID,
409 // functions 400 // functions
410 SECTION(OLD_FUNCTIONS, 4), 1, 401 SECTION(OLD_FUNCTIONS, 4), 1,
411 // func#0 ------------------------------------------------------ 402 // func#0 ------------------------------------------------------
412 kDeclFunctionImport, // no name, no locals, imported 403 kDeclFunctionImport, // no name, no locals, imported
413 SIG_INDEX(0), 404 SIG_INDEX(0),
414 }; 405 };
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 EXPECT_EQ(0, function->local_i64_count); 451 EXPECT_EQ(0, function->local_i64_count);
461 EXPECT_EQ(0, function->local_f32_count); 452 EXPECT_EQ(0, function->local_f32_count);
462 EXPECT_EQ(0, function->local_f64_count); 453 EXPECT_EQ(0, function->local_f64_count);
463 454
464 EXPECT_FALSE(function->exported); 455 EXPECT_FALSE(function->exported);
465 EXPECT_FALSE(function->external); 456 EXPECT_FALSE(function->external);
466 457
467 if (result.val) delete result.val; 458 if (result.val) delete result.val;
468 } 459 }
469 460
470
471 TEST_F(WasmModuleVerifyTest, OneFunctionWithNopBody_WithLocals) { 461 TEST_F(WasmModuleVerifyTest, OneFunctionWithNopBody_WithLocals) {
472 static const byte kCodeStartOffset = 46; 462 static const byte kCodeStartOffset = 46;
473 static const byte kCodeEndOffset = kCodeStartOffset + 1; 463 static const byte kCodeEndOffset = kCodeStartOffset + 1;
474 464
475 static const byte data[] = { 465 static const byte data[] = {
476 SIGNATURES_SECTION_VOID_VOID, // -- 466 SIGNATURES_SECTION_VOID_VOID, // --
477 SECTION(OLD_FUNCTIONS, 15), 1, 467 SECTION(OLD_FUNCTIONS, 15), 1,
478 // func#0 ------------------------------------------------------ 468 // func#0 ------------------------------------------------------
479 kDeclFunctionLocals, 0, 0, // signature index 469 kDeclFunctionLocals, 0, 0, // signature index
480 1, 2, // local int32 count 470 1, 2, // local int32 count
(...skipping 17 matching lines...) Expand all
498 EXPECT_EQ(1027, function->local_i64_count); 488 EXPECT_EQ(1027, function->local_i64_count);
499 EXPECT_EQ(1541, function->local_f32_count); 489 EXPECT_EQ(1541, function->local_f32_count);
500 EXPECT_EQ(2055, function->local_f64_count); 490 EXPECT_EQ(2055, function->local_f64_count);
501 491
502 EXPECT_FALSE(function->exported); 492 EXPECT_FALSE(function->exported);
503 EXPECT_FALSE(function->external); 493 EXPECT_FALSE(function->external);
504 494
505 if (result.val) delete result.val; 495 if (result.val) delete result.val;
506 } 496 }
507 497
508
509 TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) { 498 TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) {
510 static const byte kNameOffset = 49; 499 static const byte kNameOffset = 49;
511 static const byte kCodeStartOffset = 61; 500 static const byte kCodeStartOffset = 61;
512 static const byte kCodeEndOffset = kCodeStartOffset + 3; 501 static const byte kCodeEndOffset = kCodeStartOffset + 3;
513 static const byte kDataSegmentSourceOffset = kCodeEndOffset + 22; 502 static const byte kDataSegmentSourceOffset = kCodeEndOffset + 22;
514 503
515 static const byte data[] = { 504 static const byte data[] = {
516 // global#0 -------------------------------------------------- 505 // global#0 --------------------------------------------------
517 SECTION(GLOBALS, 4), 1, 506 SECTION(GLOBALS, 4), 1,
518 0, // name length 507 0, // name length
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 561
573 EXPECT_EQ(0x8b3ae, segment->dest_addr); 562 EXPECT_EQ(0x8b3ae, segment->dest_addr);
574 EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset); 563 EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset);
575 EXPECT_EQ(5, segment->source_size); 564 EXPECT_EQ(5, segment->source_size);
576 EXPECT_TRUE(segment->init); 565 EXPECT_TRUE(segment->init);
577 566
578 if (result.val) delete result.val; 567 if (result.val) delete result.val;
579 } 568 }
580 } 569 }
581 570
582
583 TEST_F(WasmModuleVerifyTest, OneDataSegment) { 571 TEST_F(WasmModuleVerifyTest, OneDataSegment) {
584 const byte kDataSegmentSourceOffset = 30; 572 const byte kDataSegmentSourceOffset = 30;
585 const byte data[] = { 573 const byte data[] = {
586 SECTION(MEMORY, 3), 574 SECTION(MEMORY, 3),
587 28, 575 28,
588 28, 576 28,
589 1, 577 1,
590 SECTION(DATA_SEGMENTS, 8), 578 SECTION(DATA_SEGMENTS, 8),
591 1, 579 1,
592 U32V_3(0x9bbaa), // dest addr 580 U32V_3(0x9bbaa), // dest addr
(...skipping 17 matching lines...) Expand all
610 EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset); 598 EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset);
611 EXPECT_EQ(3, segment->source_size); 599 EXPECT_EQ(3, segment->source_size);
612 EXPECT_TRUE(segment->init); 600 EXPECT_TRUE(segment->init);
613 601
614 if (result.val) delete result.val; 602 if (result.val) delete result.val;
615 } 603 }
616 604
617 EXPECT_OFF_END_FAILURE(data, 13, sizeof(data)); 605 EXPECT_OFF_END_FAILURE(data, 13, sizeof(data));
618 } 606 }
619 607
620
621 TEST_F(WasmModuleVerifyTest, TwoDataSegments) { 608 TEST_F(WasmModuleVerifyTest, TwoDataSegments) {
622 const byte kDataSegment0SourceOffset = 30; 609 const byte kDataSegment0SourceOffset = 30;
623 const byte kDataSegment1SourceOffset = 30 + 8; 610 const byte kDataSegment1SourceOffset = 30 + 8;
624 611
625 const byte data[] = { 612 const byte data[] = {
626 SECTION(MEMORY, 3), 613 SECTION(MEMORY, 3),
627 28, 614 28,
628 28, 615 28,
629 1, 616 1,
630 SECTION(DATA_SEGMENTS, 23), 617 SECTION(DATA_SEGMENTS, 23),
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 684
698 if (dest_addr <= (mem_size - source_size)) { 685 if (dest_addr <= (mem_size - source_size)) {
699 EXPECT_VERIFIES(data); 686 EXPECT_VERIFIES(data);
700 } else { 687 } else {
701 EXPECT_FAILURE(data); 688 EXPECT_FAILURE(data);
702 } 689 }
703 } 690 }
704 } 691 }
705 } 692 }
706 693
707
708 // To make below tests for indirect calls much shorter. 694 // To make below tests for indirect calls much shorter.
709 #define FUNCTION(sig_index, external) kDeclFunctionImport, SIG_INDEX(sig_index) 695 #define FUNCTION(sig_index, external) kDeclFunctionImport, SIG_INDEX(sig_index)
710 696
711 TEST_F(WasmModuleVerifyTest, OneIndirectFunction) { 697 TEST_F(WasmModuleVerifyTest, OneIndirectFunction) {
712 static const byte data[] = { 698 static const byte data[] = {
713 // sig#0 ------------------------------------------------------- 699 // sig#0 -------------------------------------------------------
714 SIGNATURES_SECTION_VOID_VOID, 700 SIGNATURES_SECTION_VOID_VOID,
715 // func#0 ------------------------------------------------------ 701 // func#0 ------------------------------------------------------
716 SECTION(OLD_FUNCTIONS, 4), 1, FUNCTION(0, 0), 702 SECTION(OLD_FUNCTIONS, 4), 1, FUNCTION(0, 0),
717 // indirect table ---------------------------------------------- 703 // indirect table ----------------------------------------------
718 SECTION(FUNCTION_TABLE, 2), 1, U32V_1(0)}; 704 SECTION(FUNCTION_TABLE, 2), 1, U32V_1(0)};
719 705
720 ModuleResult result = DecodeModule(data, data + arraysize(data)); 706 ModuleResult result = DecodeModule(data, data + arraysize(data));
721 EXPECT_OK(result); 707 EXPECT_OK(result);
722 if (result.ok()) { 708 if (result.ok()) {
723 EXPECT_EQ(1, result.val->signatures.size()); 709 EXPECT_EQ(1, result.val->signatures.size());
724 EXPECT_EQ(1, result.val->functions.size()); 710 EXPECT_EQ(1, result.val->functions.size());
725 EXPECT_EQ(1, result.val->function_table.size()); 711 EXPECT_EQ(1, result.val->function_table.size());
726 EXPECT_EQ(0, result.val->function_table[0]); 712 EXPECT_EQ(0, result.val->function_table[0]);
727 } 713 }
728 if (result.val) delete result.val; 714 if (result.val) delete result.val;
729 } 715 }
730 716
731
732 TEST_F(WasmModuleVerifyTest, MultipleIndirectFunctions) { 717 TEST_F(WasmModuleVerifyTest, MultipleIndirectFunctions) {
733 static const byte data[] = { 718 static const byte data[] = {
734 // sig#0 ------------------------------------------------------- 719 // sig#0 -------------------------------------------------------
735 SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_v_v + SIZEOF_SIG_ENTRY_v_x), 720 SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_v_v + SIZEOF_SIG_ENTRY_v_x),
736 2, // -- 721 2, // --
737 SIG_ENTRY_v_v, // void -> void 722 SIG_ENTRY_v_v, // void -> void
738 SIG_ENTRY_v_x(kLocalI32), // void -> i32 723 SIG_ENTRY_v_x(kLocalI32), // void -> i32
739 // func#0 ------------------------------------------------------ 724 // func#0 ------------------------------------------------------
740 SECTION(OLD_FUNCTIONS, 13), 4, FUNCTION(0, 1), // -- 725 SECTION(OLD_FUNCTIONS, 13), 4, FUNCTION(0, 1), // --
741 FUNCTION(1, 1), // -- 726 FUNCTION(1, 1), // --
(...skipping 17 matching lines...) Expand all
759 EXPECT_EQ(2, result.val->signatures.size()); 744 EXPECT_EQ(2, result.val->signatures.size());
760 EXPECT_EQ(4, result.val->functions.size()); 745 EXPECT_EQ(4, result.val->functions.size());
761 EXPECT_EQ(8, result.val->function_table.size()); 746 EXPECT_EQ(8, result.val->function_table.size());
762 for (int i = 0; i < 8; i++) { 747 for (int i = 0; i < 8; i++) {
763 EXPECT_EQ(i & 3, result.val->function_table[i]); 748 EXPECT_EQ(i & 3, result.val->function_table[i]);
764 } 749 }
765 } 750 }
766 if (result.val) delete result.val; 751 if (result.val) delete result.val;
767 } 752 }
768 753
769
770 TEST_F(WasmModuleVerifyTest, IndirectFunctionNoFunctions) { 754 TEST_F(WasmModuleVerifyTest, IndirectFunctionNoFunctions) {
771 static const byte data[] = { 755 static const byte data[] = {
772 // sig#0 ------------------------------------------------------- 756 // sig#0 -------------------------------------------------------
773 SIGNATURES_SECTION_VOID_VOID, 757 SIGNATURES_SECTION_VOID_VOID,
774 // indirect table ---------------------------------------------- 758 // indirect table ----------------------------------------------
775 SECTION(FUNCTION_TABLE, 3), 1, 0, 0, 759 SECTION(FUNCTION_TABLE, 3), 1, 0, 0,
776 }; 760 };
777 761
778 EXPECT_FAILURE(data); 762 EXPECT_FAILURE(data);
779 } 763 }
780 764
781
782 TEST_F(WasmModuleVerifyTest, IndirectFunctionInvalidIndex) { 765 TEST_F(WasmModuleVerifyTest, IndirectFunctionInvalidIndex) {
783 static const byte data[] = { 766 static const byte data[] = {
784 // sig#0 ------------------------------------------------------- 767 // sig#0 -------------------------------------------------------
785 SIGNATURES_SECTION_VOID_VOID, 768 SIGNATURES_SECTION_VOID_VOID,
786 // functions --------------------------------------------------- 769 // functions ---------------------------------------------------
787 SECTION(OLD_FUNCTIONS, 4), 1, FUNCTION(0, 1), 770 SECTION(OLD_FUNCTIONS, 4), 1, FUNCTION(0, 1),
788 // indirect table ---------------------------------------------- 771 // indirect table ----------------------------------------------
789 SECTION(FUNCTION_TABLE, 3), 1, 1, 0, 772 SECTION(FUNCTION_TABLE, 3), 1, 1, 0,
790 }; 773 };
791 774
792 EXPECT_FAILURE(data); 775 EXPECT_FAILURE(data);
793 } 776 }
794 777
795
796 class WasmSignatureDecodeTest : public TestWithZone {}; 778 class WasmSignatureDecodeTest : public TestWithZone {};
797 779
798
799 TEST_F(WasmSignatureDecodeTest, Ok_v_v) { 780 TEST_F(WasmSignatureDecodeTest, Ok_v_v) {
800 static const byte data[] = {SIG_ENTRY_v_v}; 781 static const byte data[] = {SIG_ENTRY_v_v};
801 base::AccountingAllocator allocator; 782 base::AccountingAllocator allocator;
802 Zone zone(&allocator); 783 Zone zone(&allocator);
803 FunctionSig* sig = 784 FunctionSig* sig =
804 DecodeWasmSignatureForTesting(&zone, data, data + arraysize(data)); 785 DecodeWasmSignatureForTesting(&zone, data, data + arraysize(data));
805 786
806 EXPECT_TRUE(sig != nullptr); 787 EXPECT_TRUE(sig != nullptr);
807 EXPECT_EQ(0, sig->parameter_count()); 788 EXPECT_EQ(0, sig->parameter_count());
808 EXPECT_EQ(0, sig->return_count()); 789 EXPECT_EQ(0, sig->return_count());
809 } 790 }
810 791
811
812 TEST_F(WasmSignatureDecodeTest, Ok_t_v) { 792 TEST_F(WasmSignatureDecodeTest, Ok_t_v) {
813 for (size_t i = 0; i < arraysize(kLocalTypes); i++) { 793 for (size_t i = 0; i < arraysize(kLocalTypes); i++) {
814 LocalTypePair ret_type = kLocalTypes[i]; 794 LocalTypePair ret_type = kLocalTypes[i];
815 const byte data[] = {SIG_ENTRY_x(ret_type.code)}; 795 const byte data[] = {SIG_ENTRY_x(ret_type.code)};
816 FunctionSig* sig = 796 FunctionSig* sig =
817 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data)); 797 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data));
818 798
819 EXPECT_TRUE(sig != nullptr); 799 EXPECT_TRUE(sig != nullptr);
820 EXPECT_EQ(0, sig->parameter_count()); 800 EXPECT_EQ(0, sig->parameter_count());
821 EXPECT_EQ(1, sig->return_count()); 801 EXPECT_EQ(1, sig->return_count());
822 EXPECT_EQ(ret_type.type, sig->GetReturn()); 802 EXPECT_EQ(ret_type.type, sig->GetReturn());
823 } 803 }
824 } 804 }
825 805
826
827 TEST_F(WasmSignatureDecodeTest, Ok_v_t) { 806 TEST_F(WasmSignatureDecodeTest, Ok_v_t) {
828 for (size_t i = 0; i < arraysize(kLocalTypes); i++) { 807 for (size_t i = 0; i < arraysize(kLocalTypes); i++) {
829 LocalTypePair param_type = kLocalTypes[i]; 808 LocalTypePair param_type = kLocalTypes[i];
830 const byte data[] = {SIG_ENTRY_v_x(param_type.code)}; 809 const byte data[] = {SIG_ENTRY_v_x(param_type.code)};
831 FunctionSig* sig = 810 FunctionSig* sig =
832 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data)); 811 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data));
833 812
834 EXPECT_TRUE(sig != nullptr); 813 EXPECT_TRUE(sig != nullptr);
835 EXPECT_EQ(1, sig->parameter_count()); 814 EXPECT_EQ(1, sig->parameter_count());
836 EXPECT_EQ(0, sig->return_count()); 815 EXPECT_EQ(0, sig->return_count());
837 EXPECT_EQ(param_type.type, sig->GetParam(0)); 816 EXPECT_EQ(param_type.type, sig->GetParam(0));
838 } 817 }
839 } 818 }
840 819
841
842 TEST_F(WasmSignatureDecodeTest, Ok_t_t) { 820 TEST_F(WasmSignatureDecodeTest, Ok_t_t) {
843 for (size_t i = 0; i < arraysize(kLocalTypes); i++) { 821 for (size_t i = 0; i < arraysize(kLocalTypes); i++) {
844 LocalTypePair ret_type = kLocalTypes[i]; 822 LocalTypePair ret_type = kLocalTypes[i];
845 for (size_t j = 0; j < arraysize(kLocalTypes); j++) { 823 for (size_t j = 0; j < arraysize(kLocalTypes); j++) {
846 LocalTypePair param_type = kLocalTypes[j]; 824 LocalTypePair param_type = kLocalTypes[j];
847 const byte data[] = {SIG_ENTRY_x_x(ret_type.code, param_type.code)}; 825 const byte data[] = {SIG_ENTRY_x_x(ret_type.code, param_type.code)};
848 FunctionSig* sig = 826 FunctionSig* sig =
849 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data)); 827 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data));
850 828
851 EXPECT_TRUE(sig != nullptr); 829 EXPECT_TRUE(sig != nullptr);
852 EXPECT_EQ(1, sig->parameter_count()); 830 EXPECT_EQ(1, sig->parameter_count());
853 EXPECT_EQ(1, sig->return_count()); 831 EXPECT_EQ(1, sig->return_count());
854 EXPECT_EQ(param_type.type, sig->GetParam(0)); 832 EXPECT_EQ(param_type.type, sig->GetParam(0));
855 EXPECT_EQ(ret_type.type, sig->GetReturn()); 833 EXPECT_EQ(ret_type.type, sig->GetReturn());
856 } 834 }
857 } 835 }
858 } 836 }
859 837
860
861 TEST_F(WasmSignatureDecodeTest, Ok_i_tt) { 838 TEST_F(WasmSignatureDecodeTest, Ok_i_tt) {
862 for (size_t i = 0; i < arraysize(kLocalTypes); i++) { 839 for (size_t i = 0; i < arraysize(kLocalTypes); i++) {
863 LocalTypePair p0_type = kLocalTypes[i]; 840 LocalTypePair p0_type = kLocalTypes[i];
864 for (size_t j = 0; j < arraysize(kLocalTypes); j++) { 841 for (size_t j = 0; j < arraysize(kLocalTypes); j++) {
865 LocalTypePair p1_type = kLocalTypes[j]; 842 LocalTypePair p1_type = kLocalTypes[j];
866 const byte data[] = { 843 const byte data[] = {
867 SIG_ENTRY_x_xx(kLocalI32, p0_type.code, p1_type.code)}; 844 SIG_ENTRY_x_xx(kLocalI32, p0_type.code, p1_type.code)};
868 FunctionSig* sig = 845 FunctionSig* sig =
869 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data)); 846 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data));
870 847
871 EXPECT_TRUE(sig != nullptr); 848 EXPECT_TRUE(sig != nullptr);
872 EXPECT_EQ(2, sig->parameter_count()); 849 EXPECT_EQ(2, sig->parameter_count());
873 EXPECT_EQ(1, sig->return_count()); 850 EXPECT_EQ(1, sig->return_count());
874 EXPECT_EQ(p0_type.type, sig->GetParam(0)); 851 EXPECT_EQ(p0_type.type, sig->GetParam(0));
875 EXPECT_EQ(p1_type.type, sig->GetParam(1)); 852 EXPECT_EQ(p1_type.type, sig->GetParam(1));
876 } 853 }
877 } 854 }
878 } 855 }
879 856
880
881 TEST_F(WasmSignatureDecodeTest, Fail_off_end) { 857 TEST_F(WasmSignatureDecodeTest, Fail_off_end) {
882 byte data[256]; 858 byte data[256];
883 for (int p = 0; p <= 255; p = p + 1 + p * 3) { 859 for (int p = 0; p <= 255; p = p + 1 + p * 3) {
884 for (int i = 0; i <= p; i++) data[i] = kLocalI32; 860 for (int i = 0; i <= p; i++) data[i] = kLocalI32;
885 data[0] = static_cast<byte>(p); 861 data[0] = static_cast<byte>(p);
886 862
887 for (int i = 0; i < p + 1; i++) { 863 for (int i = 0; i < p + 1; i++) {
888 // Should fall off the end for all signatures. 864 // Should fall off the end for all signatures.
889 FunctionSig* sig = DecodeWasmSignatureForTesting(zone(), data, data + i); 865 FunctionSig* sig = DecodeWasmSignatureForTesting(zone(), data, data + i);
890 EXPECT_EQ(nullptr, sig); 866 EXPECT_EQ(nullptr, sig);
891 } 867 }
892 } 868 }
893 } 869 }
894 870
895
896 TEST_F(WasmSignatureDecodeTest, Fail_invalid_type) { 871 TEST_F(WasmSignatureDecodeTest, Fail_invalid_type) {
897 byte kInvalidType = 76; 872 byte kInvalidType = 76;
898 for (size_t i = 0; i < SIZEOF_SIG_ENTRY_x_xx; i++) { 873 for (size_t i = 0; i < SIZEOF_SIG_ENTRY_x_xx; i++) {
899 byte data[] = {SIG_ENTRY_x_xx(kLocalI32, kLocalI32, kLocalI32)}; 874 byte data[] = {SIG_ENTRY_x_xx(kLocalI32, kLocalI32, kLocalI32)};
900 data[i] = kInvalidType; 875 data[i] = kInvalidType;
901 FunctionSig* sig = 876 FunctionSig* sig =
902 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data)); 877 DecodeWasmSignatureForTesting(zone(), data, data + arraysize(data));
903 EXPECT_EQ(nullptr, sig); 878 EXPECT_EQ(nullptr, sig);
904 } 879 }
905 } 880 }
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
1430 NO_LOCAL_NAMES, // -- 1405 NO_LOCAL_NAMES, // --
1431 FOO_STRING, 1406 FOO_STRING,
1432 NO_LOCAL_NAMES, // -- 1407 NO_LOCAL_NAMES, // --
1433 }; 1408 };
1434 EXPECT_VERIFIES(data); 1409 EXPECT_VERIFIES(data);
1435 } 1410 }
1436 1411
1437 } // namespace wasm 1412 } // namespace wasm
1438 } // namespace internal 1413 } // namespace internal
1439 } // namespace v8 1414 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/wasm/loop-assignment-analysis-unittest.cc ('k') | test/unittests/wasm/wasm-macro-gen-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698