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

Unified Diff: test/unittests/wasm/encoder-unittest.cc

Issue 1775873002: [Wasm] Convert many of the fixed-size values to LEB128. (Closed) Base URL: http://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix windows Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/wasm/wasm-module-builder.js ('k') | test/unittests/wasm/module-decoder-unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/unittests/wasm/encoder-unittest.cc
diff --git a/test/unittests/wasm/encoder-unittest.cc b/test/unittests/wasm/encoder-unittest.cc
index 69677c2478f1bf7025b87fcaca7aac6865761f90..f7c54591f9392026c29e059dbb028ed0f63fb0fa 100644
--- a/test/unittests/wasm/encoder-unittest.cc
+++ b/test/unittests/wasm/encoder-unittest.cc
@@ -108,6 +108,80 @@ TEST_F(EncoderTest, Function_Builder_Indexing_Variable_Width) {
body = buffer + f->HeaderSize();
}
+TEST_F(EncoderTest, Function_Builder_Block_Variable_Width) {
+ Zone zone;
+ WasmModuleBuilder* builder = new (&zone) WasmModuleBuilder(&zone);
+ uint16_t f_index = builder->AddFunction();
+ WasmFunctionBuilder* function = builder->FunctionAt(f_index);
+ function->EmitWithVarInt(kExprBlock, 200);
+ for (int i = 0; i < 200; ++i) {
+ function->Emit(kExprNop);
+ }
+
+ WasmFunctionEncoder* f = function->Build(&zone, builder);
+ CHECK_EQ(f->BodySize(), 204);
+}
+
+TEST_F(EncoderTest, Function_Builder_EmitEditableVarIntImmediate) {
+ Zone zone;
+ WasmModuleBuilder* builder = new (&zone) WasmModuleBuilder(&zone);
+ uint16_t f_index = builder->AddFunction();
+ WasmFunctionBuilder* function = builder->FunctionAt(f_index);
+ function->Emit(kExprLoop);
+ uint32_t offset = function->EmitEditableVarIntImmediate();
+ for (int i = 0; i < 200; ++i) {
+ function->Emit(kExprNop);
+ }
+ function->EditVarIntImmediate(offset, 200);
+
+ WasmFunctionEncoder* f = function->Build(&zone, builder);
+ CHECK_EQ(f->BodySize(), 204);
+}
+
+TEST_F(EncoderTest, Function_Builder_EmitEditableVarIntImmediate_Locals) {
+ Zone zone;
+ WasmModuleBuilder* builder = new (&zone) WasmModuleBuilder(&zone);
+ uint16_t f_index = builder->AddFunction();
+ WasmFunctionBuilder* function = builder->FunctionAt(f_index);
+ function->Emit(kExprBlock);
+ uint32_t offset = function->EmitEditableVarIntImmediate();
+ for (int i = 0; i < 200; ++i) {
+ AddLocal(function, kAstI32);
+ }
+ function->EditVarIntImmediate(offset, 200);
+
+ WasmFunctionEncoder* f = function->Build(&zone, builder);
+ ZoneVector<uint8_t> buffer_vector(f->HeaderSize() + f->BodySize(), &zone);
+ byte* buffer = &buffer_vector[0];
+ byte* header = buffer;
+ byte* body = buffer + f->HeaderSize();
+ f->Serialize(buffer, &header, &body);
+ body = buffer + f->HeaderSize();
+
+ CHECK_EQ(f->BodySize(), 479);
+ const uint8_t varint200_low = (200 & 0x7f) | 0x80;
+ const uint8_t varint200_high = (200 >> 7) & 0x7f;
+ offset = 0;
+ CHECK_EQ(body[offset++], 1); // Local decl count.
+ CHECK_EQ(body[offset++], varint200_low);
+ CHECK_EQ(body[offset++], varint200_high);
+ CHECK_EQ(body[offset++], kLocalI32);
+ CHECK_EQ(body[offset++], kExprBlock);
+ CHECK_EQ(body[offset++], varint200_low);
+ CHECK_EQ(body[offset++], varint200_high);
+ // GetLocal with one-byte indices.
+ for (int i = 0; i <= 127; ++i) {
+ CHECK_EQ(body[offset++], kExprGetLocal);
+ CHECK_EQ(body[offset++], i);
+ }
+ // GetLocal with two-byte indices.
+ for (int i = 128; i < 200; ++i) {
+ CHECK_EQ(body[offset++], kExprGetLocal);
+ CHECK_EQ(body[offset++], (i & 0x7f) | 0x80);
+ CHECK_EQ(body[offset++], (i >> 7) & 0x7f);
+ }
+ CHECK_EQ(offset, 479);
+}
TEST_F(EncoderTest, LEB_Functions) {
byte leb_value[5] = {0, 0, 0, 0, 0};
« no previous file with comments | « test/mjsunit/wasm/wasm-module-builder.js ('k') | test/unittests/wasm/module-decoder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698