1a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Copyright 2008 the V8 project authors. All rights reserved. 2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without 3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met: 5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions of source code must retain the above copyright 7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// notice, this list of conditions and the following disclaimer. 8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions in binary form must reproduce the above 9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// copyright notice, this list of conditions and the following 10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// disclaimer in the documentation and/or other materials provided 11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// with the distribution. 12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Neither the name of Google Inc. nor the names of its 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// contributors may be used to endorse or promote products derived 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// from this software without specific prior written permission. 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --allow-natives-syntax 293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f0() { 31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (0) { 32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // switch deliberately left empty 33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockf0(); // no errors 37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f1(x) { 39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (x) { 40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: return "f1"; 41a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return "foo"; 43a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 45a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("f1", f1(0), "default-switch.0"); 46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("f1", f1(1), "default-switch.1"); 47a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 48a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f2(x) { 49a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var r; 50a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (x) { 51a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: 52a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "zero"; 53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 54a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 1: 55a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "one"; 56a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 57a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: 58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "two"; 59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 60a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 3: 61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "three"; 62a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 64a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "default"; 65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 66a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return r; 67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("zero", f2(0), "0-1-switch.0"); 70a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("one", f2(1), "0-1-switch.1"); 71a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(7), "0-1-switch.2"); 72a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(-1), "0-1-switch.-1"); 73a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(NaN), "0-1-switch.NaN"); 74a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(Math.pow(2,34)), "0-1-switch.largeNum"); 75a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2("0"), "0-1-switch.string"); 76a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(false), "0-1-switch.bool"); 77a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(null), "0-1-switch.null"); 78a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(undefined), "0-1-switch.undef"); 79a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(new Number(2)), "0-1-switch.undef"); 80a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2({valueOf: function(){return 2; }}), "0-1-switch.obj"); 81a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 82a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 83a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f3(x, c) { 84a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var r = 0; 85a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (x) { 86a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 87a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "default"; 88a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 89a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case c: 90a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "value is c = " + c; 91a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 92a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: 93a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "two"; 94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -5: 96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "minus 5"; 97a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 98a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 9: 99a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "nine"; 100a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 102a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return r; 103a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 104a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 105a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("two", f3(2,0), "value-switch.2-0"); 106a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("minus 5", f3(-5,0), "value-switch.-5-0"); 107a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("nine", f3(9,0), "value-switch.9-0"); 108a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("value is c = 0", f3(0,0), "value-switch.0-0"); 109a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("value is c = 2", f3(2,2), "value-switch.2-2"); 110a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f3(7,0), "value-switch.7-0"); 111a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 112a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 113a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f4(x) { 114a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch(x) { 115a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: 116a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block x++; 117a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 118a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block x++; 119a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: 120a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block x++; 121a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 122a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return x; 123a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 124a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 125a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 126a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(3, f4(0), "fallthrough-switch.0"); 127a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(3, f4(1), "fallthrough-switch.1"); 128a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(3, f4(2), "fallthrough-switch.2"); 129a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(5, f4(3), "fallthrough-switch.3"); 130a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction f4_string(tag, x) { 1323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch switch(tag) { 1333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case 'zero': 1343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x++; 1353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case 'two': 1363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch x++; 1373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return x; 1393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 1403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Symbols 1423ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(2, f4_string('zero', 0), "fallthrough-string-switch.0"); 1433ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(1, f4_string('one', 1), "fallthrough-string-switch.1"); 1443ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(3, f4_string('two', 2), "fallthrough-string-switch.2"); 1453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Strings 1473ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(2, f4_string('_zero'.slice(1), 0), "fallthrough-string-switch.3"); 1483ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(1, f4_string('_one'.slice(1), 1), "fallthrough-string-switch.4"); 1493ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(3, f4_string('_two'.slice(1), 2), "fallthrough-string-switch.5"); 1503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Oddball 1523ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(3, f4_string(null, 3), "fallthrough-string-switch.6"); 1533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Test for regression 1553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction regress_string(value) { 1563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var json = 1; 1573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch switch (typeof value) { 1583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case 'object': 1593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 1603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch default: 1623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 1643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return json; 1653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 1663ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(1, regress_string('object'), 'regression-string'); 167a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 168a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f5(x) { 169a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch(x) { 170a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -2: return true; 171a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -1: return false; 172a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: return true; 173a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: return false; 174a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: return 42; 175a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 176a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 177a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 178a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertTrue(f5(-2), "negcase.-2"); 179a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertFalse(f5(-1), "negcase.-1"); 180a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertTrue(f5(0), "negcase.-0"); 181a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(42, f5(1), "negcase.1"); 182a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertFalse(f5(2), "negcase.2"); 183a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 184a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f6(N) { 185a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // long enough case that code buffer grows during code-generation 186a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var res = 0; 187a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for(var i = 0; i < N; i++) { 188a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch(i & 0x3f) { 189a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: res += 0; break; 190a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 1: res += 1; break; 191a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: res += 2; break; 192a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 3: res += 3; break; 193a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 4: res += 4; break; 194a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 5: res += 5; break; 195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 6: res += 6; break; 196a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 7: res += 7; break; 197a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 8: res += 8; break; 198a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 9: res += 9; break; 199a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 10: res += 10; break; 200a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 11: res += 11; break; 201a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 12: res += 12; break; 202a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 13: res += 13; break; 203a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 14: res += 14; break; 204a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 15: res += 15; break; 205a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 16: res += 16; break; 206a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 17: res += 17; break; 207a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 18: res += 18; break; 208a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 19: res += 19; break; 209a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 20: res += 20; break; 210a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 21: res += 21; break; 211a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 22: res += 22; break; 212a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 23: res += 23; break; 213a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 24: res += 24; break; 214a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 25: res += 25; break; 215a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 26: res += 26; break; 216a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 27: res += 27; break; 217a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 28: res += 28; break; 218a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 29: res += 29; break; 219a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 30: res += 30; break; 220a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 31: res += 31; break; 221a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 32: res += 32; break; 222a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 33: res += 33; break; 223a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 34: res += 34; break; 224a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 35: res += 35; break; 225a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 36: res += 36; break; 226a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 37: res += 37; break; 227a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 38: res += 38; break; 228a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 39: res += 39; break; 229a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 40: res += 40; break; 230a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 41: res += 41; break; 231a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 42: res += 42; break; 232a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 43: res += 43; break; 233a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 44: res += 44; break; 234a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 45: res += 45; break; 235a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 46: res += 46; break; 236a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 47: res += 47; break; 237a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 48: res += 48; break; 238a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 49: res += 49; break; 239a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 50: res += 50; break; 240a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 51: res += 51; break; 241a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 52: res += 52; break; 242a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 53: res += 53; break; 243a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 54: res += 54; break; 244a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 55: res += 55; break; 245a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 56: res += 56; break; 246a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 57: res += 57; break; 247a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 58: res += 58; break; 248a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 59: res += 59; break; 249a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 60: res += 60; break; 250a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 61: res += 61; break; 251a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 62: res += 62; break; 252a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 63: res += 63; break; 253a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 64: break; 254a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: break; 255a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 256a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 257a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return res; 258a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 259a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 260a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(190, f6(20), "largeSwitch.20"); 261a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(2016, f6(64), "largeSwitch.64"); 262a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(4032, f6(128), "largeSwitch.128"); 263a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(4222, f6(148), "largeSwitch.148"); 264a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 265a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 266a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f7(value) { 267a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 268a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: return "0"; 269a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0: return "-0"; 270a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 1: case 2: case 3: case 4: // Dummy fillers. 271a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 272a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 273a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3fffffff: return "MaxSmi"; 274a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffe: 275a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffd: 276a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffc: 277a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffb: 278a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffa: // Dummy fillers 279a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 280a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 281a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x40000000: return "MinSmi"; 282a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3fffffff: 283a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffe: 284a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffd: 285a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffc: 286a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffb: // Dummy fillers 287a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 288a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 289a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 10: return "A"; 290a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 11: 291a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 12: 292a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 13: 293a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 14: 294a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 15: // Dummy fillers 295a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 296a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return "default"; 297a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 298a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 299a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 300a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f7(0.1), "0-1-switch.double-0.1"); 301a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("0", f7(-0), "0-1-switch.double-neg0"); 302a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("MaxSmi", f7((1<<30)-1), "0-1-switch.maxsmi"); 303a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("MinSmi", f7(-(1<<30)), "0-1-switch.minsmi"); 304a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f7(1<<30), "0-1-switch.maxsmi++"); 305a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f7(-(1<<30)-1), "0-1-switch.minsmi--"); 306a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("A", f7((170/16)-(170%16/16)), "0-1-switch.heapnum"); 307a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 308a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 309a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction makeVeryLong(length) { 310a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var res = "(function () {\n" + 311a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " var res = 0;\n" + 312a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " for (var i = 0; i <= " + length + "; i++) {\n" + 313a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " switch(i) {\n"; 314a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (var i = 0; i < length; i++) { 315a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block res += " case " + i + ": res += 2; break;\n"; 316a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 317a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block res += " default: res += 1;\n" + 318a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " }\n" + 319a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " }\n" + 320a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " return res;\n" + 321a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "})"; 322a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return eval(res); 323a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 324a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar verylong_size = 1000; 325a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar verylong = makeVeryLong(verylong_size); 326a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 327a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(verylong_size * 2 + 1, verylong()); 3283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 3303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Test suite below aims to cover all possible combinations of following: 3313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 3323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// clauses | tags | type feedback | optimization 3333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// ========================================================= 3343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// strings | symbol | all | on 3353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// smis | string | target | off 3363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// mixed | oddball | non-target | 3373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// | smis | none | 3383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// | heapnum | | 3393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// ========================================================= 3403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Function-with-switch generator 3423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar test_id = 0, 3433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch clause_values = { 3443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch string: ['abc', 'def', 'ghi', 'jkl'], 3453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch smi: [1, 2, 3, 4], 3463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch mixed: ['abc', 1, 'def', 2, 'ghi', 3, 'jkl', 4] 3473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 3483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction switch_gen(clause_type, feedback, optimize) { 3503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var values = clause_values[clause_type]; 3513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function opt(fn) { 3533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (feedback === 'all') { 3543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch values.forEach(fn); 3553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else if (Array.isArray(feedback)) { 3563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Non-target 3573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch values.filter(function(v) { 3583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return feedback.indexOf(v) === -1; 3593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }).forEach(fn); 3603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else if (feedback !== undefined) { 3613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Target 3623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fn(feedback); 3633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else { 3643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // None 3653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 3663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (optimize) %OptimizeFunctionOnNextCall(fn); 3683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return fn; 3703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 3713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return opt(new Function( 3733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 'tag', 3743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch '"' + (test_id++) + '";' + 3753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 'switch(tag) {' + 3763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch values.map(function(value) { 3773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return 'case ' + JSON.stringify(value) + ': return' + 3783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSON.stringify('ok-' + value); 3793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }).join(';') + 3803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch '}' 3813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch )); 3823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 3833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test_switch(clause_type, test_type, feedback, optimize) { 3853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var pairs = [], 3863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch fn = switch_gen(clause_type, feedback, optimize); 3873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (Array.isArray(test_type)) { 3893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch pairs = test_type.map(function(v) { 3903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return { 3913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch value: v, 3923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch expected: 'ok-' + v 3933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 3943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 3953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else if (test_type === 'symbols') { 3963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch pairs = clause_values.string.map(function(v) { 3973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return { 3983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch value: v, 3993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch expected: clause_type !== 'smi' ? 'ok-' + v : undefined 4003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 4013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 4023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else if (test_type === 'strings') { 4033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch pairs = clause_values.string.map(function(v) { 4043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return { 4053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch value: ('%%' + v).slice(2), 4063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch expected: clause_type !== 'smi' ? 'ok-' + v : undefined 4073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 4083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 4093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else if (test_type === 'oddball') { 4103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch pairs = [ 4113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch { value: null, expected: undefined }, 4123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch { value: NaN, expected: undefined }, 4133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch { value: undefined, expected: undefined } 4143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ]; 4153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else if (test_type === 'smi') { 4163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch pairs = clause_values.smi.map(function(v) { 4173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return { 4183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch value: v, 4193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch expected: clause_type !== 'string' ? 'ok-' + v : undefined 4203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 4213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 4223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } else if (test_type === 'heapnum') { 4233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch pairs = clause_values.smi.map(function(v) { 4243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return { 4253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch value: ((v * 17)/16) - ((v*17)%16/16), 4263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch expected: clause_type !== 'string' ? 'ok-' + v : undefined 4273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 4283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 4293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch pairs.forEach(function(pair) { 4323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch assertEquals(fn(pair.value), pair.expected); 4333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 4343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 4353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// test_switch(clause_type, test_type, feedback, optimize); 4373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction test_switches(opt) { 4393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var test_types = ['symbols', 'strings', 'oddball', 'smi', 'heapnum']; 4403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch function test(clause_type) { 4423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var values = clause_values[clause_type]; 4433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test_types.forEach(function(test_type) { 4453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test_switch(clause_type, test_type, 'all', opt); 4463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test_switch(clause_type, test_type, 'none', opt); 4473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Targeting specific clause feedback 4493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch values.forEach(function(value) { 4503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test_switch(clause_type, test_type, [value], value, opt); 4513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test_switch(clause_type, test_type, value, value, opt); 4523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 4533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 4543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }; 4553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test('string'); 4573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test('smi'); 4583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test('mixed'); 4593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}; 4603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_switches(false); 4623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest_switches(true); 463