Changeset 258710 in webkit
- Timestamp:
- Mar 19, 2020 10:44:22 AM (4 years ago)
- Location:
- trunk/JSTests
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r258664 r258710 1 2020-03-19 Tomas Popela <tpopela@redhat.com> 2 3 [JSC][BigEndians] Several JSC stress tests failing 4 https://bugs.webkit.org/show_bug.cgi?id=194007 5 6 Reviewed by Michael Catanzaro. 7 8 Adapt the DataView tests to be able to pass on little endian as well 9 as the big endian hardware. Do so by introducing method that determine 10 the endianess and based on its value it saves the expected results in 11 the right format. 12 13 * stress/dataview-get-cse.js: 14 (getIsLittleEndian): 15 (adjustForEndianess): 16 (test3.foo): 17 (test3): 18 * stress/dataview-jit-get.js: 19 (getIsLittleEndian): 20 (test1.adjustForEndianess): 21 (test1): 22 (test2.adjustForEndianess): 23 (test2): 24 (test3.adjustForEndianess): 25 (test3): 26 (adjustForEndianessUint32): 27 (test4): 28 (test5): 29 (test6): 30 (test7): 31 (test8): 32 * stress/dataview-jit-neuter.js: 33 (getIsLittleEndian): 34 (adjustForEndianess): 35 (test): 36 (test2): 37 * stress/dataview-jit-set-nan.js: 38 (getIsLittleEndian): 39 (adjustForEndianessFloat32): 40 (test): 41 * stress/dataview-jit-set.js: 42 (getIsLittleEndian): 43 (readHex): 44 (adjustForEndianessUint16): 45 (test): 46 (test2): 47 (adjustForEndianessUint32): 48 (test3): 49 (test4): 50 (adjustForEndianessFloat32): 51 (test5): 52 (adjustForEndianessFloat64): 53 (test6): 54 (isLittleEndian): Deleted. 55 1 56 2020-03-18 Yusuke Suzuki <ysuzuki@apple.com> 2 57 -
trunk/JSTests/stress/dataview-get-cse.js
r235515 r258710 6 6 } 7 7 8 function getIsLittleEndian() { 9 let ab = new ArrayBuffer(2); 10 let ta = new Int16Array(ab); 11 ta[0] = 0x0102; 12 let dv = new DataView(ab); 13 return dv.getInt16(0, true) === 0x0102; 14 } 15 16 let isLittleEndian = getIsLittleEndian(); 17 18 function adjustForEndianess(value) { 19 if (isLittleEndian) 20 return value; 21 22 let ab = new ArrayBuffer(8); 23 let ta = new Float64Array(ab); 24 ta[0] = value; 25 let dv = new DataView(ab); 26 return dv.getFloat64(0, true); 27 } 8 28 9 29 function test1() { … … 42 62 function foo(dv, ta) { 43 63 let a = dv.getFloat64(0, true); 44 ta[0] = Math.PI;64 ta[0] = adjustForEndianess(Math.PI); 45 65 let b = dv.getFloat64(0, true); 46 66 return [a, b]; -
trunk/JSTests/stress/dataview-jit-get.js
r235106 r258710 6 6 } 7 7 8 function test1() { 9 function bigEndian(o, i) { 10 return o.getInt32(i, false); 11 } 12 noInline(bigEndian); 13 function littleEndian(o, i) { 14 return o.getInt32(i, true); 15 } 16 noInline(littleEndian); 17 function biEndian(o, i, b) { 18 return o.getInt32(i, b); 19 } 20 noInline(biEndian); 21 22 let ab = new ArrayBuffer(4); 23 let ta = new Int32Array(ab); 24 ta[0] = 0x01020304; 25 let dv = new DataView(ab); 26 27 for (let i = 0; i < 10000; ++i) { 28 assert(bigEndian(dv, 0) === 0x04030201); 29 assert(littleEndian(dv, 0) === 0x01020304); 30 if (i % 2) 31 assert(biEndian(dv, 0, true) === 0x01020304); 32 else 33 assert(biEndian(dv, 0, false) === 0x04030201); 34 } 35 36 for (let i = 0; i < 10000; ++i) { 37 assert(bigEndian(dv, 0) === 0x04030201); 38 assert(littleEndian(dv, 0) === 0x01020304); 39 if (i % 2) 40 assert(biEndian(dv, 0, true) === 0x01020304); 41 else 42 assert(biEndian(dv, 0, false) === 0x04030201); 43 } 44 45 // Make sure we get the right sign. 46 ta[0] = -32361386; // 0xfe123456 47 for (let i = 0; i < 10000; ++i) { 48 assert(bigEndian(dv, 0) === 0x563412fe); 49 assert(littleEndian(dv, 0) === -32361386); 50 if (i % 2) 51 assert(biEndian(dv, 0, true) === -32361386); 52 else 53 assert(biEndian(dv, 0, false) === 0x563412fe); 54 } 55 56 // -2146290602 == (int)0x80123456 57 ta[0] = 0x56341280; 58 for (let i = 0; i < 10000; ++i) { 59 assert(bigEndian(dv, 0) === -2146290602); 60 assert(littleEndian(dv, 0) === 0x56341280); 61 if (i % 2) 62 assert(biEndian(dv, 0, true) === 0x56341280); 63 else 64 assert(biEndian(dv, 0, false) === -2146290602); 65 } 66 } 67 test1(); 68 69 function test2() { 70 function bigEndian(o, i) { 71 return o.getInt16(i, false); 72 } 73 noInline(bigEndian); 74 function littleEndian(o, i) { 75 return o.getInt16(i, true); 76 } 77 noInline(littleEndian); 78 function biEndian(o, i, b) { 79 return o.getInt16(i, b); 80 } 81 noInline(biEndian); 82 8 function getIsLittleEndian() { 83 9 let ab = new ArrayBuffer(2); 84 10 let ta = new Int16Array(ab); 85 11 ta[0] = 0x0102; 86 12 let dv = new DataView(ab); 13 return dv.getInt16(0, true) === 0x0102; 14 } 15 16 let isLittleEndian = getIsLittleEndian(); 17 18 function test1() { 19 function bigEndian(o, i) { 20 return o.getInt32(i, false); 21 } 22 noInline(bigEndian); 23 function littleEndian(o, i) { 24 return o.getInt32(i, true); 25 } 26 noInline(littleEndian); 27 function biEndian(o, i, b) { 28 return o.getInt32(i, b); 29 } 30 noInline(biEndian); 31 function adjustForEndianess(value) { 32 if (isLittleEndian) 33 return value; 34 35 let ab = new ArrayBuffer(4); 36 let ta = new Int32Array(ab); 37 ta[0] = value; 38 let dv = new DataView(ab); 39 return dv.getInt32(0, true); 40 } 41 42 let ab = new ArrayBuffer(4); 43 let ta = new Int32Array(ab); 44 ta[0] = adjustForEndianess(0x01020304); 45 let dv = new DataView(ab); 46 47 for (let i = 0; i < 10000; ++i) { 48 assert(bigEndian(dv, 0) === 0x04030201); 49 assert(littleEndian(dv, 0) === 0x01020304); 50 if (i % 2) 51 assert(biEndian(dv, 0, true) === 0x01020304); 52 else 53 assert(biEndian(dv, 0, false) === 0x04030201); 54 } 55 56 for (let i = 0; i < 10000; ++i) { 57 assert(bigEndian(dv, 0) === 0x04030201); 58 assert(littleEndian(dv, 0) === 0x01020304); 59 if (i % 2) 60 assert(biEndian(dv, 0, true) === 0x01020304); 61 else 62 assert(biEndian(dv, 0, false) === 0x04030201); 63 } 64 65 // Make sure we get the right sign. 66 ta[0] = adjustForEndianess(-32361386); // 0xfe123456 67 for (let i = 0; i < 10000; ++i) { 68 assert(bigEndian(dv, 0) === 0x563412fe); 69 assert(littleEndian(dv, 0) === -32361386); 70 if (i % 2) 71 assert(biEndian(dv, 0, true) === -32361386); 72 else 73 assert(biEndian(dv, 0, false) === 0x563412fe); 74 } 75 76 // -2146290602 == (int)0x80123456 77 ta[0] = adjustForEndianess(0x56341280); 78 for (let i = 0; i < 10000; ++i) { 79 assert(bigEndian(dv, 0) === -2146290602); 80 assert(littleEndian(dv, 0) === 0x56341280); 81 if (i % 2) 82 assert(biEndian(dv, 0, true) === 0x56341280); 83 else 84 assert(biEndian(dv, 0, false) === -2146290602); 85 } 86 } 87 test1(); 88 89 function test2() { 90 function bigEndian(o, i) { 91 return o.getInt16(i, false); 92 } 93 noInline(bigEndian); 94 function littleEndian(o, i) { 95 return o.getInt16(i, true); 96 } 97 noInline(littleEndian); 98 function biEndian(o, i, b) { 99 return o.getInt16(i, b); 100 } 101 noInline(biEndian); 102 function adjustForEndianess(value) { 103 if (isLittleEndian) 104 return value; 105 106 let ab = new ArrayBuffer(2); 107 let ta = new Int16Array(ab); 108 ta[0] = value; 109 let dv = new DataView(ab); 110 return dv.getInt16(0, true); 111 } 112 113 let ab = new ArrayBuffer(2); 114 let ta = new Int16Array(ab); 115 ta[0] = adjustForEndianess(0x0102); 116 let dv = new DataView(ab); 87 117 88 118 for (let i = 0; i < 10000; ++i) { … … 96 126 97 127 // Check sign. 98 ta[0] = -512; // 0xfe00128 ta[0] = adjustForEndianess(-512); // 0xfe00 99 129 for (let i = 0; i < 10000; ++i) { 100 130 assert(bigEndian(dv, 0) === 0x00fe); … … 107 137 108 138 // Check sign extension. 109 ta[0] = 0x00fe;139 ta[0] = adjustForEndianess(0x00fe); 110 140 for (let i = 0; i < 10000; ++i) { 111 141 assert(bigEndian(dv, 0) === -512); … … 132 162 } 133 163 noInline(biEndian); 164 function adjustForEndianess(value) { 165 if (isLittleEndian) 166 return value; 167 168 let ab = new ArrayBuffer(4); 169 let ta = new Float32Array(ab); 170 ta[0] = value; 171 let dv = new DataView(ab); 172 return dv.getFloat32(0, true); 173 } 134 174 135 175 let ab = new ArrayBuffer(4); … … 139 179 140 180 const flipped = -5.1162437589918884e-21; 141 ta[0] = normal;181 ta[0] = adjustForEndianess(normal); 142 182 143 183 let dv = new DataView(ab); … … 153 193 test3(); 154 194 195 function adjustForEndianessUint32(value) { 196 if (isLittleEndian) 197 return value; 198 199 let ab = new ArrayBuffer(4); 200 let ta = new Uint32Array(ab); 201 ta[0] = value; 202 let dv = new DataView(ab); 203 return dv.getUint32(0, true); 204 } 205 155 206 function test4() { 156 207 function bigEndian(o, i) { … … 169 220 let ab = new ArrayBuffer(4); 170 221 let ta = new Uint32Array(ab); 171 ta[0] = 0xa0b0d0f0;222 ta[0] = adjustForEndianessUint32(0xa0b0d0f0); 172 223 173 224 let dv = new DataView(ab); … … 199 250 let ab = new ArrayBuffer(4); 200 251 let ta = new Uint32Array(ab); 201 ta[0] = 0xa0b0d0f0;252 ta[0] = adjustForEndianessUint32(0xa0b0d0f0); 202 253 203 254 let dv = new DataView(ab); … … 240 291 let ab = new ArrayBuffer(4); 241 292 let ta = new Uint32Array(ab); 242 ta[0] = 0xa070fa01;293 ta[0] = adjustForEndianessUint32(0xa070fa01); 243 294 244 295 let dv = new DataView(ab); … … 273 324 let ab = new ArrayBuffer(4); 274 325 let ta = new Uint32Array(ab); 275 ta[0] = 0xa070fa01;326 ta[0] = adjustForEndianessUint32(0xa070fa01); 276 327 277 328 let dv = new DataView(ab); … … 293 344 let ab = new ArrayBuffer(4); 294 345 let ta = new Uint32Array(ab); 295 ta[0] = 0xa070fa01;346 ta[0] = adjustForEndianessUint32(0xa070fa01); 296 347 297 348 let dv = new DataView(ab); -
trunk/JSTests/stress/dataview-jit-neuter.js
r235106 r258710 4 4 if (!b) 5 5 throw new Error("Bad!"); 6 } 7 8 function getIsLittleEndian() { 9 let ab = new ArrayBuffer(2); 10 let ta = new Int16Array(ab); 11 ta[0] = 0x0102; 12 let dv = new DataView(ab); 13 return dv.getInt16(0, true) === 0x0102; 14 } 15 16 let isLittleEndian = getIsLittleEndian(); 17 18 function adjustForEndianess(value) { 19 if (isLittleEndian) 20 return value; 21 22 let ab = new ArrayBuffer(4); 23 let ta = new Uint32Array(ab); 24 ta[0] = value; 25 let dv = new DataView(ab); 26 return dv.getUint32(0, true); 6 27 } 7 28 … … 14 35 let ab = new ArrayBuffer(4); 15 36 let ta = new Uint32Array(ab); 16 ta[0] = 0xa070fa01;37 ta[0] = adjustForEndianess(0xa070fa01); 17 38 let dv = new DataView(ab); 18 39 … … 41 62 let ab = new ArrayBuffer(4); 42 63 let ta = new Uint32Array(ab); 43 ta[0] = 0xa070fa01;64 ta[0] = adjustForEndianess(0xa070fa01); 44 65 let dv = new DataView(ab); 45 66 -
trunk/JSTests/stress/dataview-jit-set-nan.js
r236684 r258710 6 6 if (!b) 7 7 throw new Error; 8 } 9 10 function getIsLittleEndian() { 11 let ab = new ArrayBuffer(2); 12 let ta = new Int16Array(ab); 13 ta[0] = 0x0102; 14 let dv = new DataView(ab); 15 return dv.getInt16(0, true) === 0x0102; 16 } 17 18 let isLittleEndian = getIsLittleEndian(); 19 20 function adjustForEndianessFloat32(value) { 21 if (isLittleEndian) 22 return value; 23 24 let ab = new ArrayBuffer(4); 25 let ta = new Float32Array(ab); 26 ta[0] = value; 27 let dv = new DataView(ab); 28 return dv.getFloat32(0, true); 8 29 } 9 30 … … 30 51 31 52 for (let i = 0; i < 10000; ++i) { 32 storeLittleEndian(dv, 0, 1.5);53 storeLittleEndian(dv, 0, adjustForEndianessFloat32(1.5)); 33 54 assert(arr[0] === 1.5); 34 55 35 storeLittleEndian(dv, 0, 12912.124123215122); 56 // The right way how to process this test is to uncomment the line below 57 // and comment out the line below it. But strangely it doesn't work. I 58 // opened https://bugs.webkit.org/show_bug.cgi?id=209289 for it. 59 //storeLittleEndian(dv, 0, adjustForEndianessFloat32(12912.124123215122)); 60 store(dv, 0, 12912.124123215122, isLittleEndian); 36 61 assert(arr[0] === 12912.1240234375); 37 62 assert(bits[0] === 0x4649c07f); 38 63 39 storeLittleEndian(dv, 0, NaN);64 storeLittleEndian(dv, 0, adjustForEndianessFloat32(NaN)); 40 65 assert(isNaN(arr[0])); 41 66 assert(bits[0] === 0x7FC00000); 42 67 43 storeLittleEndian(dv, 0, 2.3879393e-38);68 storeLittleEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38)); 44 69 assert(arr[0] === 2.387939260590663e-38); 45 70 assert(bits[0] === 0x01020304); 46 71 47 storeBigEndian(dv, 0, 2.3879393e-38);72 storeBigEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38)); 48 73 assert(arr[0] === 1.539989614439558e-36); 49 74 assert(bits[0] === 0x04030201); -
trunk/JSTests/stress/dataview-jit-set.js
r236684 r258710 6 6 } 7 7 8 function getIsLittleEndian() { 9 let ab = new ArrayBuffer(2); 10 let ta = new Int16Array(ab); 11 ta[0] = 0x0102; 12 let dv = new DataView(ab); 13 return dv.getInt16(0, true) === 0x0102; 14 } 15 16 let isLittleEndian = getIsLittleEndian(); 17 8 18 function readHex(dv, bytes) { 9 function isLittleEndian() {10 let b = new ArrayBuffer(4);11 let dv = new DataView(b);12 dv.setInt32(0, 0x00112233, true);13 return dv.getUint8(0) === 0x33;14 }15 19 let str = ""; 16 20 function readByte(i) { … … 22 26 return b; 23 27 } 24 if (isLittleEndian ()) {28 if (isLittleEndian) { 25 29 for (let i = bytes; i--;) 26 30 str = str + readByte(i); … … 36 40 let b = new ArrayBuffer(4); 37 41 let dv = new DataView(b); 38 dv.setInt32(0, 0x00112233, true);42 dv.setInt32(0, 0x00112233, isLittleEndian); 39 43 assert(readHex(dv, 4) === "0x00112233"); 44 } 45 46 function adjustForEndianessUint16(value) { 47 if (isLittleEndian) 48 return value; 49 50 let ab = new ArrayBuffer(4); 51 let ta = new Uint16Array(ab); 52 ta[0] = value; 53 let dv = new DataView(ab); 54 return dv.getUint16(0, true); 40 55 } 41 56 … … 61 76 62 77 for (let i = 0; i < 10000; ++i) { 63 storeLittleEndian(dv, 0, 0xfaba);78 storeLittleEndian(dv, 0, adjustForEndianessUint16(0xfaba)); 64 79 assert(arr[0] === 0xfaba); 65 80 66 store(dv, 0, 0xabcd, true);81 store(dv, 0, adjustForEndianessUint16(0xabcd), true); 67 82 assert(arr[0] === 0xabcd); 68 83 69 store(dv, 0, 0xbadbeef, true);84 store(dv, 0, adjustForEndianessUint16(0xbadbeef), true); 70 85 assert(arr[0] === 0xbeef); 71 86 72 storeLittleEndian(dv, 0, 0xbb4db33f, true);87 storeLittleEndian(dv, 0, adjustForEndianessUint16(0xbb4db33f), true); 73 88 assert(arr[0] === 0xb33f); 74 89 75 storeBigEndian(dv, 0, 0xfada);90 storeBigEndian(dv, 0, adjustForEndianessUint16(0xfada)); 76 91 assert(arr[0] === 0xdafa); 77 92 78 storeBigEndian(dv, 0, 0x12ab);93 storeBigEndian(dv, 0, adjustForEndianessUint16(0x12ab)); 79 94 assert(arr[0] === 0xab12); 80 95 81 store(dv, 0, 0x1234, false);96 store(dv, 0, adjustForEndianessUint16(0x1234), false); 82 97 assert(arr[0] === 0x3412); 83 98 84 store(dv, 0, 0x0102, false);99 store(dv, 0, adjustForEndianessUint16(0x0102), false); 85 100 assert(arr[0] === 0x0201); 86 101 87 store(dv, 0, -1, false);102 store(dv, 0, adjustForEndianessUint16(-1), false); 88 103 assert(arr[0] === 0xffff); 89 104 90 store(dv, 0, -2, false);105 store(dv, 0, adjustForEndianessUint16(-2), false); 91 106 assert(arr[0] === 0xfeff); 92 107 93 storeBigEndian(dv, 0, -1);108 storeBigEndian(dv, 0, adjustForEndianessUint16(-1)); 94 109 assert(arr[0] === 0xffff); 95 110 96 storeBigEndian(dv, 0, -2);111 storeBigEndian(dv, 0, adjustForEndianessUint16(-2)); 97 112 assert(arr[0] === 0xfeff); 98 113 99 storeBigEndian(dv, 0, -2147483648);114 storeBigEndian(dv, 0, adjustForEndianessUint16(-2147483648)); 100 115 assert(arr[0] === 0x0000); 101 116 102 storeLittleEndian(dv, 0, -2147483648);117 storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147483648)); 103 118 assert(arr[0] === 0x0000); 104 119 105 storeLittleEndian(dv, 0, -2147478988);120 storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147478988)); 106 121 assert(arr[0] === 0x1234); 107 122 108 storeBigEndian(dv, 0, -2147478988);123 storeBigEndian(dv, 0, adjustForEndianessUint16(-2147478988)); 109 124 assert(arr[0] === 0x3412); 110 125 } … … 133 148 134 149 for (let i = 0; i < 10000; ++i) { 135 storeLittleEndian(dv, 0, 0xfaba);150 storeLittleEndian(dv, 0, adjustForEndianessUint16(0xfaba)); 136 151 assert(arr[0] === 0xfaba); 137 152 138 store(dv, 0, 0xabcd, true);153 store(dv, 0, adjustForEndianessUint16(0xabcd), true); 139 154 assert(arr[0] === 0xabcd); 140 155 141 store(dv, 0, 0xbadbeef, true);156 store(dv, 0, adjustForEndianessUint16(0xbadbeef), true); 142 157 assert(arr[0] === 0xbeef); 143 158 144 storeLittleEndian(dv, 0, 0xbb4db33f, true);159 storeLittleEndian(dv, 0, adjustForEndianessUint16(0xbb4db33f), true); 145 160 assert(arr[0] === 0xb33f); 146 161 147 storeBigEndian(dv, 0, 0xfada);162 storeBigEndian(dv, 0, adjustForEndianessUint16(0xfada)); 148 163 assert(arr[0] === 0xdafa); 149 164 150 storeBigEndian(dv, 0, 0x12ab);165 storeBigEndian(dv, 0, adjustForEndianessUint16(0x12ab)); 151 166 assert(arr[0] === 0xab12); 152 167 153 store(dv, 0, 0x1234, false);168 store(dv, 0, adjustForEndianessUint16(0x1234), false); 154 169 assert(arr[0] === 0x3412); 155 170 156 store(dv, 0, 0x0102, false);171 store(dv, 0, adjustForEndianessUint16(0x0102), false); 157 172 assert(arr[0] === 0x0201); 158 173 159 store(dv, 0, -1, false);174 store(dv, 0, adjustForEndianessUint16(-1), false); 160 175 assert(arr[0] === 0xffff); 161 176 162 store(dv, 0, -2, false);177 store(dv, 0, adjustForEndianessUint16(-2), false); 163 178 assert(arr[0] === 0xfeff); 164 179 165 storeBigEndian(dv, 0, -1);180 storeBigEndian(dv, 0, adjustForEndianessUint16(-1)); 166 181 assert(arr[0] === 0xffff); 167 182 168 storeBigEndian(dv, 0, -2);183 storeBigEndian(dv, 0, adjustForEndianessUint16(-2)); 169 184 assert(arr[0] === 0xfeff); 170 185 171 storeBigEndian(dv, 0, -2147483648);186 storeBigEndian(dv, 0, adjustForEndianessUint16(-2147483648)); 172 187 assert(arr[0] === 0x0000); 173 188 174 storeLittleEndian(dv, 0, -2147483648);189 storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147483648)); 175 190 assert(arr[0] === 0x0000); 176 191 177 storeLittleEndian(dv, 0, -2147478988);192 storeLittleEndian(dv, 0, adjustForEndianessUint16(-2147478988)); 178 193 assert(arr[0] === 0x1234); 179 194 180 storeBigEndian(dv, 0, -2147478988);195 storeBigEndian(dv, 0, adjustForEndianessUint16(-2147478988)); 181 196 assert(arr[0] === 0x3412); 182 197 } 183 198 } 184 199 test2(); 200 201 function adjustForEndianessUint32(value) { 202 if (isLittleEndian) 203 return value; 204 205 let ab = new ArrayBuffer(4); 206 let ta = new Uint32Array(ab); 207 ta[0] = value; 208 let dv = new DataView(ab); 209 return dv.getUint32(0, true); 210 } 185 211 186 212 function test3() { … … 206 232 207 233 for (let i = 0; i < 10000; ++i) { 208 storeLittleEndian(dv, 0, 0xffffffff);234 storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffffffff)); 209 235 assert(arr[0] === 0xffffffff); 210 236 assert(arr2[0] === -1); 211 237 212 storeLittleEndian(dv, 0, 0xffaabbcc);238 storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc)); 213 239 assert(arr[0] === 0xffaabbcc); 214 240 215 storeBigEndian(dv, 0, 0x12345678);241 storeBigEndian(dv, 0, adjustForEndianessUint32(0x12345678)); 216 242 assert(arr[0] === 0x78563412); 217 243 218 storeBigEndian(dv, 0, 0xffaabbcc);244 storeBigEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc)); 219 245 assert(arr[0] === 0xccbbaaff); 220 246 221 store(dv, 0, 0xfaeadaca, false);247 store(dv, 0, adjustForEndianessUint32(0xfaeadaca), false); 222 248 assert(arr[0] === 0xcadaeafa); 223 249 224 store(dv, 0, 0xcadaeafa, false);250 store(dv, 0, adjustForEndianessUint32(0xcadaeafa), false); 225 251 assert(arr2[0] === -85271862); 226 252 227 store(dv, 0, 0x12345678, false);253 store(dv, 0, adjustForEndianessUint32(0x12345678), false); 228 254 assert(arr[0] === 0x78563412); 229 255 230 storeBigEndian(dv, 0, 0xbeeffeeb);256 storeBigEndian(dv, 0, adjustForEndianessUint32(0xbeeffeeb)); 231 257 assert(arr2[0] === -335614018); 232 258 } … … 256 282 257 283 for (let i = 0; i < 10000; ++i) { 258 storeLittleEndian(dv, 0, 0xffffffff);284 storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffffffff)); 259 285 assert(arr[0] === 0xffffffff); 260 286 assert(arr2[0] === -1); 261 287 262 storeLittleEndian(dv, 0, 0xffaabbcc);288 storeLittleEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc)); 263 289 assert(arr[0] === 0xffaabbcc); 264 290 265 storeBigEndian(dv, 0, 0x12345678);291 storeBigEndian(dv, 0, adjustForEndianessUint32(0x12345678)); 266 292 assert(arr[0] === 0x78563412); 267 293 268 storeBigEndian(dv, 0, 0xffaabbcc);294 storeBigEndian(dv, 0, adjustForEndianessUint32(0xffaabbcc)); 269 295 assert(arr[0] === 0xccbbaaff); 270 296 271 store(dv, 0, 0xfaeadaca, false);297 store(dv, 0, adjustForEndianessUint32(0xfaeadaca), false); 272 298 assert(arr[0] === 0xcadaeafa); 273 299 274 store(dv, 0, 0xcadaeafa, false);300 store(dv, 0, adjustForEndianessUint32(0xcadaeafa), false); 275 301 assert(arr2[0] === -85271862); 276 302 277 store(dv, 0, 0x12345678, false);303 store(dv, 0, adjustForEndianessUint32(0x12345678), false); 278 304 assert(arr[0] === 0x78563412); 279 305 280 storeBigEndian(dv, 0, 0xbeeffeeb);306 storeBigEndian(dv, 0, adjustForEndianessUint32(0xbeeffeeb)); 281 307 assert(arr2[0] === -335614018); 282 308 } 283 309 } 284 310 test4(); 311 312 function adjustForEndianessFloat32(value) { 313 if (isLittleEndian) 314 return value; 315 316 let ab = new ArrayBuffer(4); 317 let ta = new Float32Array(ab); 318 ta[0] = value; 319 let dv = new DataView(ab); 320 return dv.getFloat32(0, true); 321 } 285 322 286 323 function test5() { … … 306 343 307 344 for (let i = 0; i < 10000; ++i) { 308 storeLittleEndian(dv, 0, 1.5);345 storeLittleEndian(dv, 0, adjustForEndianessFloat32(1.5)); 309 346 assert(arr[0] === 1.5); 310 347 311 storeLittleEndian(dv, 0, 12912.124123215122); 348 store(dv, 0, 12912.124123215122, isLittleEndian); 349 assert(bits[0] === 0x4649c07f); 312 350 assert(arr[0] === 12912.1240234375); 313 assert(bits[0] === 0x4649c07f); 314 315 storeLittleEndian(dv, 0, NaN); 351 352 storeLittleEndian(dv, 0, adjustForEndianessFloat32(NaN)); 316 353 assert(isNaN(arr[0])); 317 354 318 storeLittleEndian(dv, 0, 2.3879393e-38);355 storeLittleEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38)); 319 356 assert(arr[0] === 2.387939260590663e-38); 320 357 assert(bits[0] === 0x01020304); 321 358 322 storeBigEndian(dv, 0, 2.3879393e-38);359 storeBigEndian(dv, 0, adjustForEndianessFloat32(2.3879393e-38)); 323 360 assert(arr[0] === 1.539989614439558e-36); 324 361 assert(bits[0] === 0x04030201); … … 327 364 test5(); 328 365 366 function adjustForEndianessFloat64(value) { 367 if (isLittleEndian) 368 return value; 369 370 let ab = new ArrayBuffer(8); 371 let ta = new Float64Array(ab); 372 ta[0] = value; 373 let dv = new DataView(ab); 374 return dv.getFloat64(0, true); 375 } 376 329 377 function test6() { 330 378 function storeLittleEndian(dv, index, value) { … … 348 396 349 397 for (let i = 0; i < 10000; ++i) { 350 storeLittleEndian(dv, 0, NaN);398 storeLittleEndian(dv, 0, adjustForEndianessFloat64(NaN)); 351 399 assert(isNaN(arr[0])); 352 400 353 storeLittleEndian(dv, 0, -2.5075187084135162e+284);401 storeLittleEndian(dv, 0, adjustForEndianessFloat64(-2.5075187084135162e+284)); 354 402 assert(arr[0] === -2.5075187084135162e+284); 355 403 assert(readHex(dv, 8) === "0xfafafafafafafafa"); 356 404 357 store(dv, 0, 124.553, true);405 store(dv, 0, adjustForEndianessFloat64(124.553), true); 358 406 assert(readHex(dv, 8) === "0x405f23645a1cac08"); 359 407 360 store(dv, 0, Infinity, true);408 store(dv, 0, adjustForEndianessFloat64(Infinity), true); 361 409 assert(readHex(dv, 8) === "0x7ff0000000000000"); 362 410 363 store(dv, 0, Infinity, false);411 store(dv, 0, adjustForEndianessFloat64(Infinity), false); 364 412 assert(readHex(dv, 8) === "0x000000000000f07f"); 365 413 366 store(dv, 0, -Infinity, true);414 store(dv, 0, adjustForEndianessFloat64(-Infinity), true); 367 415 assert(readHex(dv, 8) === "0xfff0000000000000"); 368 416 369 storeBigEndian(dv, 0, -2.5075187084135162e+284);417 storeBigEndian(dv, 0, adjustForEndianessFloat64(-2.5075187084135162e+284)); 370 418 assert(arr[0] === -2.5075187084135162e+284); 371 419 assert(readHex(dv, 8) === "0xfafafafafafafafa"); 372 420 373 storeBigEndian(dv, 0, 124.553);421 storeBigEndian(dv, 0, adjustForEndianessFloat64(124.553)); 374 422 assert(readHex(dv, 8) === "0x08ac1c5a64235f40"); 375 423 }
Note: See TracChangeset
for help on using the changeset viewer.