|
1 // |reftest| skip-if(!xulRuntime.shell) |
|
2 /* |
|
3 * Any copyright is dedicated to the Public Domain. |
|
4 * http://creativecommons.org/licenses/publicdomain/ |
|
5 * Contributor: Tobias Schneider <schneider@jancona.com> |
|
6 */ |
|
7 |
|
8 //------------------------------------------------------------------------------ |
|
9 var BUGNUMBER = 575688; |
|
10 var summary = 'DataView tests'; |
|
11 |
|
12 function test() { |
|
13 function die(message, uplevel) { |
|
14 var e = new Error(message); |
|
15 var frame = e.stack.split("\n")[uplevel]; |
|
16 print(message + " at " + frame.split("@")[1]); |
|
17 print("Stack:\n" + e.stack); |
|
18 throw(e); |
|
19 } |
|
20 |
|
21 function checkThrow(fun, type) { |
|
22 var thrown = false; |
|
23 try { |
|
24 fun(); |
|
25 } catch (x) { |
|
26 thrown = x; |
|
27 } |
|
28 |
|
29 if (!thrown) { |
|
30 die('no exception thrown, expected ' + type.name, 2); |
|
31 } else if (!(thrown instanceof type)) { |
|
32 die('expected ' + type.name + ', got ' + thrown, 2); |
|
33 } |
|
34 } |
|
35 |
|
36 function checkThrowTODO(fun, type) { |
|
37 var thrown = false; |
|
38 try { |
|
39 fun(); |
|
40 } catch (x) { |
|
41 thrown = x; |
|
42 } |
|
43 |
|
44 if (!thrown) { |
|
45 print('(TODO) no exception thrown, expected ' + type.name); |
|
46 } else if (!(thrown instanceof type)) { |
|
47 print('(TODO) expected ' + type.name + ', got ' + thrown); |
|
48 } else { |
|
49 print('test unexpectedly passed: expected ' + type.name + ' exception'); |
|
50 } |
|
51 } |
|
52 |
|
53 enterFunc ('test'); |
|
54 printBugNumber(BUGNUMBER); |
|
55 printStatus(summary); |
|
56 |
|
57 // testConstructor |
|
58 buffer = (new Uint8Array([1, 2])).buffer; |
|
59 checkThrow(function () new DataView(buffer, 0, 3), RangeError); |
|
60 checkThrow(function () new DataView(buffer, 1, 2), RangeError); |
|
61 checkThrow(function () new DataView(buffer, 2, 1), RangeError); |
|
62 checkThrow(function () new DataView(buffer, 2147483649, 0), RangeError); |
|
63 checkThrow(function () new DataView(buffer, 0, 2147483649), RangeError); |
|
64 checkThrow(function() new DataView(), TypeError); |
|
65 checkThrow(function() new DataView(Object.create(new ArrayBuffer(5))), TypeError); |
|
66 |
|
67 // testGetMethods |
|
68 |
|
69 // testIntegerGets(start=0, length=16) |
|
70 var data1 = [0,1,2,3,0x64,0x65,0x66,0x67,0x80,0x81,0x82,0x83,252,253,254,255]; |
|
71 var data1_r = data1.slice().reverse(); |
|
72 var buffer1 = new Uint8Array(data1).buffer; |
|
73 var view1 = new DataView(buffer1, 0, 16); |
|
74 view = view1; |
|
75 assertEq(view.getInt8(0), 0); |
|
76 assertEq(view.getInt8(8), -128); |
|
77 assertEq(view.getInt8(15), -1); |
|
78 assertEq(view.getUint8(0), 0); |
|
79 assertEq(view.getUint8(8), 128); |
|
80 assertEq(view.getUint8(15), 255); |
|
81 // Little endian. |
|
82 assertEq(view.getInt16(0, true), 256); |
|
83 assertEq(view.getInt16(5, true), 0x6665); |
|
84 assertEq(view.getInt16(9, true), -32127); |
|
85 assertEq(view.getInt16(14, true), -2); |
|
86 // Big endian. |
|
87 assertEq(view.getInt16(0), 1); |
|
88 assertEq(view.getInt16(5), 0x6566); |
|
89 assertEq(view.getInt16(9), -32382); |
|
90 assertEq(view.getInt16(14), -257); |
|
91 // Little endian. |
|
92 assertEq(view.getUint16(0, true), 256); |
|
93 assertEq(view.getUint16(5, true), 0x6665); |
|
94 assertEq(view.getUint16(9, true), 0x8281); |
|
95 assertEq(view.getUint16(14, true), 0xfffe); |
|
96 // Big endian. |
|
97 assertEq(view.getUint16(0), 1); |
|
98 assertEq(view.getUint16(5), 0x6566); |
|
99 assertEq(view.getUint16(9), 0x8182); |
|
100 assertEq(view.getUint16(14), 0xfeff); |
|
101 // Little endian. |
|
102 assertEq(view.getInt32(0, true), 0x3020100); |
|
103 assertEq(view.getInt32(3, true), 0x66656403); |
|
104 assertEq(view.getInt32(6, true), -2122291354); |
|
105 assertEq(view.getInt32(9, true), -58490239); |
|
106 assertEq(view.getInt32(12, true), -66052); |
|
107 // Big endian. |
|
108 assertEq(view.getInt32(0), 0x10203); |
|
109 assertEq(view.getInt32(3), 0x3646566); |
|
110 assertEq(view.getInt32(6), 0x66678081); |
|
111 assertEq(view.getInt32(9), -2122152964); |
|
112 assertEq(view.getInt32(12), -50462977); |
|
113 // Little endian. |
|
114 assertEq(view.getUint32(0, true), 0x3020100); |
|
115 assertEq(view.getUint32(3, true), 0x66656403); |
|
116 assertEq(view.getUint32(6, true), 0x81806766); |
|
117 assertEq(view.getUint32(9, true), 0xfc838281); |
|
118 assertEq(view.getUint32(12, true), 0xfffefdfc); |
|
119 // Big endian. |
|
120 assertEq(view.getUint32(0), 0x10203); |
|
121 assertEq(view.getUint32(3), 0x3646566); |
|
122 assertEq(view.getUint32(6), 0x66678081); |
|
123 assertEq(view.getUint32(9), 0x818283fc); |
|
124 assertEq(view.getUint32(12), 0xfcfdfeff); |
|
125 |
|
126 // testFloatGets(start=0) |
|
127 |
|
128 // testFloatGet expected=10 |
|
129 // Little endian |
|
130 var data2 = [0,0,32,65]; |
|
131 var data2_r = data2.slice().reverse(); |
|
132 var buffer2 = new Uint8Array(data2).buffer; |
|
133 view = new DataView(buffer2, 0, 4); |
|
134 assertEq(view.getFloat32(0, true), 10); |
|
135 var buffer2_pad3 = new Uint8Array(Array(3).concat(data2)).buffer; |
|
136 view = new DataView(buffer2_pad3, 0, 7); |
|
137 assertEq(view.getFloat32(3, true), 10); |
|
138 var buffer2_pad7 = new Uint8Array(Array(7).concat(data2)).buffer; |
|
139 view = new DataView(buffer2_pad7, 0, 11); |
|
140 assertEq(view.getFloat32(7, true), 10); |
|
141 var buffer2_pad10 = new Uint8Array(Array(10).concat(data2)).buffer; |
|
142 view = new DataView(buffer2_pad10, 0, 14); |
|
143 assertEq(view.getFloat32(10, true), 10); |
|
144 // Big endian. |
|
145 var buffer2_r = new Uint8Array(data2_r).buffer; |
|
146 view = new DataView(buffer2_r, 0, 4); |
|
147 assertEq(view.getFloat32(0, false), 10); |
|
148 var buffer2_r_pad3 = new Uint8Array(Array(3).concat(data2_r)).buffer; |
|
149 view = new DataView(buffer2_r_pad3, 0, 7); |
|
150 assertEq(view.getFloat32(3, false), 10); |
|
151 var buffer2_r_pad7 = new Uint8Array(Array(7).concat(data2_r)).buffer; |
|
152 view = new DataView(buffer2_r_pad7, 0, 11); |
|
153 assertEq(view.getFloat32(7, false), 10); |
|
154 var buffer2_r_pad10 = new Uint8Array(Array(10).concat(data2_r)).buffer; |
|
155 view = new DataView(buffer2_r_pad10, 0, 14); |
|
156 assertEq(view.getFloat32(10, false), 10); |
|
157 |
|
158 // testFloatGet expected=1.2300000190734863 |
|
159 // Little endian |
|
160 var data3 = [164,112,157,63]; |
|
161 var data3_r = data3.slice().reverse(); |
|
162 var buffer3 = new Uint8Array(data3).buffer; |
|
163 view = new DataView(buffer3, 0, 4); |
|
164 assertEq(view.getFloat32(0, true), 1.2300000190734863); |
|
165 var buffer3_pad3 = new Uint8Array(Array(3).concat(data3)).buffer; |
|
166 view = new DataView(buffer3_pad3, 0, 7); |
|
167 assertEq(view.getFloat32(3, true), 1.2300000190734863); |
|
168 var buffer3_pad7 = new Uint8Array(Array(7).concat(data3)).buffer; |
|
169 view = new DataView(buffer3_pad7, 0, 11); |
|
170 assertEq(view.getFloat32(7, true), 1.2300000190734863); |
|
171 var buffer3_pad10 = new Uint8Array(Array(10).concat(data3)).buffer; |
|
172 view = new DataView(buffer3_pad10, 0, 14); |
|
173 assertEq(view.getFloat32(10, true), 1.2300000190734863); |
|
174 // Big endian. |
|
175 var buffer3_r = new Uint8Array(data3_r).buffer; |
|
176 view = new DataView(buffer3_r, 0, 4); |
|
177 assertEq(view.getFloat32(0, false), 1.2300000190734863); |
|
178 var buffer3_r_pad3 = new Uint8Array(Array(3).concat(data3_r)).buffer; |
|
179 view = new DataView(buffer3_r_pad3, 0, 7); |
|
180 assertEq(view.getFloat32(3, false), 1.2300000190734863); |
|
181 var buffer3_r_pad7 = new Uint8Array(Array(7).concat(data3_r)).buffer; |
|
182 view = new DataView(buffer3_r_pad7, 0, 11); |
|
183 assertEq(view.getFloat32(7, false), 1.2300000190734863); |
|
184 var buffer3_r_pad10 = new Uint8Array(Array(10).concat(data3_r)).buffer; |
|
185 view = new DataView(buffer3_r_pad10, 0, 14); |
|
186 assertEq(view.getFloat32(10, false), 1.2300000190734863); |
|
187 |
|
188 // testFloatGet expected=-45621.37109375 |
|
189 // Little endian |
|
190 var data4 = [95,53,50,199]; |
|
191 var data4_r = data4.slice().reverse(); |
|
192 var buffer4 = new Uint8Array(data4).buffer; |
|
193 view = new DataView(buffer4, 0, 4); |
|
194 assertEq(view.getFloat32(0, true), -45621.37109375); |
|
195 var buffer4_pad3 = new Uint8Array(Array(3).concat(data4)).buffer; |
|
196 view = new DataView(buffer4_pad3, 0, 7); |
|
197 assertEq(view.getFloat32(3, true), -45621.37109375); |
|
198 var buffer4_pad7 = new Uint8Array(Array(7).concat(data4)).buffer; |
|
199 view = new DataView(buffer4_pad7, 0, 11); |
|
200 assertEq(view.getFloat32(7, true), -45621.37109375); |
|
201 var buffer4_pad10 = new Uint8Array(Array(10).concat(data4)).buffer; |
|
202 view = new DataView(buffer4_pad10, 0, 14); |
|
203 assertEq(view.getFloat32(10, true), -45621.37109375); |
|
204 // Big endian. |
|
205 var buffer4_r = new Uint8Array(data4_r).buffer; |
|
206 view = new DataView(buffer4_r, 0, 4); |
|
207 assertEq(view.getFloat32(0, false), -45621.37109375); |
|
208 var buffer4_r_pad3 = new Uint8Array(Array(3).concat(data4_r)).buffer; |
|
209 view = new DataView(buffer4_r_pad3, 0, 7); |
|
210 assertEq(view.getFloat32(3, false), -45621.37109375); |
|
211 var buffer4_r_pad7 = new Uint8Array(Array(7).concat(data4_r)).buffer; |
|
212 view = new DataView(buffer4_r_pad7, 0, 11); |
|
213 assertEq(view.getFloat32(7, false), -45621.37109375); |
|
214 var buffer4_r_pad10 = new Uint8Array(Array(10).concat(data4_r)).buffer; |
|
215 view = new DataView(buffer4_r_pad10, 0, 14); |
|
216 assertEq(view.getFloat32(10, false), -45621.37109375); |
|
217 |
|
218 // testFloatGet expected=NaN |
|
219 // Little endian |
|
220 var data5 = [255,255,255,127]; |
|
221 var data5_r = data5.slice().reverse(); |
|
222 var buffer5 = new Uint8Array(data5).buffer; |
|
223 view = new DataView(buffer5, 0, 4); |
|
224 assertEq(view.getFloat32(0, true), NaN); |
|
225 var buffer5_pad3 = new Uint8Array(Array(3).concat(data5)).buffer; |
|
226 view = new DataView(buffer5_pad3, 0, 7); |
|
227 assertEq(view.getFloat32(3, true), NaN); |
|
228 var buffer5_pad7 = new Uint8Array(Array(7).concat(data5)).buffer; |
|
229 view = new DataView(buffer5_pad7, 0, 11); |
|
230 assertEq(view.getFloat32(7, true), NaN); |
|
231 var buffer5_pad10 = new Uint8Array(Array(10).concat(data5)).buffer; |
|
232 view = new DataView(buffer5_pad10, 0, 14); |
|
233 assertEq(view.getFloat32(10, true), NaN); |
|
234 // Big endian. |
|
235 var buffer5_r = new Uint8Array(data5_r).buffer; |
|
236 view = new DataView(buffer5_r, 0, 4); |
|
237 assertEq(view.getFloat32(0, false), NaN); |
|
238 var buffer5_r_pad3 = new Uint8Array(Array(3).concat(data5_r)).buffer; |
|
239 view = new DataView(buffer5_r_pad3, 0, 7); |
|
240 assertEq(view.getFloat32(3, false), NaN); |
|
241 var buffer5_r_pad7 = new Uint8Array(Array(7).concat(data5_r)).buffer; |
|
242 view = new DataView(buffer5_r_pad7, 0, 11); |
|
243 assertEq(view.getFloat32(7, false), NaN); |
|
244 var buffer5_r_pad10 = new Uint8Array(Array(10).concat(data5_r)).buffer; |
|
245 view = new DataView(buffer5_r_pad10, 0, 14); |
|
246 assertEq(view.getFloat32(10, false), NaN); |
|
247 |
|
248 // testFloatGet expected=NaN |
|
249 // Little endian |
|
250 var data6 = [255,255,255,255]; |
|
251 var data6_r = data6.slice().reverse(); |
|
252 var buffer6 = new Uint8Array(data6).buffer; |
|
253 view = new DataView(buffer6, 0, 4); |
|
254 assertEq(view.getFloat32(0, true), NaN); |
|
255 var buffer6_pad3 = new Uint8Array(Array(3).concat(data6)).buffer; |
|
256 view = new DataView(buffer6_pad3, 0, 7); |
|
257 assertEq(view.getFloat32(3, true), NaN); |
|
258 var buffer6_pad7 = new Uint8Array(Array(7).concat(data6)).buffer; |
|
259 view = new DataView(buffer6_pad7, 0, 11); |
|
260 assertEq(view.getFloat32(7, true), NaN); |
|
261 var buffer6_pad10 = new Uint8Array(Array(10).concat(data6)).buffer; |
|
262 view = new DataView(buffer6_pad10, 0, 14); |
|
263 assertEq(view.getFloat32(10, true), NaN); |
|
264 // Big endian. |
|
265 var buffer6_r = new Uint8Array(data6_r).buffer; |
|
266 view = new DataView(buffer6_r, 0, 4); |
|
267 assertEq(view.getFloat32(0, false), NaN); |
|
268 var buffer6_r_pad3 = new Uint8Array(Array(3).concat(data6_r)).buffer; |
|
269 view = new DataView(buffer6_r_pad3, 0, 7); |
|
270 assertEq(view.getFloat32(3, false), NaN); |
|
271 var buffer6_r_pad7 = new Uint8Array(Array(7).concat(data6_r)).buffer; |
|
272 view = new DataView(buffer6_r_pad7, 0, 11); |
|
273 assertEq(view.getFloat32(7, false), NaN); |
|
274 var buffer6_r_pad10 = new Uint8Array(Array(10).concat(data6_r)).buffer; |
|
275 view = new DataView(buffer6_r_pad10, 0, 14); |
|
276 assertEq(view.getFloat32(10, false), NaN); |
|
277 |
|
278 // testFloatGet expected=10 |
|
279 // Little endian |
|
280 var data7 = [0,0,0,0,0,0,36,64]; |
|
281 var data7_r = data7.slice().reverse(); |
|
282 var buffer7 = new Uint8Array(data7).buffer; |
|
283 view = new DataView(buffer7, 0, 8); |
|
284 assertEq(view.getFloat64(0, true), 10); |
|
285 var buffer7_pad3 = new Uint8Array(Array(3).concat(data7)).buffer; |
|
286 view = new DataView(buffer7_pad3, 0, 11); |
|
287 assertEq(view.getFloat64(3, true), 10); |
|
288 var buffer7_pad7 = new Uint8Array(Array(7).concat(data7)).buffer; |
|
289 view = new DataView(buffer7_pad7, 0, 15); |
|
290 assertEq(view.getFloat64(7, true), 10); |
|
291 var buffer7_pad10 = new Uint8Array(Array(10).concat(data7)).buffer; |
|
292 view = new DataView(buffer7_pad10, 0, 18); |
|
293 assertEq(view.getFloat64(10, true), 10); |
|
294 // Big endian. |
|
295 var buffer7_r = new Uint8Array(data7_r).buffer; |
|
296 view = new DataView(buffer7_r, 0, 8); |
|
297 assertEq(view.getFloat64(0, false), 10); |
|
298 var buffer7_r_pad3 = new Uint8Array(Array(3).concat(data7_r)).buffer; |
|
299 view = new DataView(buffer7_r_pad3, 0, 11); |
|
300 assertEq(view.getFloat64(3, false), 10); |
|
301 var buffer7_r_pad7 = new Uint8Array(Array(7).concat(data7_r)).buffer; |
|
302 view = new DataView(buffer7_r_pad7, 0, 15); |
|
303 assertEq(view.getFloat64(7, false), 10); |
|
304 var buffer7_r_pad10 = new Uint8Array(Array(10).concat(data7_r)).buffer; |
|
305 view = new DataView(buffer7_r_pad10, 0, 18); |
|
306 assertEq(view.getFloat64(10, false), 10); |
|
307 |
|
308 // testFloatGet expected=1.23 |
|
309 // Little endian |
|
310 var data8 = [174,71,225,122,20,174,243,63]; |
|
311 var data8_r = data8.slice().reverse(); |
|
312 var buffer8 = new Uint8Array(data8).buffer; |
|
313 view = new DataView(buffer8, 0, 8); |
|
314 assertEq(view.getFloat64(0, true), 1.23); |
|
315 var buffer8_pad3 = new Uint8Array(Array(3).concat(data8)).buffer; |
|
316 view = new DataView(buffer8_pad3, 0, 11); |
|
317 assertEq(view.getFloat64(3, true), 1.23); |
|
318 var buffer8_pad7 = new Uint8Array(Array(7).concat(data8)).buffer; |
|
319 view = new DataView(buffer8_pad7, 0, 15); |
|
320 assertEq(view.getFloat64(7, true), 1.23); |
|
321 var buffer8_pad10 = new Uint8Array(Array(10).concat(data8)).buffer; |
|
322 view = new DataView(buffer8_pad10, 0, 18); |
|
323 assertEq(view.getFloat64(10, true), 1.23); |
|
324 // Big endian. |
|
325 var buffer8_r = new Uint8Array(data8_r).buffer; |
|
326 view = new DataView(buffer8_r, 0, 8); |
|
327 assertEq(view.getFloat64(0, false), 1.23); |
|
328 var buffer8_r_pad3 = new Uint8Array(Array(3).concat(data8_r)).buffer; |
|
329 view = new DataView(buffer8_r_pad3, 0, 11); |
|
330 assertEq(view.getFloat64(3, false), 1.23); |
|
331 var buffer8_r_pad7 = new Uint8Array(Array(7).concat(data8_r)).buffer; |
|
332 view = new DataView(buffer8_r_pad7, 0, 15); |
|
333 assertEq(view.getFloat64(7, false), 1.23); |
|
334 var buffer8_r_pad10 = new Uint8Array(Array(10).concat(data8_r)).buffer; |
|
335 view = new DataView(buffer8_r_pad10, 0, 18); |
|
336 assertEq(view.getFloat64(10, false), 1.23); |
|
337 |
|
338 // testFloatGet expected=-6213576.4839 |
|
339 // Little endian |
|
340 var data9 = [181,55,248,30,242,179,87,193]; |
|
341 var data9_r = data9.slice().reverse(); |
|
342 var buffer9 = new Uint8Array(data9).buffer; |
|
343 view = new DataView(buffer9, 0, 8); |
|
344 assertEq(view.getFloat64(0, true), -6213576.4839); |
|
345 var buffer9_pad3 = new Uint8Array(Array(3).concat(data9)).buffer; |
|
346 view = new DataView(buffer9_pad3, 0, 11); |
|
347 assertEq(view.getFloat64(3, true), -6213576.4839); |
|
348 var buffer9_pad7 = new Uint8Array(Array(7).concat(data9)).buffer; |
|
349 view = new DataView(buffer9_pad7, 0, 15); |
|
350 assertEq(view.getFloat64(7, true), -6213576.4839); |
|
351 var buffer9_pad10 = new Uint8Array(Array(10).concat(data9)).buffer; |
|
352 view = new DataView(buffer9_pad10, 0, 18); |
|
353 assertEq(view.getFloat64(10, true), -6213576.4839); |
|
354 // Big endian. |
|
355 var buffer9_r = new Uint8Array(data9_r).buffer; |
|
356 view = new DataView(buffer9_r, 0, 8); |
|
357 assertEq(view.getFloat64(0, false), -6213576.4839); |
|
358 var buffer9_r_pad3 = new Uint8Array(Array(3).concat(data9_r)).buffer; |
|
359 view = new DataView(buffer9_r_pad3, 0, 11); |
|
360 assertEq(view.getFloat64(3, false), -6213576.4839); |
|
361 var buffer9_r_pad7 = new Uint8Array(Array(7).concat(data9_r)).buffer; |
|
362 view = new DataView(buffer9_r_pad7, 0, 15); |
|
363 assertEq(view.getFloat64(7, false), -6213576.4839); |
|
364 var buffer9_r_pad10 = new Uint8Array(Array(10).concat(data9_r)).buffer; |
|
365 view = new DataView(buffer9_r_pad10, 0, 18); |
|
366 assertEq(view.getFloat64(10, false), -6213576.4839); |
|
367 |
|
368 // testFloatGet expected=NaN |
|
369 // Little endian |
|
370 var data10 = [255,255,255,255,255,255,255,127]; |
|
371 var data10_r = data10.slice().reverse(); |
|
372 var buffer10 = new Uint8Array(data10).buffer; |
|
373 view = new DataView(buffer10, 0, 8); |
|
374 assertEq(view.getFloat64(0, true), NaN); |
|
375 var buffer10_pad3 = new Uint8Array(Array(3).concat(data10)).buffer; |
|
376 view = new DataView(buffer10_pad3, 0, 11); |
|
377 assertEq(view.getFloat64(3, true), NaN); |
|
378 var buffer10_pad7 = new Uint8Array(Array(7).concat(data10)).buffer; |
|
379 view = new DataView(buffer10_pad7, 0, 15); |
|
380 assertEq(view.getFloat64(7, true), NaN); |
|
381 var buffer10_pad10 = new Uint8Array(Array(10).concat(data10)).buffer; |
|
382 view = new DataView(buffer10_pad10, 0, 18); |
|
383 assertEq(view.getFloat64(10, true), NaN); |
|
384 // Big endian. |
|
385 var buffer10_r = new Uint8Array(data10_r).buffer; |
|
386 view = new DataView(buffer10_r, 0, 8); |
|
387 assertEq(view.getFloat64(0, false), NaN); |
|
388 var buffer10_r_pad3 = new Uint8Array(Array(3).concat(data10_r)).buffer; |
|
389 view = new DataView(buffer10_r_pad3, 0, 11); |
|
390 assertEq(view.getFloat64(3, false), NaN); |
|
391 var buffer10_r_pad7 = new Uint8Array(Array(7).concat(data10_r)).buffer; |
|
392 view = new DataView(buffer10_r_pad7, 0, 15); |
|
393 assertEq(view.getFloat64(7, false), NaN); |
|
394 var buffer10_r_pad10 = new Uint8Array(Array(10).concat(data10_r)).buffer; |
|
395 view = new DataView(buffer10_r_pad10, 0, 18); |
|
396 assertEq(view.getFloat64(10, false), NaN); |
|
397 |
|
398 // testFloatGet expected=NaN |
|
399 // Little endian |
|
400 var data11 = [255,255,255,255,255,255,255,255]; |
|
401 var data11_r = data11.slice().reverse(); |
|
402 var buffer11 = new Uint8Array(data11).buffer; |
|
403 view = new DataView(buffer11, 0, 8); |
|
404 assertEq(view.getFloat64(0, true), NaN); |
|
405 var buffer11_pad3 = new Uint8Array(Array(3).concat(data11)).buffer; |
|
406 view = new DataView(buffer11_pad3, 0, 11); |
|
407 assertEq(view.getFloat64(3, true), NaN); |
|
408 var buffer11_pad7 = new Uint8Array(Array(7).concat(data11)).buffer; |
|
409 view = new DataView(buffer11_pad7, 0, 15); |
|
410 assertEq(view.getFloat64(7, true), NaN); |
|
411 var buffer11_pad10 = new Uint8Array(Array(10).concat(data11)).buffer; |
|
412 view = new DataView(buffer11_pad10, 0, 18); |
|
413 assertEq(view.getFloat64(10, true), NaN); |
|
414 // Big endian. |
|
415 var buffer11_r = new Uint8Array(data11_r).buffer; |
|
416 view = new DataView(buffer11_r, 0, 8); |
|
417 assertEq(view.getFloat64(0, false), NaN); |
|
418 var buffer11_r_pad3 = new Uint8Array(Array(3).concat(data11_r)).buffer; |
|
419 view = new DataView(buffer11_r_pad3, 0, 11); |
|
420 assertEq(view.getFloat64(3, false), NaN); |
|
421 var buffer11_r_pad7 = new Uint8Array(Array(7).concat(data11_r)).buffer; |
|
422 view = new DataView(buffer11_r_pad7, 0, 15); |
|
423 assertEq(view.getFloat64(7, false), NaN); |
|
424 var buffer11_r_pad10 = new Uint8Array(Array(10).concat(data11_r)).buffer; |
|
425 view = new DataView(buffer11_r_pad10, 0, 18); |
|
426 assertEq(view.getFloat64(10, false), NaN); |
|
427 |
|
428 // testIntegerGets(start=3, length=2) |
|
429 var data12 = [31,32,33,0,1,2,3,100,101,102,103,128,129,130,131,252,253,254,255]; |
|
430 var data12_r = data12.slice().reverse(); |
|
431 var buffer12 = new Uint8Array(data12).buffer; |
|
432 view = new DataView(buffer12, 3, 2); |
|
433 assertEq(view.getInt8(0), 0); |
|
434 checkThrow(function () view.getInt8(8), RangeError); |
|
435 checkThrow(function () view.getInt8(15), RangeError); |
|
436 assertEq(view.getUint8(0), 0); |
|
437 checkThrow(function () view.getUint8(8), RangeError); |
|
438 checkThrow(function () view.getUint8(15), RangeError); |
|
439 // Little endian. |
|
440 assertEq(view.getInt16(0, true), 256); |
|
441 checkThrow(function () view.getInt16(5, true), RangeError); |
|
442 checkThrow(function () view.getInt16(9, true), RangeError); |
|
443 checkThrow(function () view.getInt16(14, true), RangeError); |
|
444 // Big endian. |
|
445 assertEq(view.getInt16(0), 1); |
|
446 checkThrow(function () view.getInt16(5), RangeError); |
|
447 checkThrow(function () view.getInt16(9), RangeError); |
|
448 checkThrow(function () view.getInt16(14), RangeError); |
|
449 // Little endian. |
|
450 assertEq(view.getUint16(0, true), 256); |
|
451 checkThrow(function () view.getUint16(5, true), RangeError); |
|
452 checkThrow(function () view.getUint16(9, true), RangeError); |
|
453 checkThrow(function () view.getUint16(14, true), RangeError); |
|
454 // Big endian. |
|
455 assertEq(view.getUint16(0), 1); |
|
456 checkThrow(function () view.getUint16(5), RangeError); |
|
457 checkThrow(function () view.getUint16(9), RangeError); |
|
458 checkThrow(function () view.getUint16(14), RangeError); |
|
459 // Little endian. |
|
460 checkThrow(function () view.getInt32(0, true), RangeError); |
|
461 checkThrow(function () view.getInt32(3, true), RangeError); |
|
462 checkThrow(function () view.getInt32(6, true), RangeError); |
|
463 checkThrow(function () view.getInt32(9, true), RangeError); |
|
464 checkThrow(function () view.getInt32(12, true), RangeError); |
|
465 // Big endian. |
|
466 checkThrow(function () view.getInt32(0), RangeError); |
|
467 checkThrow(function () view.getInt32(3), RangeError); |
|
468 checkThrow(function () view.getInt32(6), RangeError); |
|
469 checkThrow(function () view.getInt32(9), RangeError); |
|
470 checkThrow(function () view.getInt32(12), RangeError); |
|
471 // Little endian. |
|
472 checkThrow(function () view.getUint32(0, true), RangeError); |
|
473 checkThrow(function () view.getUint32(3, true), RangeError); |
|
474 checkThrow(function () view.getUint32(6, true), RangeError); |
|
475 checkThrow(function () view.getUint32(9, true), RangeError); |
|
476 checkThrow(function () view.getUint32(12, true), RangeError); |
|
477 // Big endian. |
|
478 checkThrow(function () view.getUint32(0), RangeError); |
|
479 checkThrow(function () view.getUint32(3), RangeError); |
|
480 checkThrow(function () view.getUint32(6), RangeError); |
|
481 checkThrow(function () view.getUint32(9), RangeError); |
|
482 checkThrow(function () view.getUint32(12), RangeError); |
|
483 |
|
484 // testFloatGets(start=3) |
|
485 |
|
486 // testFloatGet expected=10 |
|
487 // Little endian |
|
488 view = new DataView(buffer2, 3, 1); |
|
489 checkThrow(function () view.getFloat32(0, true), RangeError); |
|
490 view = new DataView(buffer2_pad3, 3, 4); |
|
491 checkThrow(function () view.getFloat32(3, true), RangeError); |
|
492 view = new DataView(buffer2_pad7, 3, 8); |
|
493 checkThrow(function () view.getFloat32(7, true), RangeError); |
|
494 view = new DataView(buffer2_pad10, 3, 11); |
|
495 checkThrow(function () view.getFloat32(10, true), RangeError); |
|
496 // Big endian. |
|
497 view = new DataView(buffer2_r, 3, 1); |
|
498 checkThrow(function () view.getFloat32(0, false), RangeError); |
|
499 view = new DataView(buffer2_r_pad3, 3, 4); |
|
500 checkThrow(function () view.getFloat32(3, false), RangeError); |
|
501 view = new DataView(buffer2_r_pad7, 3, 8); |
|
502 checkThrow(function () view.getFloat32(7, false), RangeError); |
|
503 view = new DataView(buffer2_r_pad10, 3, 11); |
|
504 checkThrow(function () view.getFloat32(10, false), RangeError); |
|
505 |
|
506 // testFloatGet expected=1.2300000190734863 |
|
507 // Little endian |
|
508 view = new DataView(buffer3, 3, 1); |
|
509 checkThrow(function () view.getFloat32(0, true), RangeError); |
|
510 view = new DataView(buffer3_pad3, 3, 4); |
|
511 checkThrow(function () view.getFloat32(3, true), RangeError); |
|
512 view = new DataView(buffer3_pad7, 3, 8); |
|
513 checkThrow(function () view.getFloat32(7, true), RangeError); |
|
514 view = new DataView(buffer3_pad10, 3, 11); |
|
515 checkThrow(function () view.getFloat32(10, true), RangeError); |
|
516 // Big endian. |
|
517 view = new DataView(buffer3_r, 3, 1); |
|
518 checkThrow(function () view.getFloat32(0, false), RangeError); |
|
519 view = new DataView(buffer3_r_pad3, 3, 4); |
|
520 checkThrow(function () view.getFloat32(3, false), RangeError); |
|
521 view = new DataView(buffer3_r_pad7, 3, 8); |
|
522 checkThrow(function () view.getFloat32(7, false), RangeError); |
|
523 view = new DataView(buffer3_r_pad10, 3, 11); |
|
524 checkThrow(function () view.getFloat32(10, false), RangeError); |
|
525 |
|
526 // testFloatGet expected=-45621.37109375 |
|
527 // Little endian |
|
528 view = new DataView(buffer4, 3, 1); |
|
529 checkThrow(function () view.getFloat32(0, true), RangeError); |
|
530 view = new DataView(buffer4_pad3, 3, 4); |
|
531 checkThrow(function () view.getFloat32(3, true), RangeError); |
|
532 view = new DataView(buffer4_pad7, 3, 8); |
|
533 checkThrow(function () view.getFloat32(7, true), RangeError); |
|
534 view = new DataView(buffer4_pad10, 3, 11); |
|
535 checkThrow(function () view.getFloat32(10, true), RangeError); |
|
536 // Big endian. |
|
537 view = new DataView(buffer4_r, 3, 1); |
|
538 checkThrow(function () view.getFloat32(0, false), RangeError); |
|
539 view = new DataView(buffer4_r_pad3, 3, 4); |
|
540 checkThrow(function () view.getFloat32(3, false), RangeError); |
|
541 view = new DataView(buffer4_r_pad7, 3, 8); |
|
542 checkThrow(function () view.getFloat32(7, false), RangeError); |
|
543 view = new DataView(buffer4_r_pad10, 3, 11); |
|
544 checkThrow(function () view.getFloat32(10, false), RangeError); |
|
545 |
|
546 // testFloatGet expected=NaN |
|
547 // Little endian |
|
548 view = new DataView(buffer5, 3, 1); |
|
549 checkThrow(function () view.getFloat32(0, true), RangeError); |
|
550 view = new DataView(buffer5_pad3, 3, 4); |
|
551 checkThrow(function () view.getFloat32(3, true), RangeError); |
|
552 view = new DataView(buffer5_pad7, 3, 8); |
|
553 checkThrow(function () view.getFloat32(7, true), RangeError); |
|
554 view = new DataView(buffer5_pad10, 3, 11); |
|
555 checkThrow(function () view.getFloat32(10, true), RangeError); |
|
556 // Big endian. |
|
557 view = new DataView(buffer5_r, 3, 1); |
|
558 checkThrow(function () view.getFloat32(0, false), RangeError); |
|
559 view = new DataView(buffer5_r_pad3, 3, 4); |
|
560 checkThrow(function () view.getFloat32(3, false), RangeError); |
|
561 view = new DataView(buffer5_r_pad7, 3, 8); |
|
562 checkThrow(function () view.getFloat32(7, false), RangeError); |
|
563 view = new DataView(buffer5_r_pad10, 3, 11); |
|
564 checkThrow(function () view.getFloat32(10, false), RangeError); |
|
565 |
|
566 // testFloatGet expected=NaN |
|
567 // Little endian |
|
568 view = new DataView(buffer6, 3, 1); |
|
569 checkThrow(function () view.getFloat32(0, true), RangeError); |
|
570 view = new DataView(buffer6_pad3, 3, 4); |
|
571 checkThrow(function () view.getFloat32(3, true), RangeError); |
|
572 view = new DataView(buffer6_pad7, 3, 8); |
|
573 checkThrow(function () view.getFloat32(7, true), RangeError); |
|
574 view = new DataView(buffer6_pad10, 3, 11); |
|
575 checkThrow(function () view.getFloat32(10, true), RangeError); |
|
576 // Big endian. |
|
577 view = new DataView(buffer6_r, 3, 1); |
|
578 checkThrow(function () view.getFloat32(0, false), RangeError); |
|
579 view = new DataView(buffer6_r_pad3, 3, 4); |
|
580 checkThrow(function () view.getFloat32(3, false), RangeError); |
|
581 view = new DataView(buffer6_r_pad7, 3, 8); |
|
582 checkThrow(function () view.getFloat32(7, false), RangeError); |
|
583 view = new DataView(buffer6_r_pad10, 3, 11); |
|
584 checkThrow(function () view.getFloat32(10, false), RangeError); |
|
585 |
|
586 // testFloatGet expected=10 |
|
587 // Little endian |
|
588 view = new DataView(buffer7, 3, 5); |
|
589 checkThrow(function () view.getFloat64(0, true), RangeError); |
|
590 view = new DataView(buffer7_pad3, 3, 8); |
|
591 checkThrow(function () view.getFloat64(3, true), RangeError); |
|
592 view = new DataView(buffer7_pad7, 3, 12); |
|
593 checkThrow(function () view.getFloat64(7, true), RangeError); |
|
594 view = new DataView(buffer7_pad10, 3, 15); |
|
595 checkThrow(function () view.getFloat64(10, true), RangeError); |
|
596 // Big endian. |
|
597 view = new DataView(buffer7_r, 3, 5); |
|
598 checkThrow(function () view.getFloat64(0, false), RangeError); |
|
599 view = new DataView(buffer7_r_pad3, 3, 8); |
|
600 checkThrow(function () view.getFloat64(3, false), RangeError); |
|
601 view = new DataView(buffer7_r_pad7, 3, 12); |
|
602 checkThrow(function () view.getFloat64(7, false), RangeError); |
|
603 view = new DataView(buffer7_r_pad10, 3, 15); |
|
604 checkThrow(function () view.getFloat64(10, false), RangeError); |
|
605 |
|
606 // testFloatGet expected=1.23 |
|
607 // Little endian |
|
608 view = new DataView(buffer8, 3, 5); |
|
609 checkThrow(function () view.getFloat64(0, true), RangeError); |
|
610 view = new DataView(buffer8_pad3, 3, 8); |
|
611 checkThrow(function () view.getFloat64(3, true), RangeError); |
|
612 view = new DataView(buffer8_pad7, 3, 12); |
|
613 checkThrow(function () view.getFloat64(7, true), RangeError); |
|
614 view = new DataView(buffer8_pad10, 3, 15); |
|
615 checkThrow(function () view.getFloat64(10, true), RangeError); |
|
616 // Big endian. |
|
617 view = new DataView(buffer8_r, 3, 5); |
|
618 checkThrow(function () view.getFloat64(0, false), RangeError); |
|
619 view = new DataView(buffer8_r_pad3, 3, 8); |
|
620 checkThrow(function () view.getFloat64(3, false), RangeError); |
|
621 view = new DataView(buffer8_r_pad7, 3, 12); |
|
622 checkThrow(function () view.getFloat64(7, false), RangeError); |
|
623 view = new DataView(buffer8_r_pad10, 3, 15); |
|
624 checkThrow(function () view.getFloat64(10, false), RangeError); |
|
625 |
|
626 // testFloatGet expected=-6213576.4839 |
|
627 // Little endian |
|
628 view = new DataView(buffer9, 3, 5); |
|
629 checkThrow(function () view.getFloat64(0, true), RangeError); |
|
630 view = new DataView(buffer9_pad3, 3, 8); |
|
631 checkThrow(function () view.getFloat64(3, true), RangeError); |
|
632 view = new DataView(buffer9_pad7, 3, 12); |
|
633 checkThrow(function () view.getFloat64(7, true), RangeError); |
|
634 view = new DataView(buffer9_pad10, 3, 15); |
|
635 checkThrow(function () view.getFloat64(10, true), RangeError); |
|
636 // Big endian. |
|
637 view = new DataView(buffer9_r, 3, 5); |
|
638 checkThrow(function () view.getFloat64(0, false), RangeError); |
|
639 view = new DataView(buffer9_r_pad3, 3, 8); |
|
640 checkThrow(function () view.getFloat64(3, false), RangeError); |
|
641 view = new DataView(buffer9_r_pad7, 3, 12); |
|
642 checkThrow(function () view.getFloat64(7, false), RangeError); |
|
643 view = new DataView(buffer9_r_pad10, 3, 15); |
|
644 checkThrow(function () view.getFloat64(10, false), RangeError); |
|
645 |
|
646 // testFloatGet expected=NaN |
|
647 // Little endian |
|
648 view = new DataView(buffer10, 3, 5); |
|
649 checkThrow(function () view.getFloat64(0, true), RangeError); |
|
650 view = new DataView(buffer10_pad3, 3, 8); |
|
651 checkThrow(function () view.getFloat64(3, true), RangeError); |
|
652 view = new DataView(buffer10_pad7, 3, 12); |
|
653 checkThrow(function () view.getFloat64(7, true), RangeError); |
|
654 view = new DataView(buffer10_pad10, 3, 15); |
|
655 checkThrow(function () view.getFloat64(10, true), RangeError); |
|
656 // Big endian. |
|
657 view = new DataView(buffer10_r, 3, 5); |
|
658 checkThrow(function () view.getFloat64(0, false), RangeError); |
|
659 view = new DataView(buffer10_r_pad3, 3, 8); |
|
660 checkThrow(function () view.getFloat64(3, false), RangeError); |
|
661 view = new DataView(buffer10_r_pad7, 3, 12); |
|
662 checkThrow(function () view.getFloat64(7, false), RangeError); |
|
663 view = new DataView(buffer10_r_pad10, 3, 15); |
|
664 checkThrow(function () view.getFloat64(10, false), RangeError); |
|
665 |
|
666 // testFloatGet expected=NaN |
|
667 // Little endian |
|
668 view = new DataView(buffer11, 3, 5); |
|
669 checkThrow(function () view.getFloat64(0, true), RangeError); |
|
670 view = new DataView(buffer11_pad3, 3, 8); |
|
671 checkThrow(function () view.getFloat64(3, true), RangeError); |
|
672 view = new DataView(buffer11_pad7, 3, 12); |
|
673 checkThrow(function () view.getFloat64(7, true), RangeError); |
|
674 view = new DataView(buffer11_pad10, 3, 15); |
|
675 checkThrow(function () view.getFloat64(10, true), RangeError); |
|
676 // Big endian. |
|
677 view = new DataView(buffer11_r, 3, 5); |
|
678 checkThrow(function () view.getFloat64(0, false), RangeError); |
|
679 view = new DataView(buffer11_r_pad3, 3, 8); |
|
680 checkThrow(function () view.getFloat64(3, false), RangeError); |
|
681 view = new DataView(buffer11_r_pad7, 3, 12); |
|
682 checkThrow(function () view.getFloat64(7, false), RangeError); |
|
683 view = new DataView(buffer11_r_pad10, 3, 15); |
|
684 checkThrow(function () view.getFloat64(10, false), RangeError); |
|
685 |
|
686 // testGetNegativeIndexes |
|
687 view = new DataView(buffer1, 0, 16); |
|
688 checkThrow(function () view.getInt8(-1), RangeError); |
|
689 checkThrow(function () view.getInt8(-2), RangeError); |
|
690 checkThrow(function () view.getUint8(-1), RangeError); |
|
691 checkThrow(function () view.getUint8(-2), RangeError); |
|
692 checkThrow(function () view.getInt16(-1), RangeError); |
|
693 checkThrow(function () view.getInt16(-2), RangeError); |
|
694 checkThrow(function () view.getInt16(-3), RangeError); |
|
695 checkThrow(function () view.getUint16(-1), RangeError); |
|
696 checkThrow(function () view.getUint16(-2), RangeError); |
|
697 checkThrow(function () view.getUint16(-3), RangeError); |
|
698 checkThrow(function () view.getInt32(-1), RangeError); |
|
699 checkThrow(function () view.getInt32(-3), RangeError); |
|
700 checkThrow(function () view.getInt32(-5), RangeError); |
|
701 checkThrow(function () view.getUint32(-1), RangeError); |
|
702 checkThrow(function () view.getUint32(-3), RangeError); |
|
703 checkThrow(function () view.getUint32(-5), RangeError); |
|
704 view = new DataView(buffer7, 0, 8); |
|
705 checkThrow(function () view.getFloat32(-1), RangeError); |
|
706 checkThrow(function () view.getFloat32(-3), RangeError); |
|
707 checkThrow(function () view.getFloat32(-5), RangeError); |
|
708 checkThrow(function () view.getFloat64(-1), RangeError); |
|
709 checkThrow(function () view.getFloat64(-5), RangeError); |
|
710 checkThrow(function () view.getFloat64(-9), RangeError); |
|
711 |
|
712 // Too large for signed 32 bit integer index |
|
713 checkThrow(function () view.getInt8(2147483648), RangeError); |
|
714 checkThrow(function () view.getInt8(2147483649), RangeError); |
|
715 checkThrow(function () view.getUint8(2147483648), RangeError); |
|
716 checkThrow(function () view.getUint8(2147483649), RangeError); |
|
717 checkThrow(function () view.getInt16(2147483648), RangeError); |
|
718 checkThrow(function () view.getInt16(2147483649), RangeError); |
|
719 checkThrow(function () view.getUint16(2147483648), RangeError); |
|
720 checkThrow(function () view.getUint16(2147483649), RangeError); |
|
721 checkThrow(function () view.getInt32(2147483648), RangeError); |
|
722 checkThrow(function () view.getInt32(2147483649), RangeError); |
|
723 checkThrow(function () view.getUint32(2147483648), RangeError); |
|
724 checkThrow(function () view.getUint32(2147483649), RangeError); |
|
725 checkThrow(function () view.getFloat32(2147483648), RangeError); |
|
726 checkThrow(function () view.getFloat32(2147483649), RangeError); |
|
727 checkThrow(function () view.getFloat64(2147483648), RangeError); |
|
728 checkThrow(function () view.getFloat64(2147483649), RangeError); |
|
729 |
|
730 // Test for wrong arguments passed to get methods |
|
731 // |
|
732 // See http://www.w3.org/TR/WebIDL/#es-operations and the step saying "If entry is null, throw a TypeError." |
|
733 checkThrow(function () view.getInt8(), TypeError); |
|
734 checkThrow(function () view.getUint8(), TypeError); |
|
735 checkThrow(function () view.getInt16(), TypeError); |
|
736 checkThrow(function () view.getUint16(), TypeError); |
|
737 checkThrow(function () view.getInt32(), TypeError); |
|
738 checkThrow(function () view.getUint32(), TypeError); |
|
739 checkThrow(function () view.getFloat32(), TypeError); |
|
740 checkThrow(function () view.getFloat64(), TypeError); |
|
741 |
|
742 // Test for wrong type of |this| |
|
743 checkThrow(function () view.getInt8.apply("dead", [0]), TypeError); |
|
744 checkThrow(function () view.getUint8.apply("puppies", [0]), TypeError); |
|
745 checkThrow(function () view.getInt16.apply("aren", [0]), TypeError); |
|
746 checkThrow(function () view.getUint16.apply("t", [0]), TypeError); |
|
747 checkThrow(function () view.getInt32.apply("much", [0]), TypeError); |
|
748 checkThrow(function () view.getUint32.apply("fun", [0]), TypeError); |
|
749 checkThrow(function () view.getFloat32.apply("(in", [0]), TypeError); |
|
750 checkThrow(function () view.getFloat64.apply("bed)", [0]), TypeError); |
|
751 checkThrow(function () view.setInt8.apply("dead", [0, 0]), TypeError); |
|
752 checkThrow(function () view.setUint8.apply("puppies", [0, 0]), TypeError); |
|
753 checkThrow(function () view.setInt16.apply("aren", [0, 0]), TypeError); |
|
754 checkThrow(function () view.setUint16.apply("t", [0, 0]), TypeError); |
|
755 checkThrow(function () view.setInt32.apply("much", [0, 0]), TypeError); |
|
756 checkThrow(function () view.setUint32.apply("fun", [0, 0]), TypeError); |
|
757 checkThrow(function () view.setFloat32.apply("(in", [0, 0]), TypeError); |
|
758 checkThrow(function () view.setFloat64.apply("bed)", [0, 0]), TypeError); |
|
759 |
|
760 // testSetMethods |
|
761 |
|
762 // Test for set methods that work |
|
763 |
|
764 // testIntegerSets(start=0, length=16) |
|
765 var data13 = [204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204]; |
|
766 var data13_r = data13.slice().reverse(); |
|
767 var buffer13 = new Uint8Array(data13).buffer; |
|
768 view = new DataView(buffer13, 0, 16); |
|
769 view.setInt8(0, 0); |
|
770 assertEq(view.getInt8(0), 0); |
|
771 view.setInt8(8, -128); |
|
772 assertEq(view.getInt8(8), -128); |
|
773 view.setInt8(15, -1); |
|
774 assertEq(view.getInt8(15), -1); |
|
775 view.setUint8(0, 0); |
|
776 assertEq(view.getUint8(0), 0); |
|
777 view.setUint8(8, 128); |
|
778 assertEq(view.getUint8(8), 128); |
|
779 view.setUint8(15, 255); |
|
780 assertEq(view.getUint8(15), 255); |
|
781 view.setInt16(0, 256, true); |
|
782 assertEq(view.getInt16(0, true), 256); |
|
783 view.setInt16(5, 26213, true); |
|
784 assertEq(view.getInt16(5, true), 26213); |
|
785 view.setInt16(9, -32127, true); |
|
786 assertEq(view.getInt16(9, true), -32127); |
|
787 view.setInt16(14, -2, true); |
|
788 assertEq(view.getInt16(14, true), -2); |
|
789 view.setInt16(0, 1); |
|
790 assertEq(view.getInt16(0), 1); |
|
791 view.setInt16(5, 25958); |
|
792 assertEq(view.getInt16(5), 25958); |
|
793 view.setInt16(9, -32382); |
|
794 assertEq(view.getInt16(9), -32382); |
|
795 view.setInt16(14, -257); |
|
796 assertEq(view.getInt16(14), -257); |
|
797 view.setUint16(0, 256, true); |
|
798 assertEq(view.getUint16(0, true), 256); |
|
799 view.setUint16(5, 26213, true); |
|
800 assertEq(view.getUint16(5, true), 26213); |
|
801 view.setUint16(9, 33409, true); |
|
802 assertEq(view.getUint16(9, true), 33409); |
|
803 view.setUint16(14, 65534, true); |
|
804 assertEq(view.getUint16(14, true), 65534); |
|
805 view.setUint16(0, 1); |
|
806 assertEq(view.getUint16(0), 1); |
|
807 view.setUint16(5, 25958); |
|
808 assertEq(view.getUint16(5), 25958); |
|
809 view.setUint16(9, 33154); |
|
810 assertEq(view.getUint16(9), 33154); |
|
811 view.setUint16(14, 65279); |
|
812 assertEq(view.getUint16(14), 65279); |
|
813 view.setInt32(0, 50462976, true); |
|
814 assertEq(view.getInt32(0, true), 50462976); |
|
815 view.setInt32(3, 1717920771, true); |
|
816 assertEq(view.getInt32(3, true), 1717920771); |
|
817 view.setInt32(6, -2122291354, true); |
|
818 assertEq(view.getInt32(6, true), -2122291354); |
|
819 view.setInt32(9, -58490239, true); |
|
820 assertEq(view.getInt32(9, true), -58490239); |
|
821 view.setInt32(12, -66052, true); |
|
822 assertEq(view.getInt32(12, true), -66052); |
|
823 view.setInt32(0, 66051); |
|
824 assertEq(view.getInt32(0), 66051); |
|
825 view.setInt32(3, 56911206); |
|
826 assertEq(view.getInt32(3), 56911206); |
|
827 view.setInt32(6, 1718059137); |
|
828 assertEq(view.getInt32(6), 1718059137); |
|
829 view.setInt32(9, -2122152964); |
|
830 assertEq(view.getInt32(9), -2122152964); |
|
831 view.setInt32(12, -50462977); |
|
832 assertEq(view.getInt32(12), -50462977); |
|
833 view.setUint32(0, 50462976, true); |
|
834 assertEq(view.getUint32(0, true), 50462976); |
|
835 view.setUint32(3, 1717920771, true); |
|
836 assertEq(view.getUint32(3, true), 1717920771); |
|
837 view.setUint32(6, 2172675942, true); |
|
838 assertEq(view.getUint32(6, true), 2172675942); |
|
839 view.setUint32(9, 4236477057, true); |
|
840 assertEq(view.getUint32(9, true), 4236477057); |
|
841 view.setUint32(12, 4294901244, true); |
|
842 assertEq(view.getUint32(12, true), 4294901244); |
|
843 view.setUint32(0, 66051); |
|
844 assertEq(view.getUint32(0), 66051); |
|
845 view.setUint32(3, 56911206); |
|
846 assertEq(view.getUint32(3), 56911206); |
|
847 view.setUint32(6, 1718059137); |
|
848 assertEq(view.getUint32(6), 1718059137); |
|
849 view.setUint32(9, 2172814332); |
|
850 assertEq(view.getUint32(9), 2172814332); |
|
851 view.setUint32(12, 4244504319); |
|
852 assertEq(view.getUint32(12), 4244504319); |
|
853 |
|
854 // testFloatSets(start=undefined) |
|
855 |
|
856 // testFloatSet expected=10 |
|
857 // Little endian |
|
858 view = new DataView(buffer13, 0, 16); |
|
859 view.setFloat32(0, 10, true); |
|
860 assertEq(view.getFloat32(0, true), 10); |
|
861 var buffer13_pad3 = new Uint8Array(Array(3).concat(data13)).buffer; |
|
862 view = new DataView(buffer13_pad3, 0, 19); |
|
863 view.setFloat32(3, 10, true); |
|
864 assertEq(view.getFloat32(3, true), 10); |
|
865 var buffer13_pad7 = new Uint8Array(Array(7).concat(data13)).buffer; |
|
866 view = new DataView(buffer13_pad7, 0, 23); |
|
867 view.setFloat32(7, 10, true); |
|
868 assertEq(view.getFloat32(7, true), 10); |
|
869 var buffer13_pad10 = new Uint8Array(Array(10).concat(data13)).buffer; |
|
870 view = new DataView(buffer13_pad10, 0, 26); |
|
871 view.setFloat32(10, 10, true); |
|
872 assertEq(view.getFloat32(10, true), 10); |
|
873 // Big endian. |
|
874 var buffer13_r = new Uint8Array(data13_r).buffer; |
|
875 view = new DataView(buffer13_r, 0, 16); |
|
876 view.setFloat32(0, 10, false); |
|
877 assertEq(view.getFloat32(0, false), 10); |
|
878 var buffer13_r_pad3 = new Uint8Array(Array(3).concat(data13_r)).buffer; |
|
879 view = new DataView(buffer13_r_pad3, 0, 19); |
|
880 view.setFloat32(3, 10, false); |
|
881 assertEq(view.getFloat32(3, false), 10); |
|
882 var buffer13_r_pad7 = new Uint8Array(Array(7).concat(data13_r)).buffer; |
|
883 view = new DataView(buffer13_r_pad7, 0, 23); |
|
884 view.setFloat32(7, 10, false); |
|
885 assertEq(view.getFloat32(7, false), 10); |
|
886 var buffer13_r_pad10 = new Uint8Array(Array(10).concat(data13_r)).buffer; |
|
887 view = new DataView(buffer13_r_pad10, 0, 26); |
|
888 view.setFloat32(10, 10, false); |
|
889 assertEq(view.getFloat32(10, false), 10); |
|
890 |
|
891 // testFloatSet expected=1.2300000190734863 |
|
892 // Little endian |
|
893 view = new DataView(buffer13, 0, 16); |
|
894 view.setFloat32(0, 1.2300000190734863, true); |
|
895 assertEq(view.getFloat32(0, true), 1.2300000190734863); |
|
896 view = new DataView(buffer13_pad3, 0, 19); |
|
897 view.setFloat32(3, 1.2300000190734863, true); |
|
898 assertEq(view.getFloat32(3, true), 1.2300000190734863); |
|
899 view = new DataView(buffer13_pad7, 0, 23); |
|
900 view.setFloat32(7, 1.2300000190734863, true); |
|
901 assertEq(view.getFloat32(7, true), 1.2300000190734863); |
|
902 view = new DataView(buffer13_pad10, 0, 26); |
|
903 view.setFloat32(10, 1.2300000190734863, true); |
|
904 assertEq(view.getFloat32(10, true), 1.2300000190734863); |
|
905 // Big endian. |
|
906 view = new DataView(buffer13_r, 0, 16); |
|
907 view.setFloat32(0, 1.2300000190734863, false); |
|
908 assertEq(view.getFloat32(0, false), 1.2300000190734863); |
|
909 view = new DataView(buffer13_r_pad3, 0, 19); |
|
910 view.setFloat32(3, 1.2300000190734863, false); |
|
911 assertEq(view.getFloat32(3, false), 1.2300000190734863); |
|
912 view = new DataView(buffer13_r_pad7, 0, 23); |
|
913 view.setFloat32(7, 1.2300000190734863, false); |
|
914 assertEq(view.getFloat32(7, false), 1.2300000190734863); |
|
915 view = new DataView(buffer13_r_pad10, 0, 26); |
|
916 view.setFloat32(10, 1.2300000190734863, false); |
|
917 assertEq(view.getFloat32(10, false), 1.2300000190734863); |
|
918 |
|
919 // testFloatSet expected=-45621.37109375 |
|
920 // Little endian |
|
921 view = new DataView(buffer13, 0, 16); |
|
922 view.setFloat32(0, -45621.37109375, true); |
|
923 assertEq(view.getFloat32(0, true), -45621.37109375); |
|
924 view = new DataView(buffer13_pad3, 0, 19); |
|
925 view.setFloat32(3, -45621.37109375, true); |
|
926 assertEq(view.getFloat32(3, true), -45621.37109375); |
|
927 view = new DataView(buffer13_pad7, 0, 23); |
|
928 view.setFloat32(7, -45621.37109375, true); |
|
929 assertEq(view.getFloat32(7, true), -45621.37109375); |
|
930 view = new DataView(buffer13_pad10, 0, 26); |
|
931 view.setFloat32(10, -45621.37109375, true); |
|
932 assertEq(view.getFloat32(10, true), -45621.37109375); |
|
933 // Big endian. |
|
934 view = new DataView(buffer13_r, 0, 16); |
|
935 view.setFloat32(0, -45621.37109375, false); |
|
936 assertEq(view.getFloat32(0, false), -45621.37109375); |
|
937 view = new DataView(buffer13_r_pad3, 0, 19); |
|
938 view.setFloat32(3, -45621.37109375, false); |
|
939 assertEq(view.getFloat32(3, false), -45621.37109375); |
|
940 view = new DataView(buffer13_r_pad7, 0, 23); |
|
941 view.setFloat32(7, -45621.37109375, false); |
|
942 assertEq(view.getFloat32(7, false), -45621.37109375); |
|
943 view = new DataView(buffer13_r_pad10, 0, 26); |
|
944 view.setFloat32(10, -45621.37109375, false); |
|
945 assertEq(view.getFloat32(10, false), -45621.37109375); |
|
946 |
|
947 // testFloatSet expected=NaN |
|
948 // Little endian |
|
949 view = new DataView(buffer13, 0, 16); |
|
950 view.setFloat32(0, NaN, true); |
|
951 assertEq(view.getFloat32(0, true), NaN); |
|
952 view = new DataView(buffer13_pad3, 0, 19); |
|
953 view.setFloat32(3, NaN, true); |
|
954 assertEq(view.getFloat32(3, true), NaN); |
|
955 view = new DataView(buffer13_pad7, 0, 23); |
|
956 view.setFloat32(7, NaN, true); |
|
957 assertEq(view.getFloat32(7, true), NaN); |
|
958 view = new DataView(buffer13_pad10, 0, 26); |
|
959 view.setFloat32(10, NaN, true); |
|
960 assertEq(view.getFloat32(10, true), NaN); |
|
961 // Big endian. |
|
962 view = new DataView(buffer13_r, 0, 16); |
|
963 view.setFloat32(0, NaN, false); |
|
964 assertEq(view.getFloat32(0, false), NaN); |
|
965 view = new DataView(buffer13_r_pad3, 0, 19); |
|
966 view.setFloat32(3, NaN, false); |
|
967 assertEq(view.getFloat32(3, false), NaN); |
|
968 view = new DataView(buffer13_r_pad7, 0, 23); |
|
969 view.setFloat32(7, NaN, false); |
|
970 assertEq(view.getFloat32(7, false), NaN); |
|
971 view = new DataView(buffer13_r_pad10, 0, 26); |
|
972 view.setFloat32(10, NaN, false); |
|
973 assertEq(view.getFloat32(10, false), NaN); |
|
974 |
|
975 // testFloatSet expected=-NaN |
|
976 // Little endian |
|
977 view = new DataView(buffer13, 0, 16); |
|
978 view.setFloat32(0, -NaN, true); |
|
979 assertEq(view.getFloat32(0, true), -NaN); |
|
980 view = new DataView(buffer13_pad3, 0, 19); |
|
981 view.setFloat32(3, -NaN, true); |
|
982 assertEq(view.getFloat32(3, true), -NaN); |
|
983 view = new DataView(buffer13_pad7, 0, 23); |
|
984 view.setFloat32(7, -NaN, true); |
|
985 assertEq(view.getFloat32(7, true), -NaN); |
|
986 view = new DataView(buffer13_pad10, 0, 26); |
|
987 view.setFloat32(10, -NaN, true); |
|
988 assertEq(view.getFloat32(10, true), -NaN); |
|
989 // Big endian. |
|
990 view = new DataView(buffer13_r, 0, 16); |
|
991 view.setFloat32(0, -NaN, false); |
|
992 assertEq(view.getFloat32(0, false), -NaN); |
|
993 view = new DataView(buffer13_r_pad3, 0, 19); |
|
994 view.setFloat32(3, -NaN, false); |
|
995 assertEq(view.getFloat32(3, false), -NaN); |
|
996 view = new DataView(buffer13_r_pad7, 0, 23); |
|
997 view.setFloat32(7, -NaN, false); |
|
998 assertEq(view.getFloat32(7, false), -NaN); |
|
999 view = new DataView(buffer13_r_pad10, 0, 26); |
|
1000 view.setFloat32(10, -NaN, false); |
|
1001 assertEq(view.getFloat32(10, false), -NaN); |
|
1002 |
|
1003 // testFloatSet expected=10 |
|
1004 // Little endian |
|
1005 view = new DataView(buffer13, 0, 16); |
|
1006 view.setFloat64(0, 10, true); |
|
1007 assertEq(view.getFloat64(0, true), 10); |
|
1008 view = new DataView(buffer13_pad3, 0, 19); |
|
1009 view.setFloat64(3, 10, true); |
|
1010 assertEq(view.getFloat64(3, true), 10); |
|
1011 view = new DataView(buffer13_pad7, 0, 23); |
|
1012 view.setFloat64(7, 10, true); |
|
1013 assertEq(view.getFloat64(7, true), 10); |
|
1014 view = new DataView(buffer13_pad10, 0, 26); |
|
1015 view.setFloat64(10, 10, true); |
|
1016 assertEq(view.getFloat64(10, true), 10); |
|
1017 // Big endian. |
|
1018 view = new DataView(buffer13_r, 0, 16); |
|
1019 view.setFloat64(0, 10, false); |
|
1020 assertEq(view.getFloat64(0, false), 10); |
|
1021 view = new DataView(buffer13_r_pad3, 0, 19); |
|
1022 view.setFloat64(3, 10, false); |
|
1023 assertEq(view.getFloat64(3, false), 10); |
|
1024 view = new DataView(buffer13_r_pad7, 0, 23); |
|
1025 view.setFloat64(7, 10, false); |
|
1026 assertEq(view.getFloat64(7, false), 10); |
|
1027 view = new DataView(buffer13_r_pad10, 0, 26); |
|
1028 view.setFloat64(10, 10, false); |
|
1029 assertEq(view.getFloat64(10, false), 10); |
|
1030 |
|
1031 // testFloatSet expected=1.23 |
|
1032 // Little endian |
|
1033 view = new DataView(buffer13, 0, 16); |
|
1034 view.setFloat64(0, 1.23, true); |
|
1035 assertEq(view.getFloat64(0, true), 1.23); |
|
1036 view = new DataView(buffer13_pad3, 0, 19); |
|
1037 view.setFloat64(3, 1.23, true); |
|
1038 assertEq(view.getFloat64(3, true), 1.23); |
|
1039 view = new DataView(buffer13_pad7, 0, 23); |
|
1040 view.setFloat64(7, 1.23, true); |
|
1041 assertEq(view.getFloat64(7, true), 1.23); |
|
1042 view = new DataView(buffer13_pad10, 0, 26); |
|
1043 view.setFloat64(10, 1.23, true); |
|
1044 assertEq(view.getFloat64(10, true), 1.23); |
|
1045 // Big endian. |
|
1046 view = new DataView(buffer13_r, 0, 16); |
|
1047 view.setFloat64(0, 1.23, false); |
|
1048 assertEq(view.getFloat64(0, false), 1.23); |
|
1049 view = new DataView(buffer13_r_pad3, 0, 19); |
|
1050 view.setFloat64(3, 1.23, false); |
|
1051 assertEq(view.getFloat64(3, false), 1.23); |
|
1052 view = new DataView(buffer13_r_pad7, 0, 23); |
|
1053 view.setFloat64(7, 1.23, false); |
|
1054 assertEq(view.getFloat64(7, false), 1.23); |
|
1055 view = new DataView(buffer13_r_pad10, 0, 26); |
|
1056 view.setFloat64(10, 1.23, false); |
|
1057 assertEq(view.getFloat64(10, false), 1.23); |
|
1058 |
|
1059 // testFloatSet expected=-6213576.4839 |
|
1060 // Little endian |
|
1061 view = new DataView(buffer13, 0, 16); |
|
1062 view.setFloat64(0, -6213576.4839, true); |
|
1063 assertEq(view.getFloat64(0, true), -6213576.4839); |
|
1064 view = new DataView(buffer13_pad3, 0, 19); |
|
1065 view.setFloat64(3, -6213576.4839, true); |
|
1066 assertEq(view.getFloat64(3, true), -6213576.4839); |
|
1067 view = new DataView(buffer13_pad7, 0, 23); |
|
1068 view.setFloat64(7, -6213576.4839, true); |
|
1069 assertEq(view.getFloat64(7, true), -6213576.4839); |
|
1070 view = new DataView(buffer13_pad10, 0, 26); |
|
1071 view.setFloat64(10, -6213576.4839, true); |
|
1072 assertEq(view.getFloat64(10, true), -6213576.4839); |
|
1073 // Big endian. |
|
1074 view = new DataView(buffer13_r, 0, 16); |
|
1075 view.setFloat64(0, -6213576.4839, false); |
|
1076 assertEq(view.getFloat64(0, false), -6213576.4839); |
|
1077 view = new DataView(buffer13_r_pad3, 0, 19); |
|
1078 view.setFloat64(3, -6213576.4839, false); |
|
1079 assertEq(view.getFloat64(3, false), -6213576.4839); |
|
1080 view = new DataView(buffer13_r_pad7, 0, 23); |
|
1081 view.setFloat64(7, -6213576.4839, false); |
|
1082 assertEq(view.getFloat64(7, false), -6213576.4839); |
|
1083 view = new DataView(buffer13_r_pad10, 0, 26); |
|
1084 view.setFloat64(10, -6213576.4839, false); |
|
1085 assertEq(view.getFloat64(10, false), -6213576.4839); |
|
1086 |
|
1087 // testFloatSet expected=NaN |
|
1088 // Little endian |
|
1089 view = new DataView(buffer13, 0, 16); |
|
1090 view.setFloat64(0, NaN, true); |
|
1091 assertEq(view.getFloat64(0, true), NaN); |
|
1092 view = new DataView(buffer13_pad3, 0, 19); |
|
1093 view.setFloat64(3, NaN, true); |
|
1094 assertEq(view.getFloat64(3, true), NaN); |
|
1095 view = new DataView(buffer13_pad7, 0, 23); |
|
1096 view.setFloat64(7, NaN, true); |
|
1097 assertEq(view.getFloat64(7, true), NaN); |
|
1098 view = new DataView(buffer13_pad10, 0, 26); |
|
1099 view.setFloat64(10, NaN, true); |
|
1100 assertEq(view.getFloat64(10, true), NaN); |
|
1101 // Big endian. |
|
1102 view = new DataView(buffer13_r, 0, 16); |
|
1103 view.setFloat64(0, NaN, false); |
|
1104 assertEq(view.getFloat64(0, false), NaN); |
|
1105 view = new DataView(buffer13_r_pad3, 0, 19); |
|
1106 view.setFloat64(3, NaN, false); |
|
1107 assertEq(view.getFloat64(3, false), NaN); |
|
1108 view = new DataView(buffer13_r_pad7, 0, 23); |
|
1109 view.setFloat64(7, NaN, false); |
|
1110 assertEq(view.getFloat64(7, false), NaN); |
|
1111 view = new DataView(buffer13_r_pad10, 0, 26); |
|
1112 view.setFloat64(10, NaN, false); |
|
1113 assertEq(view.getFloat64(10, false), NaN); |
|
1114 |
|
1115 // testFloatSet expected=-NaN |
|
1116 // Little endian |
|
1117 view = new DataView(buffer13, 0, 16); |
|
1118 view.setFloat64(0, -NaN, true); |
|
1119 assertEq(view.getFloat64(0, true), -NaN); |
|
1120 view = new DataView(buffer13_pad3, 0, 19); |
|
1121 view.setFloat64(3, -NaN, true); |
|
1122 assertEq(view.getFloat64(3, true), -NaN); |
|
1123 view = new DataView(buffer13_pad7, 0, 23); |
|
1124 view.setFloat64(7, -NaN, true); |
|
1125 assertEq(view.getFloat64(7, true), -NaN); |
|
1126 view = new DataView(buffer13_pad10, 0, 26); |
|
1127 view.setFloat64(10, -NaN, true); |
|
1128 assertEq(view.getFloat64(10, true), -NaN); |
|
1129 // Big endian. |
|
1130 view = new DataView(buffer13_r, 0, 16); |
|
1131 view.setFloat64(0, -NaN, false); |
|
1132 assertEq(view.getFloat64(0, false), -NaN); |
|
1133 view = new DataView(buffer13_r_pad3, 0, 19); |
|
1134 view.setFloat64(3, -NaN, false); |
|
1135 assertEq(view.getFloat64(3, false), -NaN); |
|
1136 view = new DataView(buffer13_r_pad7, 0, 23); |
|
1137 view.setFloat64(7, -NaN, false); |
|
1138 assertEq(view.getFloat64(7, false), -NaN); |
|
1139 view = new DataView(buffer13_r_pad10, 0, 26); |
|
1140 view.setFloat64(10, -NaN, false); |
|
1141 assertEq(view.getFloat64(10, false), -NaN); |
|
1142 |
|
1143 // Test for set methods that might write beyond the range |
|
1144 |
|
1145 // testIntegerSets(start=3, length=2) |
|
1146 view = new DataView(buffer13, 3, 2); |
|
1147 view.setInt8(0, 0); |
|
1148 assertEq(view.getInt8(0), 0); |
|
1149 checkThrow(function () view.setInt8(8, -128), RangeError); |
|
1150 checkThrow(function () view.setInt8(15, -1), RangeError); |
|
1151 view.setUint8(0, 0); |
|
1152 assertEq(view.getUint8(0), 0); |
|
1153 checkThrow(function () view.setUint8(8, 128), RangeError); |
|
1154 checkThrow(function () view.setUint8(15, 255), RangeError); |
|
1155 view.setInt16(0, 256, true); |
|
1156 assertEq(view.getInt16(0, true), 256); |
|
1157 checkThrow(function () view.setInt16(5, 26213, true), RangeError); |
|
1158 checkThrow(function () view.setInt16(9, -32127, true), RangeError); |
|
1159 checkThrow(function () view.setInt16(14, -2, true), RangeError); |
|
1160 view.setInt16(0, 1); |
|
1161 assertEq(view.getInt16(0), 1); |
|
1162 checkThrow(function () view.setInt16(5, 25958), RangeError); |
|
1163 checkThrow(function () view.setInt16(9, -32382), RangeError); |
|
1164 checkThrow(function () view.setInt16(14, -257), RangeError); |
|
1165 view.setUint16(0, 256, true); |
|
1166 assertEq(view.getUint16(0, true), 256); |
|
1167 checkThrow(function () view.setUint16(5, 26213, true), RangeError); |
|
1168 checkThrow(function () view.setUint16(9, 33409, true), RangeError); |
|
1169 checkThrow(function () view.setUint16(14, 65534, true), RangeError); |
|
1170 view.setUint16(0, 1); |
|
1171 assertEq(view.getUint16(0), 1); |
|
1172 checkThrow(function () view.setUint16(5, 25958), RangeError); |
|
1173 checkThrow(function () view.setUint16(9, 33154), RangeError); |
|
1174 checkThrow(function () view.setUint16(14, 65279), RangeError); |
|
1175 checkThrow(function () view.setInt32(0, 50462976, true), RangeError); |
|
1176 checkThrow(function () view.setInt32(3, 1717920771, true), RangeError); |
|
1177 checkThrow(function () view.setInt32(6, -2122291354, true), RangeError); |
|
1178 checkThrow(function () view.setInt32(9, -58490239, true), RangeError); |
|
1179 checkThrow(function () view.setInt32(12, -66052, true), RangeError); |
|
1180 checkThrow(function () view.setInt32(0, 66051), RangeError); |
|
1181 checkThrow(function () view.setInt32(3, 56911206), RangeError); |
|
1182 checkThrow(function () view.setInt32(6, 1718059137), RangeError); |
|
1183 checkThrow(function () view.setInt32(9, -2122152964), RangeError); |
|
1184 checkThrow(function () view.setInt32(12, -50462977), RangeError); |
|
1185 checkThrow(function () view.setUint32(0, 50462976, true), RangeError); |
|
1186 checkThrow(function () view.setUint32(3, 1717920771, true), RangeError); |
|
1187 checkThrow(function () view.setUint32(6, 2172675942, true), RangeError); |
|
1188 checkThrow(function () view.setUint32(9, 4236477057, true), RangeError); |
|
1189 checkThrow(function () view.setUint32(12, 4294901244, true), RangeError); |
|
1190 checkThrow(function () view.setUint32(0, 66051), RangeError); |
|
1191 checkThrow(function () view.setUint32(3, 56911206), RangeError); |
|
1192 checkThrow(function () view.setUint32(6, 1718059137), RangeError); |
|
1193 checkThrow(function () view.setUint32(9, 2172814332), RangeError); |
|
1194 checkThrow(function () view.setUint32(12, 4244504319), RangeError); |
|
1195 |
|
1196 // testFloatSets(start=7) |
|
1197 |
|
1198 // testFloatSet expected=10 |
|
1199 // Little endian |
|
1200 view = new DataView(buffer13, 7, 9); |
|
1201 view.setFloat32(0, 10, true); |
|
1202 assertEq(view.getFloat32(0, true), 10); |
|
1203 view = new DataView(buffer13_pad3, 7, 12); |
|
1204 view.setFloat32(3, 10, true); |
|
1205 assertEq(view.getFloat32(3, true), 10); |
|
1206 view = new DataView(buffer13_pad7, 7, 16); |
|
1207 view.setFloat32(7, 10, true); |
|
1208 assertEq(view.getFloat32(7, true), 10); |
|
1209 view = new DataView(buffer13_pad10, 7, 19); |
|
1210 view.setFloat32(10, 10, true); |
|
1211 assertEq(view.getFloat32(10, true), 10); |
|
1212 // Big endian. |
|
1213 view = new DataView(buffer13_r, 7, 9); |
|
1214 view.setFloat32(0, 10, false); |
|
1215 assertEq(view.getFloat32(0, false), 10); |
|
1216 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1217 view.setFloat32(3, 10, false); |
|
1218 assertEq(view.getFloat32(3, false), 10); |
|
1219 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1220 view.setFloat32(7, 10, false); |
|
1221 assertEq(view.getFloat32(7, false), 10); |
|
1222 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1223 view.setFloat32(10, 10, false); |
|
1224 assertEq(view.getFloat32(10, false), 10); |
|
1225 |
|
1226 // testFloatSet expected=1.2300000190734863 |
|
1227 // Little endian |
|
1228 view = new DataView(buffer13, 7, 9); |
|
1229 view.setFloat32(0, 1.2300000190734863, true); |
|
1230 assertEq(view.getFloat32(0, true), 1.2300000190734863); |
|
1231 view = new DataView(buffer13_pad3, 7, 12); |
|
1232 view.setFloat32(3, 1.2300000190734863, true); |
|
1233 assertEq(view.getFloat32(3, true), 1.2300000190734863); |
|
1234 view = new DataView(buffer13_pad7, 7, 16); |
|
1235 view.setFloat32(7, 1.2300000190734863, true); |
|
1236 assertEq(view.getFloat32(7, true), 1.2300000190734863); |
|
1237 view = new DataView(buffer13_pad10, 7, 19); |
|
1238 view.setFloat32(10, 1.2300000190734863, true); |
|
1239 assertEq(view.getFloat32(10, true), 1.2300000190734863); |
|
1240 // Big endian. |
|
1241 view = new DataView(buffer13_r, 7, 9); |
|
1242 view.setFloat32(0, 1.2300000190734863, false); |
|
1243 assertEq(view.getFloat32(0, false), 1.2300000190734863); |
|
1244 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1245 view.setFloat32(3, 1.2300000190734863, false); |
|
1246 assertEq(view.getFloat32(3, false), 1.2300000190734863); |
|
1247 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1248 view.setFloat32(7, 1.2300000190734863, false); |
|
1249 assertEq(view.getFloat32(7, false), 1.2300000190734863); |
|
1250 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1251 view.setFloat32(10, 1.2300000190734863, false); |
|
1252 assertEq(view.getFloat32(10, false), 1.2300000190734863); |
|
1253 |
|
1254 // testFloatSet expected=-45621.37109375 |
|
1255 // Little endian |
|
1256 view = new DataView(buffer13, 7, 9); |
|
1257 view.setFloat32(0, -45621.37109375, true); |
|
1258 assertEq(view.getFloat32(0, true), -45621.37109375); |
|
1259 view = new DataView(buffer13_pad3, 7, 12); |
|
1260 view.setFloat32(3, -45621.37109375, true); |
|
1261 assertEq(view.getFloat32(3, true), -45621.37109375); |
|
1262 view = new DataView(buffer13_pad7, 7, 16); |
|
1263 view.setFloat32(7, -45621.37109375, true); |
|
1264 assertEq(view.getFloat32(7, true), -45621.37109375); |
|
1265 view = new DataView(buffer13_pad10, 7, 19); |
|
1266 view.setFloat32(10, -45621.37109375, true); |
|
1267 assertEq(view.getFloat32(10, true), -45621.37109375); |
|
1268 // Big endian. |
|
1269 view = new DataView(buffer13_r, 7, 9); |
|
1270 view.setFloat32(0, -45621.37109375, false); |
|
1271 assertEq(view.getFloat32(0, false), -45621.37109375); |
|
1272 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1273 view.setFloat32(3, -45621.37109375, false); |
|
1274 assertEq(view.getFloat32(3, false), -45621.37109375); |
|
1275 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1276 view.setFloat32(7, -45621.37109375, false); |
|
1277 assertEq(view.getFloat32(7, false), -45621.37109375); |
|
1278 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1279 view.setFloat32(10, -45621.37109375, false); |
|
1280 assertEq(view.getFloat32(10, false), -45621.37109375); |
|
1281 |
|
1282 // testFloatSet expected=NaN |
|
1283 // Little endian |
|
1284 view = new DataView(buffer13, 7, 9); |
|
1285 view.setFloat32(0, NaN, true); |
|
1286 assertEq(view.getFloat32(0, true), NaN); |
|
1287 view = new DataView(buffer13_pad3, 7, 12); |
|
1288 view.setFloat32(3, NaN, true); |
|
1289 assertEq(view.getFloat32(3, true), NaN); |
|
1290 view = new DataView(buffer13_pad7, 7, 16); |
|
1291 view.setFloat32(7, NaN, true); |
|
1292 assertEq(view.getFloat32(7, true), NaN); |
|
1293 view = new DataView(buffer13_pad10, 7, 19); |
|
1294 view.setFloat32(10, NaN, true); |
|
1295 assertEq(view.getFloat32(10, true), NaN); |
|
1296 // Big endian. |
|
1297 view = new DataView(buffer13_r, 7, 9); |
|
1298 view.setFloat32(0, NaN, false); |
|
1299 assertEq(view.getFloat32(0, false), NaN); |
|
1300 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1301 view.setFloat32(3, NaN, false); |
|
1302 assertEq(view.getFloat32(3, false), NaN); |
|
1303 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1304 view.setFloat32(7, NaN, false); |
|
1305 assertEq(view.getFloat32(7, false), NaN); |
|
1306 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1307 view.setFloat32(10, NaN, false); |
|
1308 assertEq(view.getFloat32(10, false), NaN); |
|
1309 |
|
1310 // testFloatSet expected=-NaN |
|
1311 // Little endian |
|
1312 view = new DataView(buffer13, 7, 9); |
|
1313 view.setFloat32(0, -NaN, true); |
|
1314 assertEq(view.getFloat32(0, true), -NaN); |
|
1315 view = new DataView(buffer13_pad3, 7, 12); |
|
1316 view.setFloat32(3, -NaN, true); |
|
1317 assertEq(view.getFloat32(3, true), -NaN); |
|
1318 view = new DataView(buffer13_pad7, 7, 16); |
|
1319 view.setFloat32(7, -NaN, true); |
|
1320 assertEq(view.getFloat32(7, true), -NaN); |
|
1321 view = new DataView(buffer13_pad10, 7, 19); |
|
1322 view.setFloat32(10, -NaN, true); |
|
1323 assertEq(view.getFloat32(10, true), -NaN); |
|
1324 // Big endian. |
|
1325 view = new DataView(buffer13_r, 7, 9); |
|
1326 view.setFloat32(0, -NaN, false); |
|
1327 assertEq(view.getFloat32(0, false), -NaN); |
|
1328 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1329 view.setFloat32(3, -NaN, false); |
|
1330 assertEq(view.getFloat32(3, false), -NaN); |
|
1331 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1332 view.setFloat32(7, -NaN, false); |
|
1333 assertEq(view.getFloat32(7, false), -NaN); |
|
1334 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1335 view.setFloat32(10, -NaN, false); |
|
1336 assertEq(view.getFloat32(10, false), -NaN); |
|
1337 |
|
1338 // testFloatSet expected=10 |
|
1339 // Little endian |
|
1340 view = new DataView(buffer13, 7, 9); |
|
1341 view.setFloat64(0, 10, true); |
|
1342 assertEq(view.getFloat64(0, true), 10); |
|
1343 view = new DataView(buffer13_pad3, 7, 12); |
|
1344 view.setFloat64(3, 10, true); |
|
1345 assertEq(view.getFloat64(3, true), 10); |
|
1346 view = new DataView(buffer13_pad7, 7, 16); |
|
1347 view.setFloat64(7, 10, true); |
|
1348 assertEq(view.getFloat64(7, true), 10); |
|
1349 view = new DataView(buffer13_pad10, 7, 19); |
|
1350 view.setFloat64(10, 10, true); |
|
1351 assertEq(view.getFloat64(10, true), 10); |
|
1352 // Big endian. |
|
1353 view = new DataView(buffer13_r, 7, 9); |
|
1354 view.setFloat64(0, 10, false); |
|
1355 assertEq(view.getFloat64(0, false), 10); |
|
1356 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1357 view.setFloat64(3, 10, false); |
|
1358 assertEq(view.getFloat64(3, false), 10); |
|
1359 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1360 view.setFloat64(7, 10, false); |
|
1361 assertEq(view.getFloat64(7, false), 10); |
|
1362 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1363 view.setFloat64(10, 10, false); |
|
1364 assertEq(view.getFloat64(10, false), 10); |
|
1365 |
|
1366 // testFloatSet expected=1.23 |
|
1367 // Little endian |
|
1368 view = new DataView(buffer13, 7, 9); |
|
1369 view.setFloat64(0, 1.23, true); |
|
1370 assertEq(view.getFloat64(0, true), 1.23); |
|
1371 view = new DataView(buffer13_pad3, 7, 12); |
|
1372 view.setFloat64(3, 1.23, true); |
|
1373 assertEq(view.getFloat64(3, true), 1.23); |
|
1374 view = new DataView(buffer13_pad7, 7, 16); |
|
1375 view.setFloat64(7, 1.23, true); |
|
1376 assertEq(view.getFloat64(7, true), 1.23); |
|
1377 view = new DataView(buffer13_pad10, 7, 19); |
|
1378 view.setFloat64(10, 1.23, true); |
|
1379 assertEq(view.getFloat64(10, true), 1.23); |
|
1380 // Big endian. |
|
1381 view = new DataView(buffer13_r, 7, 9); |
|
1382 view.setFloat64(0, 1.23, false); |
|
1383 assertEq(view.getFloat64(0, false), 1.23); |
|
1384 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1385 view.setFloat64(3, 1.23, false); |
|
1386 assertEq(view.getFloat64(3, false), 1.23); |
|
1387 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1388 view.setFloat64(7, 1.23, false); |
|
1389 assertEq(view.getFloat64(7, false), 1.23); |
|
1390 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1391 view.setFloat64(10, 1.23, false); |
|
1392 assertEq(view.getFloat64(10, false), 1.23); |
|
1393 |
|
1394 // testFloatSet expected=-6213576.4839 |
|
1395 // Little endian |
|
1396 view = new DataView(buffer13, 7, 9); |
|
1397 view.setFloat64(0, -6213576.4839, true); |
|
1398 assertEq(view.getFloat64(0, true), -6213576.4839); |
|
1399 view = new DataView(buffer13_pad3, 7, 12); |
|
1400 view.setFloat64(3, -6213576.4839, true); |
|
1401 assertEq(view.getFloat64(3, true), -6213576.4839); |
|
1402 view = new DataView(buffer13_pad7, 7, 16); |
|
1403 view.setFloat64(7, -6213576.4839, true); |
|
1404 assertEq(view.getFloat64(7, true), -6213576.4839); |
|
1405 view = new DataView(buffer13_pad10, 7, 19); |
|
1406 view.setFloat64(10, -6213576.4839, true); |
|
1407 assertEq(view.getFloat64(10, true), -6213576.4839); |
|
1408 // Big endian. |
|
1409 view = new DataView(buffer13_r, 7, 9); |
|
1410 view.setFloat64(0, -6213576.4839, false); |
|
1411 assertEq(view.getFloat64(0, false), -6213576.4839); |
|
1412 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1413 view.setFloat64(3, -6213576.4839, false); |
|
1414 assertEq(view.getFloat64(3, false), -6213576.4839); |
|
1415 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1416 view.setFloat64(7, -6213576.4839, false); |
|
1417 assertEq(view.getFloat64(7, false), -6213576.4839); |
|
1418 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1419 view.setFloat64(10, -6213576.4839, false); |
|
1420 assertEq(view.getFloat64(10, false), -6213576.4839); |
|
1421 |
|
1422 // testFloatSet expected=NaN |
|
1423 // Little endian |
|
1424 view = new DataView(buffer13, 7, 9); |
|
1425 view.setFloat64(0, NaN, true); |
|
1426 assertEq(view.getFloat64(0, true), NaN); |
|
1427 view = new DataView(buffer13_pad3, 7, 12); |
|
1428 view.setFloat64(3, NaN, true); |
|
1429 assertEq(view.getFloat64(3, true), NaN); |
|
1430 view = new DataView(buffer13_pad7, 7, 16); |
|
1431 view.setFloat64(7, NaN, true); |
|
1432 assertEq(view.getFloat64(7, true), NaN); |
|
1433 view = new DataView(buffer13_pad10, 7, 19); |
|
1434 view.setFloat64(10, NaN, true); |
|
1435 assertEq(view.getFloat64(10, true), NaN); |
|
1436 // Big endian. |
|
1437 view = new DataView(buffer13_r, 7, 9); |
|
1438 view.setFloat64(0, NaN, false); |
|
1439 assertEq(view.getFloat64(0, false), NaN); |
|
1440 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1441 view.setFloat64(3, NaN, false); |
|
1442 assertEq(view.getFloat64(3, false), NaN); |
|
1443 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1444 view.setFloat64(7, NaN, false); |
|
1445 assertEq(view.getFloat64(7, false), NaN); |
|
1446 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1447 view.setFloat64(10, NaN, false); |
|
1448 assertEq(view.getFloat64(10, false), NaN); |
|
1449 |
|
1450 // testFloatSet expected=-NaN |
|
1451 // Little endian |
|
1452 view = new DataView(buffer13, 7, 9); |
|
1453 view.setFloat64(0, -NaN, true); |
|
1454 assertEq(view.getFloat64(0, true), -NaN); |
|
1455 view = new DataView(buffer13_pad3, 7, 12); |
|
1456 view.setFloat64(3, -NaN, true); |
|
1457 assertEq(view.getFloat64(3, true), -NaN); |
|
1458 view = new DataView(buffer13_pad7, 7, 16); |
|
1459 view.setFloat64(7, -NaN, true); |
|
1460 assertEq(view.getFloat64(7, true), -NaN); |
|
1461 view = new DataView(buffer13_pad10, 7, 19); |
|
1462 view.setFloat64(10, -NaN, true); |
|
1463 assertEq(view.getFloat64(10, true), -NaN); |
|
1464 // Big endian. |
|
1465 view = new DataView(buffer13_r, 7, 9); |
|
1466 view.setFloat64(0, -NaN, false); |
|
1467 assertEq(view.getFloat64(0, false), -NaN); |
|
1468 view = new DataView(buffer13_r_pad3, 7, 12); |
|
1469 view.setFloat64(3, -NaN, false); |
|
1470 assertEq(view.getFloat64(3, false), -NaN); |
|
1471 view = new DataView(buffer13_r_pad7, 7, 16); |
|
1472 view.setFloat64(7, -NaN, false); |
|
1473 assertEq(view.getFloat64(7, false), -NaN); |
|
1474 view = new DataView(buffer13_r_pad10, 7, 19); |
|
1475 view.setFloat64(10, -NaN, false); |
|
1476 assertEq(view.getFloat64(10, false), -NaN); |
|
1477 |
|
1478 // Test for set methods that write to negative index |
|
1479 |
|
1480 // testSetNegativeIndexes |
|
1481 view = new DataView(buffer1, 0, 16); |
|
1482 checkThrow(function () view.setInt8(-1, 0), RangeError); |
|
1483 checkThrow(function () view.setInt8(-2, 0), RangeError); |
|
1484 checkThrow(function () view.setUint8(-1, 0), RangeError); |
|
1485 checkThrow(function () view.setUint8(-2, 0), RangeError); |
|
1486 checkThrow(function () view.setInt16(-1, 0), RangeError); |
|
1487 checkThrow(function () view.setInt16(-2, 0), RangeError); |
|
1488 checkThrow(function () view.setInt16(-3, 0), RangeError); |
|
1489 checkThrow(function () view.setUint16(-1, 0), RangeError); |
|
1490 checkThrow(function () view.setUint16(-2, 0), RangeError); |
|
1491 checkThrow(function () view.setUint16(-3, 0), RangeError); |
|
1492 checkThrow(function () view.setInt32(-1, 0), RangeError); |
|
1493 checkThrow(function () view.setInt32(-3, 0), RangeError); |
|
1494 checkThrow(function () view.setInt32(-5, 0), RangeError); |
|
1495 checkThrow(function () view.setUint32(-1, 0), RangeError); |
|
1496 checkThrow(function () view.setUint32(-3, 0), RangeError); |
|
1497 checkThrow(function () view.setUint32(-5, 0), RangeError); |
|
1498 view = new DataView(buffer7, 0, 8); |
|
1499 checkThrow(function () view.setFloat32(-1, 0), RangeError); |
|
1500 checkThrow(function () view.setFloat32(-3, 0), RangeError); |
|
1501 checkThrow(function () view.setFloat32(-5, 0), RangeError); |
|
1502 checkThrow(function () view.setFloat64(-1, 0), RangeError); |
|
1503 checkThrow(function () view.setFloat64(-5, 0), RangeError); |
|
1504 checkThrow(function () view.setFloat64(-9, 0), RangeError); |
|
1505 |
|
1506 // Too large for signed 32 bit integer index |
|
1507 checkThrow(function () view.setInt8(2147483649, 1), RangeError); |
|
1508 checkThrow(function () view.setUint8(2147483649, 1), RangeError); |
|
1509 checkThrow(function () view.setInt16(2147483649, 1), RangeError); |
|
1510 checkThrow(function () view.setUint16(2147483649, 1), RangeError); |
|
1511 checkThrow(function () view.setInt32(2147483649, 1), RangeError); |
|
1512 checkThrow(function () view.setUint32(2147483649, 1), RangeError); |
|
1513 checkThrow(function () view.setFloat32(2147483649, 1), RangeError); |
|
1514 checkThrow(function () view.setFloat64(2147483649, 1), RangeError); |
|
1515 |
|
1516 // Test for wrong arguments passed to set methods |
|
1517 checkThrow(function () view.setInt8(), Error); |
|
1518 checkThrow(function () view.setUint8(), Error); |
|
1519 checkThrow(function () view.setInt16(), Error); |
|
1520 checkThrow(function () view.setUint16(), Error); |
|
1521 checkThrow(function () view.setInt32(), Error); |
|
1522 checkThrow(function () view.setUint32(), Error); |
|
1523 checkThrow(function () view.setFloat32(), Error); |
|
1524 checkThrow(function () view.setFloat64(), Error); |
|
1525 checkThrow(function () view.setInt8(1), Error); |
|
1526 checkThrow(function () view.setUint8(1), Error); |
|
1527 checkThrow(function () view.setInt16(1), Error); |
|
1528 checkThrow(function () view.setUint16(1), Error); |
|
1529 checkThrow(function () view.setInt32(1), Error); |
|
1530 checkThrow(function () view.setUint32(1), Error); |
|
1531 checkThrow(function () view.setFloat32(1), Error); |
|
1532 checkThrow(function () view.setFloat64(1), Error); |
|
1533 |
|
1534 // testAlignment |
|
1535 var intArray1 = [0, 1, 2, 3, 100, 101, 102, 103, 128, 129, 130, 131, 252, 253, 254, 255]; |
|
1536 view = new DataView((new Uint8Array(intArray1)).buffer, 0); |
|
1537 assertEq(view.getUint32(0, false), 0x00010203); |
|
1538 view = new DataView((new Uint8Array(intArray1)).buffer, 1); |
|
1539 assertEq(view.getUint32(0, false), 0x01020364); |
|
1540 view = new DataView((new Uint8Array(intArray1)).buffer, 2); |
|
1541 assertEq(view.getUint32(0, false), 0x02036465); |
|
1542 view = new DataView((new Uint8Array(intArray1)).buffer, 3); |
|
1543 assertEq(view.getUint32(0, false), 0x03646566); |
|
1544 view = new DataView((new Uint8Array(intArray1)).buffer, 4); |
|
1545 assertEq(view.getUint32(0, false), 0x64656667); |
|
1546 view = new DataView((new Uint8Array(intArray1)).buffer, 5); |
|
1547 assertEq(view.getUint32(0, false), 0x65666780); |
|
1548 view = new DataView((new Uint8Array(intArray1)).buffer, 6); |
|
1549 assertEq(view.getUint32(0, false), 0x66678081); |
|
1550 view = new DataView((new Uint8Array(intArray1)).buffer, 7); |
|
1551 assertEq(view.getUint32(0, false), 0x67808182); |
|
1552 |
|
1553 // Test for indexing into a DataView, which should not use the ArrayBuffer storage |
|
1554 view = new DataView((new Uint8Array([1, 2])).buffer); |
|
1555 assertEq(view[0], undefined); |
|
1556 view[0] = 3; |
|
1557 assertEq(view[0], 3); |
|
1558 assertEq(view.getUint8(0), 1); |
|
1559 |
|
1560 // Test WebIDL-specific class and prototype class names |
|
1561 assertEq(Object.prototype.toString.apply(new Uint8Array(0)), "[object Uint8Array]"); |
|
1562 assertEq(Object.prototype.toString.apply(new Float32Array(0)), "[object Float32Array]"); |
|
1563 assertEq(Object.prototype.toString.apply(Uint8Array.prototype), "[object Uint8ArrayPrototype]"); |
|
1564 assertEq(Object.prototype.toString.apply(Float32Array.prototype), "[object Float32ArrayPrototype]"); |
|
1565 assertEq(Object.prototype.toString.apply(new ArrayBuffer()), "[object ArrayBuffer]"); |
|
1566 assertEq(Object.prototype.toString.apply(new DataView(view.buffer)), "[object DataView]"); |
|
1567 assertEq(Object.prototype.toString.apply(DataView.prototype), "[object DataViewPrototype]"); |
|
1568 |
|
1569 // Accessing DataView fields on DataView.prototype should crash |
|
1570 checkThrow(function () DataView.prototype.byteLength, TypeError); |
|
1571 checkThrow(function () DataView.prototype.byteOffset, TypeError); |
|
1572 checkThrow(function () DataView.prototype.buffer, TypeError); |
|
1573 |
|
1574 // Protos and proxies, oh my! |
|
1575 var alien = newGlobal(); |
|
1576 var alien_data = alien.eval('data = ' + data1.toSource()); |
|
1577 var alien_buffer = alien.eval('buffer = new Uint8Array(data).buffer'); |
|
1578 var alien_view = alien.eval('view = new DataView(buffer, 0, 16)'); |
|
1579 |
|
1580 // proto is view of buffer: should throw |
|
1581 var o = Object.create(view1); |
|
1582 checkThrow(function () o.getUint8(4), TypeError); // WebIDL 4.4.7: Operations |
|
1583 checkThrow(function () o.buffer, TypeError); // WebIDL 4.4.6: Attributes, section 2 |
|
1584 checkThrow(function () o.byteOffset, TypeError); |
|
1585 checkThrow(function () o.byteLength, TypeError); |
|
1586 |
|
1587 // proxy for view of buffer: should work |
|
1588 assertEq(alien_view.buffer.byteLength > 0, true); |
|
1589 assertEq(alien_view.getUint8(4), 100); |
|
1590 |
|
1591 // Bug 753996: when throwing an Error whose message contains the name of a |
|
1592 // function, the JS engine calls js_ValueToFunction to produce the function |
|
1593 // name to include in the message. js_ValueToFunction does not unwrap its |
|
1594 // argument. So if the function is actually a wrapper, then |
|
1595 // js_ValueToFunction will throw a TypeError ("X is not a function"). |
|
1596 // Confusingly, this TypeError uses the decompiler, which *will* unwrap the |
|
1597 // object to get the wrapped function name out, so the final error will |
|
1598 // look something like "SomeFunction() is not a function".) |
|
1599 var weirdo = Object.create(alien.eval("new Date")); |
|
1600 var e = null; |
|
1601 try { |
|
1602 weirdo.getTime(); |
|
1603 } catch (exc) { |
|
1604 e = exc; |
|
1605 } |
|
1606 if (!e) { |
|
1607 print("==== TODO but PASSED? ===="); |
|
1608 print("Bug 753996 unexpectedly passed"); |
|
1609 } |
|
1610 |
|
1611 // proto is proxy for view of buffer: should throw TypeError |
|
1612 // |
|
1613 // As of this writing, bug 753996 causes this to throw the *wrong* |
|
1614 // TypeError, and in fact it throws a (thisglobal).TypeError instead of |
|
1615 // alien.TypeError. |
|
1616 var av = Object.create(alien_view); |
|
1617 checkThrowTODO(function () av.getUint8(4), alien.TypeError); |
|
1618 checkThrowTODO(function () av.buffer, alien.TypeError); |
|
1619 |
|
1620 // view of object whose proto is buffer. This should not work per dherman. |
|
1621 // Note that DataView throws a TypeError while TypedArrays create a |
|
1622 // zero-length view. Odd though it seems, this is correct: TypedArrays have |
|
1623 // a constructor that takes a length argument; DataViews do not. So a |
|
1624 // TypedArray will do ToUint32 and end up passing a zero as the |
|
1625 // constructor's length argument. |
|
1626 buffer = Object.create(buffer1); |
|
1627 checkThrow(function () new DataView(buffer), TypeError); |
|
1628 |
|
1629 // view of proxy for buffer |
|
1630 av = new DataView(alien_buffer); |
|
1631 assertEq(av.getUint8(4), 100); |
|
1632 assertEq(Object.getPrototypeOf(av), DataView.prototype); |
|
1633 |
|
1634 // Bug 760904: call another compartment's constructor with an ArrayBuffer |
|
1635 // from this compartment, both as a constructor and as a regular call. (The |
|
1636 // latter is what was broken in that bug.) |
|
1637 var alien_constructor = alien.DataView; |
|
1638 var local_buffer = (new Int8Array(3)).buffer; |
|
1639 var foreign_exchange_student_1 = alien_constructor(local_buffer); |
|
1640 var foreign_exchange_student_2 = new alien_constructor(local_buffer); |
|
1641 |
|
1642 // gc bug 787775 |
|
1643 var ab = new ArrayBuffer(4); |
|
1644 var dv = new DataView(ab); |
|
1645 dv = 1; |
|
1646 gc(); |
|
1647 |
|
1648 reportCompare(0, 0, 'done.'); |
|
1649 exitFunc ('test'); |
|
1650 } |
|
1651 |
|
1652 test(); |