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

Side by Side Diff: test/mjsunit/asm/asm-validation.js

Issue 2229723002: [wasm] Support validation of asm.js modules with != 3 args. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: mips and more Created 4 years, 4 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
« no previous file with comments | « src/runtime/runtime-test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --validate-asm --allow-natives-syntax
6
7 function IsAlwaysOpt(module) {
8 return %GetOptimizationStatus(module) === 3;
9 }
10
11 (function TestModuleArgs() {
12 function Module1(stdlib) {
13 "use asm";
14 function foo() { }
15 return { foo: foo };
16 }
17 function Module2(stdlib, ffi) {
18 "use asm";
19 function foo() { }
20 return { foo: foo };
21 }
22 function Module3(stdlib, ffi, heap) {
23 "use asm";
24 function foo() { }
25 return { foo: foo };
26 }
27 var modules = [Module1, Module2, Module3];
28 var heap = new ArrayBuffer(1024 * 1024);
29 for (var i = 0; i < modules.length; ++i) {
30 print('Module' + (i + 1));
31 var module = modules[i];
32 // TODO(bradnelson): Support modules without the stdlib.
33 var m = module({});
34 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module));
35 var m = module({}, {});
36 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module));
37 var m = module({}, {}, heap);
38 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module));
39 var m = module({}, {}, heap, {});
40 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module));
41 }
42 })();
43
44 (function TestBadModule() {
45 function Module(stdlib, ffi, heap) {
46 "use asm";
47 function foo() { var y = 3; var x = 1 + y; return 123; }
48 return { foo: foo };
49 }
50 var m = Module({});
51 assertFalse(%IsAsmWasmCode(Module));
52 assertEquals(123, m.foo());
53 })();
54
55 (function TestBadArgTypes() {
56 function Module(a, b, c) {
57 "use asm";
58 return {};
59 }
60 var m = Module(1, 2, 3);
61 assertFalse(%IsAsmWasmCode(Module));
62 assertEquals({}, m);
63 })();
64
65 (function TestBadArgTypesMismatch() {
66 function Module(a, b, c) {
67 "use asm";
68 return {};
69 }
70 var m = Module(1, 2);
71 assertFalse(%IsAsmWasmCode(Module));
72 assertEquals({}, m);
73 })();
74
75 (function TestModuleNoStdlib() {
76 // TODO(bradnelson):
77 // Support modules like this if they don't use the whole stdlib.
78 function Module() {
79 "use asm";
80 function foo() { return 123; }
81 return { foo: foo };
82 }
83 var m = Module({});
84 assertFalse(%IsAsmWasmCode(Module));
85 assertEquals(123, m.foo());
86 })();
87
88 (function TestModuleWith5() {
89 function Module(a, b, c, d, e) {
90 "use asm";
91 function foo() { return 123; }
92 return { foo: foo };
93 }
94 var heap = new ArrayBuffer(1024 * 1024);
95 var m = Module({}, {}, heap);
96 assertFalse(%IsAsmWasmCode(Module));
97 assertEquals(123, m.foo());
98 })();
99
100 (function TestModuleNoStdlibCall() {
101 function Module(stdlib, ffi, heap) {
102 "use asm";
103 function foo() { return 123; }
104 return { foo: foo };
105 }
106 // TODO(bradnelson): Support instantiation like this if stdlib is unused.
107 var m = Module();
108 assertFalse(%IsAsmWasmCode(Module));
109 assertEquals(123, m.foo());
110 })();
111
112 (function TestModuleNew() {
113 function Module(stdlib, ffi, heap) {
114 "use asm";
115 function foo() { return 123; }
116 return { foo: foo };
117 }
118 var m = new Module({}, {});
119 assertTrue(%IsAsmWasmCode(Module) || IsAlwaysOpt(Module));
120 assertEquals(123, m.foo());
121 })();
122
123 (function TestMultipleFailures() {
124 function Module(stdlib) {
125 "use asm";
126 function foo() { return 123; }
127 return { foo: foo };
128 }
129 var m1 = Module(1, 2, 3);
130 assertFalse(%IsAsmWasmCode(Module));
131 var m2 = Module(1, 2, 3);
132 assertFalse(%IsAsmWasmCode(Module));
133 assertEquals(123, m1.foo());
134 assertEquals(123, m2.foo());
135 })();
136
137 (function TestFailureThenSuccess() {
138 function MkModule() {
139 function Module(stdlib, ffi, heap) {
140 "use asm";
141 function foo() { return 123; }
142 return { foo: foo };
143 }
144 return Module;
145 }
146 var Module1 = MkModule();
147 var Module2 = MkModule();
148 var heap = new ArrayBuffer(1024 * 1024);
149 var m1 = Module1(1, 2, 3);
150 assertFalse(%IsAsmWasmCode(Module1));
151 var m2 = Module2({}, {}, heap);
152 assertFalse(%IsAsmWasmCode(Module2));
153 assertEquals(123, m1.foo());
154 assertEquals(123, m2.foo());
155 })();
156
157 (function TestSuccessThenFailure() {
158 function MkModule() {
159 function Module(stdlib, ffi, heap) {
160 "use asm";
161 function foo() { return 123; }
162 return { foo: foo };
163 }
164 return Module;
165 }
166 var Module1 = MkModule();
167 var Module2 = MkModule();
168 var heap = new ArrayBuffer(1024 * 1024);
169 var m1 = Module1({}, {}, heap);
170 assertTrue(%IsAsmWasmCode(Module1) || IsAlwaysOpt(Module1));
171 var m2 = Module2(1, 2, 3);
172 assertFalse(%IsAsmWasmCode(Module2));
173 assertEquals(123, m1.foo());
174 assertEquals(123, m2.foo());
175 })();
176
177 (function TestBoundFunction() {
178 function Module(stdlib, ffi, heap) {
179 "use asm";
180 function foo() { return 123; }
181 return { foo: foo };
182 }
183 var heap = new ArrayBuffer(1024 * 1024);
184 var ModuleBound = Module.bind(this, {}, {}, heap);
185 var m = ModuleBound();
186 assertTrue(%IsAsmWasmCode(Module) || IsAlwaysOpt(Module));
187 assertEquals(123, m.foo());
188 })();
OLDNEW
« no previous file with comments | « src/runtime/runtime-test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698