js/src/tests/js1_8_5/extensions/dataview.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

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

mercurial