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

Side by Side Diff: test/mjsunit/wasm/table.js

Issue 2411963003: Implement Table#length and Table#get (Closed)
Patch Set: Git format nonsense Created 4 years, 2 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/wasm/wasm-js.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
1 // Copyright 2016 the V8 project authors. All rights reserved. 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 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 // Flags: --expose-wasm 5 // Flags: --expose-wasm
6 6
7 // Basic tests. 7 // Basic tests.
8 8
9 var outOfUint32RangeValue = 1e12; 9 var outOfUint32RangeValue = 1e12;
10 var int32ButOob = 1073741824; 10 var int32ButOob = 1073741824;
(...skipping 27 matching lines...) Expand all
38 38
39 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: -1}), R angeError); 39 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: -1}), R angeError);
40 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: outOfUi nt32RangeValue}), RangeError); 40 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: outOfUi nt32RangeValue}), RangeError);
41 41
42 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: -1}), RangeError); 42 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: -1}), RangeError);
43 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: outOfUint32RangeValue}), RangeError); 43 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: outOfUint32RangeValue}), RangeError);
44 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: 9}), RangeError); 44 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: 9}), RangeError);
45 45
46 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 0, maxi mum: int32ButOob})); 46 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 0, maxi mum: int32ButOob}));
47 47
48 let table = new WebAssembly.Table({element: "anyfunc", initial: 1}); 48 let table;
49 table = new WebAssembly.Table({element: "anyfunc", initial: 1});
49 assertTableIsValid(table); 50 assertTableIsValid(table);
50 })(); 51 assertEquals(1, table.length);
52 assertEquals(null, table.get(0));
51 53
52 (function TestConstructorWithMaximum() { 54 table = new WebAssembly.Table({element: "anyfunc", initial: "2"});
53 let table = new WebAssembly.Table({element: "anyfunc", maximum: 10});
54 assertTableIsValid(table); 55 assertTableIsValid(table);
55 })(); 56 assertEquals(2, table.length);
57 assertEquals(null, table.get(0));
58 assertEquals(null, table.get(1));
56 59
57 (function TestInitialIsUndefined() { 60 table = new WebAssembly.Table({element: "anyfunc", initial: {valueOf() { retur n "1" }}});
58 // New memory with initial = undefined, which means initial = 0.
59 let table = new WebAssembly.Table({element: "anyfunc", initial: undefined});
60 assertTableIsValid(table); 61 assertTableIsValid(table);
61 })(); 62 assertEquals(1, table.length);
63 assertEquals(null, table.get(0));
62 64
63 (function TestMaximumIsUndefined() { 65 table = new WebAssembly.Table({element: "anyfunc", initial: undefined});
64 // New memory with maximum = undefined, which means maximum = 0.
65 let table = new WebAssembly.Table({element: "anyfunc", initial: 0, maximum: un defined});
66 assertTableIsValid(table); 66 assertTableIsValid(table);
67 assertEquals(0, table.length);
68
69 table = new WebAssembly.Table({element: "anyfunc"});
70 assertTableIsValid(table);
71 assertEquals(0, table.length);
72
73 table = new WebAssembly.Table({element: "anyfunc", maximum: 10});
74 assertTableIsValid(table);
75 assertEquals(0, table.length);
76
77 table = new WebAssembly.Table({element: "anyfunc", maximum: "10"});
78 assertTableIsValid(table);
79 assertEquals(0, table.length);
80
81 table = new WebAssembly.Table({element: "anyfunc", maximum: {valueOf() { retur n "10" }}});
82 assertTableIsValid(table);
83 assertEquals(0, table.length);
84
85 table = new WebAssembly.Table({element: "anyfunc", initial: 0, maximum: undefi ned});
86 assertTableIsValid(table);
87 assertEquals(0, table.length);
67 })(); 88 })();
68 89
69 (function TestMaximumIsReadOnce() { 90 (function TestMaximumIsReadOnce() {
70 var a = true; 91 var a = true;
71 var desc = {element: "anyfunc", initial: 10}; 92 var desc = {element: "anyfunc", initial: 10};
72 Object.defineProperty(desc, 'maximum', {get: function() { 93 Object.defineProperty(desc, 'maximum', {get: function() {
73 if (a) { 94 if (a) {
74 a = false; 95 a = false;
75 return 16; 96 return 16;
76 } 97 }
77 else { 98 else {
78 // Change the return value on the second call so it throws. 99 // Change the return value on the second call so it throws.
79 return -1; 100 return -1;
80 } 101 }
81 }}); 102 }});
82 let table = new WebAssembly.Table(desc); 103 let table = new WebAssembly.Table(desc);
83 assertTableIsValid(table); 104 assertTableIsValid(table);
84 })(); 105 })();
85 106
86 (function TestMaximumDoesHasProperty() { 107 (function TestMaximumDoesHasProperty() {
87 var hasPropertyWasCalled = false; 108 var hasPropertyWasCalled = false;
88 var desc = {element: "anyfunc", initial: 10}; 109 var desc = {element: "anyfunc", initial: 10};
89 var proxy = new Proxy({maximum: 16}, { 110 var proxy = new Proxy({maximum: 16}, {
90 has: function(target, name) { hasPropertyWasCalled = true; } 111 has: function(target, name) { hasPropertyWasCalled = true; }
91 }); 112 });
92 Object.setPrototypeOf(desc, proxy); 113 Object.setPrototypeOf(desc, proxy);
93 let table = new WebAssembly.Table(desc); 114 let table = new WebAssembly.Table(desc);
94 assertTableIsValid(table); 115 assertTableIsValid(table);
95 })(); 116 })();
117
118 (function TestLength() {
119 for (let i = 0; i < 10; ++i) {
120 let table = new WebAssembly.Table({element: "anyfunc", initial: i});
121 assertEquals(i, table.length);
122 }
123
124 assertThrows(() => WebAssembly.Table.prototype.length.call([]), TypeError);
125 })();
126
127 (function TestGet() {
128 let table = new WebAssembly.Table({element: "anyfunc", initial: 10});
129
130 for (let i = 0; i < 10; ++i) {
131 assertEquals(null, table.get(i));
132 assertEquals(null, table.get(String(i)));
133 }
134 assertEquals(null, table.get(""));
135 assertEquals(null, table.get(NaN));
136 assertEquals(null, table.get({}));
137 assertEquals(null, table.get([]));
138 assertEquals(null, table.get(() => {}));
139
140 assertEquals(undefined, table.get(10));
141 assertEquals(undefined, table.get(-1));
142
143 assertThrows(() => table.get(Symbol()), TypeError);
144 assertThrows(() => WebAssembly.Table.prototype.get.call([], 0), TypeError);
145 })();
OLDNEW
« no previous file with comments | « src/wasm/wasm-js.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698