17f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Copyright 2010 the V8 project authors. All rights reserved. 27f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Redistribution and use in source and binary forms, with or without 37f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// modification, are permitted provided that the following conditions are 47f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// met: 57f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// 67f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// * Redistributions of source code must retain the above copyright 77f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// notice, this list of conditions and the following disclaimer. 87f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// * Redistributions in binary form must reproduce the above 97f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// copyright notice, this list of conditions and the following 107f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// disclaimer in the documentation and/or other materials provided 117f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// with the distribution. 127f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// * Neither the name of Google Inc. nor the names of its 137f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// contributors may be used to endorse or promote products derived 147f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// from this software without specific prior written permission. 157f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// 167f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 287f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// A test for keyed call ICs. 297f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 307f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar toStringName = 'toString'; 317f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar global = this; 327f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 337f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction globalFunction1() { 347f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch return 'function1'; 357f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch} 367f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 377f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction globalFunction2() { 387f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch return 'function2'; 397f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch} 407f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 417f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochassertEquals("[object global]", this[toStringName]()); 427f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochassertEquals("[object global]", global[toStringName]()); 437f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 447f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction testGlobals() { 457f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals("[object global]", this[toStringName]()); 467f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals("[object global]", global[toStringName]()); 477f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch} 487f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 497f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochtestGlobals(); 507f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 517f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 527f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction F() {} 537f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 547f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochF.prototype.one = function() {return 'one'; } 557f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochF.prototype.two = function() {return 'two'; } 567f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochF.prototype.three = function() {return 'three'; } 577f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 587f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar keys = 597f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch ['one', 'one', 'one', 'one', 'two', 'two', 'one', 'three', 'one', 'two']; 607f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 617f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction testKeyTransitions() { 627f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var i, key, result, message; 637f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 647f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var f = new F(); 657f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 667f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch // Custom call generators 677f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var array = []; 687f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 697f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = (i < 8) ? 'push' : 'pop'; 707f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch array[key](i); 717f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 727f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 737f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(6, array.length); 747f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != array.length; i++) { 757f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(i, array[i]); 767f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 777f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 787f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 797f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = (i < 3) ? 'pop' : 'push'; 807f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch array[key](i); 817f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 827f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 837f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(10, array.length); 847f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != array.length; i++) { 857f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(i, array[i]); 867f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 877f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 887f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var string = 'ABCDEFGHIJ'; 897f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 907f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = ((i < 5) ? 'charAt' : 'charCodeAt'); 917f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch result = string[key](i); 927f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch message = '\'' + string + '\'[\'' + key + '\'](' + i + ')'; 937f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i < 5) { 947f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(string.charAt(i), result, message); 957f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } else { 967f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(string.charCodeAt(i), result, message); 977f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 987f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 997f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1007f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1017f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = ((i < 5) ? 'charCodeAt' : 'charAt'); 1027f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch result = string[key](i); 1037f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch message = '\'' + string + '\'[\'' + key + '\'](' + i + ')'; 1047f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i < 5) { 1057f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(string.charCodeAt(i), result, message); 1067f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } else { 1077f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(string.charAt(i), result, message); 1087f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1097f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1107f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1117f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch // Function is a constant property 1127f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'one'; 1137f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1147f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(key, f[key]()); 1157f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { 1167f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'two'; // the name change should case a miss 1177f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1187f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1197f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1207f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch // Function is a fast property 1217f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch f.field = function() { return 'field'; } 1227f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'field'; 1237f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1247f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(key, f[key]()); 1257f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { 1267f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'two'; // the name change should case a miss 1277f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1287f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1297f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1307f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch // Calling on slow case object 1317f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch f.prop = 0; 1327f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch delete f.prop; // force the object to the slow case 1337f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch f.four = function() { return 'four'; } 1347f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch f.five = function() { return 'five'; } 1357f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1367f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'four'; 1377f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1387f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(key, f[key]()); 1397f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { 1407f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'five'; 1417f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1427f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1437f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1447f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch // Calling on global object 1457f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'globalFunction1'; 1467f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var expect = 'function1'; 1477f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1487f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals(expect, global[key]()); 1497f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { 1507f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch key = 'globalFunction2'; 1517f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch expect = 'function2'; 1527f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1537f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1547f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch} 1557f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1567f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochtestKeyTransitions(); 1577f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1587f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction testTypeTransitions() { 1597f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var f = new F(); 1607f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var s = ''; 1617f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var m = 'one'; 1627f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var i; 1637f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1647f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s = ''; 1657f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1667f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { F.prototype.one = function() { return '1'; } } 1677f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s += f[m](); 1687f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1697f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals("oneoneoneoneone11111", s); 1707f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1717f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s = ''; 1727f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1737f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { f.__proto__ = { one: function() { return 'I'; } } } 1747f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s += f[m](); 1757f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1767f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals("11111IIIII", s); 1777f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1787f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s = ''; 1797f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1807f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { f.one = function() { return 'ONE'; } } 1817f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s += f[m](); 1827f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1837f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals("IIIIIONEONEONEONEONE", s); 1847f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1857f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch m = 'toString'; 1867f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1877f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s = ''; 1887f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch var obj = { toString: function() { return '2'; } }; 1897f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1907f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { obj = "TWO"; } 1917f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s += obj[m](); 1927f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 1937f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals("22222TWOTWOTWOTWOTWO", s); 1947f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 1957f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s = ''; 1967f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch obj = { toString: function() { return 'ONE'; } }; 1977f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch m = 'toString'; 1987f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch for (i = 0; i != 10; i++) { 1997f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch if (i == 5) { obj = 1; } 2007f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch s += obj[m](); 2017f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch } 2027f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch assertEquals("ONEONEONEONEONE11111", s); 2037f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch} 2047f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 2057f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochtestTypeTransitions(); 206