| // This file tests the concatenating of known strings with different objects with overridden valueOf functions. |
| // Note: we intentionally do not test Symbols since they cannot be appended to strings... |
| |
| function catNumber(obj) { |
| return "test" + "things" + obj; |
| } |
| noInline(catNumber); |
| |
| number = { valueOf: function() { return 1; } }; |
| |
| function catBool(obj) { |
| return "test" + "things" + obj; |
| } |
| noInline(catBool); |
| |
| bool = { valueOf: function() { return true; } }; |
| |
| function catUndefined(obj) { |
| return "test" + "things" + obj; |
| } |
| noInline(catUndefined); |
| |
| undef = { valueOf: function() { return undefined; } }; |
| |
| function catRandom(obj) { |
| return "test" + "things" + obj; |
| } |
| noInline(catRandom); |
| |
| i = 0; |
| random = { valueOf: function() { |
| switch (i % 3) { |
| case 0: |
| return number.valueOf(); |
| case 1: |
| return bool.valueOf(); |
| case 2: |
| return undef.valueOf(); |
| } |
| } }; |
| |
| for (i = 0; i < 100000; i++) { |
| if (catNumber(number) !== "testthings1") |
| throw "bad number"; |
| if (catBool(bool) !== "testthingstrue") |
| throw "bad bool"; |
| if (catUndefined(undef) !== "testthingsundefined") |
| throw "bad undefined"; |
| if (catRandom(random) !== "testthings" + random.valueOf()) |
| throw "bad random"; |
| } |
| |
| // Try passing new types to each of the other functions. |
| for (i = 0; i < 100000; i++) { |
| if (catUndefined(number) !== "testthings1") |
| throw "bad number"; |
| if (catNumber(bool) !== "testthingstrue") |
| throw "bad bool"; |
| if (catBool(undef) !== "testthingsundefined") |
| throw "bad undefined"; |
| } |