Sat, 03 Jan 2015 20:18:00 +0100
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(); |