[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / dataview-jit-set-nan.js
1 //@ skip if $architecture == "mips"
2
3 "use strict";
4
5 function assert(b) {
6     if (!b)
7         throw new Error;
8 }
9
10 function test() {
11     function storeLittleEndian(dv, index, value) {
12         dv.setFloat32(index, value, true);
13     }
14     noInline(storeLittleEndian);
15
16     function storeBigEndian(dv, index, value) {
17         dv.setFloat32(index, value, false);
18     }
19     noInline(storeBigEndian);
20
21     function store(dv, index, value, littleEndian) {
22         dv.setFloat32(index, value, littleEndian);
23     }
24     noInline(store);
25
26     let buffer = new ArrayBuffer(4);
27     let arr = new Float32Array(buffer);
28     let bits = new Uint32Array(buffer);
29     let dv = new DataView(buffer);
30
31     for (let i = 0; i < 10000; ++i) {
32         storeLittleEndian(dv, 0, 1.5);
33         assert(arr[0] === 1.5);
34
35         storeLittleEndian(dv, 0, 12912.124123215122);
36         assert(arr[0] === 12912.1240234375);
37         assert(bits[0] === 0x4649c07f);
38
39         storeLittleEndian(dv, 0, NaN);
40         assert(isNaN(arr[0]));
41         assert(bits[0] === 0x7FC00000);
42
43         storeLittleEndian(dv, 0, 2.3879393e-38);
44         assert(arr[0] === 2.387939260590663e-38);
45         assert(bits[0] === 0x01020304);
46
47         storeBigEndian(dv, 0, 2.3879393e-38);
48         assert(arr[0] === 1.539989614439558e-36);
49         assert(bits[0] === 0x04030201);
50     }
51 }
52 test();