put_by_val_direct need to check the property is index or not for using putDirect...
[WebKit-https.git] / LayoutTests / js / script-tests / dfg-put-by-val-direct-with-edge-numbers.js
1 description(
2 "Test that a object accepts DFG PutByValueDirect operation with edge numbers."
3 );
4
5 function lookupWithKey(key) {
6     var object = {
7         [key]: 42
8     };
9     return object[key];
10 }
11
12 [
13     // integers
14     '-0x80000001',  // out of int32_t
15     '-0x80000000',  // int32_t min
16     '-1',           // negative
17     '0',            // zero
18     '1',            // positive
19     '0x7fffffff',   // int32_t max
20     '0x80000000',   // out of int32_t
21     '0xfffffffd',   // less than array max in JSObject
22     '0xfffffffe',   // array max in JSObject
23     '0xffffffff',   // uint32_t max, PropertyName::NotAnIndex
24     '0x100000000',  // out of uint32_t
25
26     // stringified integers
27     '"' + (-0x80000001).toString() + '"',  // out of int32_t
28     '"' + (-0x80000000).toString() + '"',  // int32_t min
29     '"' + (-1).toString() + '"',           // negative
30     '"' + (0).toString() + '"',            // zero
31     '"' + (1).toString() + '"',            // positive
32     '"' + (0x7fffffff).toString() + '"',   // int32_t max
33     '"' + (0x80000000).toString() + '"',   // out of int32_t
34     '"' + (0xfffffffd).toString() + '"',   // less than array max in JSObject
35     '"' + (0xfffffffe).toString() + '"',   // array max in JSObject
36     '"' + (0xffffffff).toString() + '"',   // uint32_t max).toString() PropertyName::NotAnIndex
37     '"' + (0x100000000).toString() + '"',  // out of uint32_t
38
39     // doubles
40     'Number.MIN_VALUE',
41     'Number.MAX_VALUE',
42     'Number.MIN_SAFE_INTEGER',
43     'Number.MAX_SAFE_INTEGER',
44     'Number.POSITIVE_INFINITY',
45     'Number.NEGATIVE_INFINITY',
46     'Number.NaN',
47     'Number.EPSILON',
48     '+0.0',
49     '-0.0',
50     '0.1',
51     '-0.1',
52     '4.2',
53     '-4.2',
54
55     // stringified doules
56     '"' + (Number.MIN_VALUE).toString() + '"',
57     '"' + (Number.MAX_VALUE).toString() + '"',
58     '"' + (Number.MIN_SAFE_INTEGER).toString() + '"',
59     '"' + (Number.MAX_SAFE_INTEGER).toString() + '"',
60     '"' + (Number.POSITIVE_INFINITY).toString() + '"',
61     '"' + (Number.NEGATIVE_INFINITY).toString() + '"',
62     '"NaN"',
63     '"' + (Number.EPSILON).toString() + '"',
64     '"+0.0"',
65     '"-0.0"',
66     '"0.1"',
67     '"-0.1"',
68     '"4.2"',
69     '"-4.2"',
70 ].forEach(function (key) {
71     dfgShouldBe(lookupWithKey, "lookupWithKey("+ key + ")", "42");
72 });
73
74 function dfgShouldThrow(theFunction, _a, _e)
75 {
76   if (typeof theFunction != "function" || typeof _a != "string" || typeof _e != "string")
77     debug("WARN: dfgShouldThrow() expects a function and two strings");
78   noInline(theFunction);
79   var values = [], _av = undefined, notThrow = false;
80
81   // Defend against tests that muck with numeric properties on array.prototype.
82   values.__proto__ = null;
83   values.push = Array.prototype.push;
84
85   while (!dfgCompiled({f:theFunction})) {
86     try {
87         _av = eval(_a);
88         notThrow = true;
89     } catch (exception) {
90         values.push(exception);
91     }
92   }
93   try {
94     _av = eval(_a);
95     notThrow = true;
96   } catch (exception) {
97     values.push(exception);
98   }
99
100   var _ev = eval(_e);
101   if (notThrow) {
102     if (typeof _av == "undefined")
103       testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined.");
104     else
105       testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + ".");
106   } else {
107     var allPassed = true;
108     for (var i = 0; i < values.length; ++i) {
109       var _av = values[i];
110       if (typeof _e == "undefined" || _av == _ev)
111         continue;
112       testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + _av + ".");
113       allPassed = false;
114     }
115     if (allPassed)
116       testPassed(_a + " threw exception " + _e + " on all iterations including after DFG tier-up.");
117   }
118
119   return values.length;
120 }
121
122 function lookupWithKey2(key) {
123     var object = {
124         [key]: 42
125     };
126     return object[key];
127 }
128
129 var toStringThrowsError = {
130     toString: function () {
131         throw new Error('ng');
132     }
133 };
134 dfgShouldThrow(lookupWithKey2, "lookupWithKey2(toStringThrowsError)", "'Error: ng'");