[DFG] More ArrayIndexOf fixups for various types
[WebKit.git] / JSTests / stress / array-indexof-arraystorage.js
1 // ArrayIndexOf intrinsic does not support ArrayStorage.
2 // Thus, if ArrayStorage comes, we should not use that intrinsic.
3
4 function shouldBe(actual, expected)
5 {
6     if (actual !== expected)
7         throw new Error('bad value: ' + actual);
8 }
9
10 (function () {
11     function indexOfInt32Other(array, value, index)
12     {
13         return array.indexOf(value, index);
14     }
15     noInline(indexOfInt32Other);
16
17     function indexOfInt32Cell(array, value, index)
18     {
19         return array.indexOf(value, index);
20     }
21     noInline(indexOfInt32Cell);
22
23     function indexOfInt32Boolean(array, value, index)
24     {
25         return array.indexOf(value, index);
26     }
27     noInline(indexOfInt32Boolean);
28
29     function indexOfDoubleOther(array, value, index)
30     {
31         return array.indexOf(value, index);
32     }
33     noInline(indexOfDoubleOther);
34
35     function indexOfDoubleCell(array, value, index)
36     {
37         return array.indexOf(value, index);
38     }
39     noInline(indexOfDoubleCell);
40
41     function indexOfDoubleBoolean(array, value, index)
42     {
43         return array.indexOf(value, index);
44     }
45     noInline(indexOfDoubleBoolean);
46
47     function indexOfInt32(array, value, index)
48     {
49         return array.indexOf(value, index);
50     }
51     noInline(indexOfInt32);
52
53     function indexOfDouble(array, value, index)
54     {
55         return array.indexOf(value, index);
56     }
57     noInline(indexOfDouble);
58
59     var key = {};
60     var int32Array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
61     var doubleArray = [0, 1, 2, 3, 4.2, 5, 6, 7, 8, 9, 10.5, 11, 12];
62
63     ensureArrayStorage(int32Array);
64     ensureArrayStorage(doubleArray);
65
66     for (var i = 0; i < 1e4; ++i) {
67         shouldBe(indexOfInt32Other(int32Array, null, 0), -1);
68         shouldBe(indexOfInt32Other(int32Array, undefined, 0), -1);
69         shouldBe(indexOfInt32Cell(int32Array, key, 0), -1);
70         shouldBe(indexOfInt32Cell(int32Array, Symbol("Cocoa"), 0), -1);
71         shouldBe(indexOfInt32Cell(int32Array, "Cocoa", 0), -1);
72         shouldBe(indexOfInt32Boolean(int32Array, true, 0), -1);
73         shouldBe(indexOfInt32Boolean(int32Array, false, 0), -1);
74         shouldBe(indexOfInt32(int32Array, 12, 0), 12);
75
76         shouldBe(indexOfDoubleOther(doubleArray, null, 0), -1);
77         shouldBe(indexOfDoubleOther(doubleArray, undefined, 0), -1);
78         shouldBe(indexOfDoubleCell(doubleArray, key, 0), -1);
79         shouldBe(indexOfDoubleCell(doubleArray, Symbol("Cocoa"), 0), -1);
80         shouldBe(indexOfDoubleCell(doubleArray, "Cocoa", 0), -1);
81         shouldBe(indexOfDoubleBoolean(doubleArray, true, 0), -1);
82         shouldBe(indexOfDoubleBoolean(doubleArray, false, 0), -1);
83         shouldBe(indexOfDouble(doubleArray, 12, 0), 12);
84     }
85 }());