Fix endless OSR exits when creating a rope that contains an object that ToPrimitive...
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / string-rope-with-custom-valueof.js
1 // This file tests the concatenating of known strings with different objects with overridden valueOf functions.
2 // Note: we intentionally do not test Symbols since they cannot be appended to strings...
3
4 function catNumber(obj) {
5     return "test" + "things" + obj;
6 }
7 noInline(catNumber);
8
9 number = { valueOf: function() { return 1; } };
10
11 function catBool(obj) {
12     return "test" + "things" + obj;
13 }
14 noInline(catBool);
15
16 bool = { valueOf: function() { return true; } };
17
18 function catUndefined(obj) {
19     return "test" + "things" + obj;
20 }
21 noInline(catUndefined);
22
23 undef = { valueOf: function() { return undefined; } };
24
25 function catRandom(obj) {
26     return "test" + "things" + obj;
27 }
28 noInline(catRandom);
29
30 i = 0;
31 random = { valueOf: function() {
32     switch (i % 3) {
33     case 0:
34         return number.valueOf();
35     case 1:
36         return bool.valueOf();
37     case 2:
38         return undef.valueOf();
39     }
40 } };
41
42 for (i = 0; i < 100000; i++) {
43     if (catNumber(number) !== "testthings1")
44         throw "bad number";
45     if (catBool(bool) !== "testthingstrue")
46         throw "bad bool";
47     if (catUndefined(undef) !== "testthingsundefined")
48         throw "bad undefined";
49     if (catRandom(random) !== "testthings" + random.valueOf())
50         throw "bad random";
51 }
52
53 // Try passing new types to each of the other functions.
54 for (i = 0; i < 100000; i++) {
55     if (catUndefined(number) !== "testthings1")
56         throw "bad number";
57     if (catNumber(bool) !== "testthingstrue")
58         throw "bad bool";
59     if (catBool(undef) !== "testthingsundefined")
60         throw "bad undefined";
61 }