141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// Copyright 2008 the V8 project authors. All rights reserved. 241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// Redistribution and use in source and binary forms, with or without 341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// modification, are permitted provided that the following conditions are 441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// met: 541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// 641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// * Redistributions of source code must retain the above copyright 741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// notice, this list of conditions and the following disclaimer. 841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// * Redistributions in binary form must reproduce the above 941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// copyright notice, this list of conditions and the following 1041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// disclaimer in the documentation and/or other materials provided 1141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// with the distribution. 1241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// * Neither the name of Google Inc. nor the names of its 1341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// contributors may be used to endorse or promote products derived 1441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// from this software without specific prior written permission. 1541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// 1641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 280ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// Flags: --allow-natives-syntax 290ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction f0() { 3141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org switch (0) { 327c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // switch deliberately left empty 3341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 3441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 3541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 3641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgf0(); // no errors 3741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 3841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction f1(x) { 3941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org switch (x) { 4041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org default: return "f1"; 4141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 4241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org return "foo"; 4341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 4441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 4541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("f1", f1(0), "default-switch.0"); 4641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("f1", f1(1), "default-switch.1"); 4741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 4841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction f2(x) { 4941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org var r; 5041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org switch (x) { 5141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 0: 5241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "zero"; 5341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 5441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 1: 5541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "one"; 5641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 5741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 2: 5841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "two"; 5941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 6041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 3: 6141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "three"; 6241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 6341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org default: 6441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "default"; 6541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 6641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org return r; 6741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 6841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 6941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("zero", f2(0), "0-1-switch.0"); 7041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("one", f2(1), "0-1-switch.1"); 7141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(7), "0-1-switch.2"); 7241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(-1), "0-1-switch.-1"); 7341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(NaN), "0-1-switch.NaN"); 7441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(Math.pow(2,34)), "0-1-switch.largeNum"); 7541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2("0"), "0-1-switch.string"); 7641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(false), "0-1-switch.bool"); 7741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(null), "0-1-switch.null"); 7841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(undefined), "0-1-switch.undef"); 7941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2(new Number(2)), "0-1-switch.undef"); 8041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f2({valueOf: function(){return 2; }}), "0-1-switch.obj"); 8141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 8241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 8341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction f3(x, c) { 8441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org var r = 0; 8541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org switch (x) { 8641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org default: 8741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "default"; 8841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 8941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case c: 9041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "value is c = " + c; 9141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 9241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 2: 9341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "two"; 9441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 9541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case -5: 9641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "minus 5"; 9741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 9841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 9: 9941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org r = "nine"; 10041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org break; 10141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 10241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org return r; 10341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 10441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 10541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("two", f3(2,0), "value-switch.2-0"); 10641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("minus 5", f3(-5,0), "value-switch.-5-0"); 10741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("nine", f3(9,0), "value-switch.9-0"); 10841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("value is c = 0", f3(0,0), "value-switch.0-0"); 10941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("value is c = 2", f3(2,2), "value-switch.2-2"); 11041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals("default", f3(7,0), "value-switch.7-0"); 11141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 11241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 11341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction f4(x) { 11441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org switch(x) { 11541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 0: 11641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org x++; 11741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org default: 11841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org x++; 11941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 2: 12041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org x++; 12141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 12241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org return x; 12341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 12441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 12541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 12641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(3, f4(0), "fallthrough-switch.0"); 12741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(3, f4(1), "fallthrough-switch.1"); 12841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(3, f4(2), "fallthrough-switch.2"); 12941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(5, f4(3), "fallthrough-switch.3"); 13041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 1310ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryfunction f4_string(tag, x) { 1320ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry switch(tag) { 1330ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry case 'zero': 1340ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry x++; 1350ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry case 'two': 1360ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry x++; 1370ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } 1380ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return x; 1390ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry} 1400ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1410ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// Symbols 1420ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(2, f4_string('zero', 0), "fallthrough-string-switch.0"); 1430ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(1, f4_string('one', 1), "fallthrough-string-switch.1"); 1440ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(3, f4_string('two', 2), "fallthrough-string-switch.2"); 1450ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1460ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// Strings 1470ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(2, f4_string('_zero'.slice(1), 0), "fallthrough-string-switch.3"); 1480ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(1, f4_string('_one'.slice(1), 1), "fallthrough-string-switch.4"); 1490ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(3, f4_string('_two'.slice(1), 2), "fallthrough-string-switch.5"); 1500ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1510ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// Oddball 1520ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(3, f4_string(null, 3), "fallthrough-string-switch.6"); 1530ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1540ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// Test for regression 1550ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryfunction regress_string(value) { 1560ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry var json = 1; 1570ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry switch (typeof value) { 1580ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry case 'object': 1590ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry break; 1600ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1610ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry default: 1620ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 1630ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } 1640ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return json; 1650ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry}; 1660ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryassertEquals(1, regress_string('object'), 'regression-string'); 16741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 16841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction f5(x) { 16941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org switch(x) { 17041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case -2: return true; 17141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case -1: return false; 17241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 0: return true; 17341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 2: return false; 17441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org default: return 42; 17541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 17641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 17741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 17841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertTrue(f5(-2), "negcase.-2"); 17941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertFalse(f5(-1), "negcase.-1"); 18041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertTrue(f5(0), "negcase.-0"); 18141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(42, f5(1), "negcase.1"); 18241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertFalse(f5(2), "negcase.2"); 18341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 18441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgfunction f6(N) { 18541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org // long enough case that code buffer grows during code-generation 18641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org var res = 0; 18741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org for(var i = 0; i < N; i++) { 18841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org switch(i & 0x3f) { 18941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 0: res += 0; break; 19041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 1: res += 1; break; 19141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 2: res += 2; break; 19241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 3: res += 3; break; 19341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 4: res += 4; break; 19441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 5: res += 5; break; 19541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 6: res += 6; break; 19641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 7: res += 7; break; 19741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 8: res += 8; break; 19841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 9: res += 9; break; 19941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 10: res += 10; break; 20041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 11: res += 11; break; 20141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 12: res += 12; break; 20241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 13: res += 13; break; 20341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 14: res += 14; break; 20441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 15: res += 15; break; 20541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 16: res += 16; break; 20641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 17: res += 17; break; 20741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 18: res += 18; break; 20841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 19: res += 19; break; 20941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 20: res += 20; break; 21041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 21: res += 21; break; 21141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 22: res += 22; break; 21241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 23: res += 23; break; 21341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 24: res += 24; break; 21441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 25: res += 25; break; 21541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 26: res += 26; break; 21641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 27: res += 27; break; 21741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 28: res += 28; break; 21841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 29: res += 29; break; 21941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 30: res += 30; break; 22041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 31: res += 31; break; 22141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 32: res += 32; break; 22241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 33: res += 33; break; 22341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 34: res += 34; break; 22441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 35: res += 35; break; 22541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 36: res += 36; break; 22641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 37: res += 37; break; 22741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 38: res += 38; break; 22841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 39: res += 39; break; 22941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 40: res += 40; break; 23041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 41: res += 41; break; 23141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 42: res += 42; break; 23241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 43: res += 43; break; 23341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 44: res += 44; break; 23441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 45: res += 45; break; 23541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 46: res += 46; break; 23641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 47: res += 47; break; 23741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 48: res += 48; break; 23841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 49: res += 49; break; 23941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 50: res += 50; break; 24041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 51: res += 51; break; 24141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 52: res += 52; break; 24241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 53: res += 53; break; 24341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 54: res += 54; break; 24441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 55: res += 55; break; 24541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 56: res += 56; break; 24641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 57: res += 57; break; 24741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 58: res += 58; break; 24841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 59: res += 59; break; 24941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 60: res += 60; break; 25041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 61: res += 61; break; 25141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 62: res += 62; break; 25241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 63: res += 63; break; 25341044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org case 64: break; 25441044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org default: break; 25541044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 25641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org } 25741044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org return res; 25841044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org} 25941044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org 26041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(190, f6(20), "largeSwitch.20"); 26141044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(2016, f6(64), "largeSwitch.64"); 26241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.orgassertEquals(4032, f6(128), "largeSwitch.128"); 2637be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(4222, f6(148), "largeSwitch.148"); 2647be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 265870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 266870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgfunction f7(value) { 267870a0b67c822d289024711912e2512af01b66c3bager@chromium.org switch (value) { 268870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 0: return "0"; 269870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case -0: return "-0"; 270870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 1: case 2: case 3: case 4: // Dummy fillers. 271870a0b67c822d289024711912e2512af01b66c3bager@chromium.org } 272870a0b67c822d289024711912e2512af01b66c3bager@chromium.org switch (value) { 273870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 0x3fffffff: return "MaxSmi"; 274870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 0x3ffffffe: 275870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 0x3ffffffd: 276870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 0x3ffffffc: 277870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 0x3ffffffb: 278870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 0x3ffffffa: // Dummy fillers 279870a0b67c822d289024711912e2512af01b66c3bager@chromium.org } 280870a0b67c822d289024711912e2512af01b66c3bager@chromium.org switch (value) { 281870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case -0x40000000: return "MinSmi"; 282870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case -0x3fffffff: 283870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case -0x3ffffffe: 284870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case -0x3ffffffd: 285870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case -0x3ffffffc: 286870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case -0x3ffffffb: // Dummy fillers 287870a0b67c822d289024711912e2512af01b66c3bager@chromium.org } 288870a0b67c822d289024711912e2512af01b66c3bager@chromium.org switch (value) { 289870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 10: return "A"; 290870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 11: 291870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 12: 292870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 13: 2937be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org case 14: 294870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case 15: // Dummy fillers 295870a0b67c822d289024711912e2512af01b66c3bager@chromium.org } 296870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return "default"; 297870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 298870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 299870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 300870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgassertEquals("default", f7(0.1), "0-1-switch.double-0.1"); 301870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgassertEquals("0", f7(-0), "0-1-switch.double-neg0"); 302870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgassertEquals("MaxSmi", f7((1<<30)-1), "0-1-switch.maxsmi"); 303870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgassertEquals("MinSmi", f7(-(1<<30)), "0-1-switch.minsmi"); 304870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgassertEquals("default", f7(1<<30), "0-1-switch.maxsmi++"); 305870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgassertEquals("default", f7(-(1<<30)-1), "0-1-switch.minsmi--"); 306870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgassertEquals("A", f7((170/16)-(170%16/16)), "0-1-switch.heapnum"); 307870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 3088bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 3098bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgfunction makeVeryLong(length) { 310c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org var res = "(function () {\n" + 3117be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org " var res = 0;\n" + 3128bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org " for (var i = 0; i <= " + length + "; i++) {\n" + 3138bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org " switch(i) {\n"; 3148bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org for (var i = 0; i < length; i++) { 3158bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org res += " case " + i + ": res += 2; break;\n"; 3168bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org } 3178bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org res += " default: res += 1;\n" + 3188bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org " }\n" + 3198bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org " }\n" + 3208bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org " return res;\n" + 321c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.org "})"; 3228bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return eval(res); 3238bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org} 3248bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgvar verylong_size = 1000; 3258bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgvar verylong = makeVeryLong(verylong_size); 3268bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 3277be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgassertEquals(verylong_size * 2 + 1, verylong()); 3280ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3290ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// 3300ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// Test suite below aims to cover all possible combinations of following: 3310ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// 3320ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// clauses | tags | type feedback | optimization 3330ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// ========================================================= 3340ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// strings | symbol | all | on 3350ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// smis | string | target | off 3360ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// mixed | oddball | non-target | 3370ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// | smis | none | 3380ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// | heapnum | | 3390ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// ========================================================= 3400ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3410ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// Function-with-switch generator 3420ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryvar test_id = 0, 3430ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry clause_values = { 3440ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry string: ['abc', 'def', 'ghi', 'jkl'], 3450ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry smi: [1, 2, 3, 4], 3460ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry mixed: ['abc', 1, 'def', 2, 'ghi', 3, 'jkl', 4] 3470ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 3480ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3490ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryfunction switch_gen(clause_type, feedback, optimize) { 3500ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry var values = clause_values[clause_type]; 3510ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3520ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry function opt(fn) { 3530ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry if (feedback === 'all') { 3540ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry values.forEach(fn); 3550ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else if (Array.isArray(feedback)) { 3560ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry // Non-target 3570ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry values.filter(function(v) { 3580ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return feedback.indexOf(v) === -1; 3590ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }).forEach(fn); 3600ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else if (feedback !== undefined) { 3610ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry // Target 3620ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry fn(feedback); 3630ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else { 3640ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry // None 3650ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } 3660ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3670ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry if (optimize) %OptimizeFunctionOnNextCall(fn); 3680ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3690ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return fn; 3700ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 3710ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3720ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return opt(new Function( 3730ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 'tag', 3740ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry '"' + (test_id++) + '";' + 3750ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 'switch(tag) {' + 3760ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry values.map(function(value) { 3770ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return 'case ' + JSON.stringify(value) + ': return' + 3780ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry JSON.stringify('ok-' + value); 3790ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }).join(';') + 3800ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry '}' 3810ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry )); 3820ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry}; 3830ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3840ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryfunction test_switch(clause_type, test_type, feedback, optimize) { 3850ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry var pairs = [], 3860ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry fn = switch_gen(clause_type, feedback, optimize); 3870ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3880ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry if (Array.isArray(test_type)) { 3890ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry pairs = test_type.map(function(v) { 3900ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return { 3910ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry value: v, 3920ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry expected: 'ok-' + v 3930ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 3940ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 3950ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else if (test_type === 'symbols') { 3960ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry pairs = clause_values.string.map(function(v) { 3970ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return { 3980ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry value: v, 3990ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry expected: clause_type !== 'smi' ? 'ok-' + v : undefined 4000ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 4010ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 4020ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else if (test_type === 'strings') { 4030ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry pairs = clause_values.string.map(function(v) { 4040ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return { 4050ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry value: ('%%' + v).slice(2), 4060ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry expected: clause_type !== 'smi' ? 'ok-' + v : undefined 4070ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 4080ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 4090ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else if (test_type === 'oddball') { 4100ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry pairs = [ 4110ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry { value: null, expected: undefined }, 4120ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry { value: NaN, expected: undefined }, 4130ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry { value: undefined, expected: undefined } 4140ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry ]; 4150ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else if (test_type === 'smi') { 4160ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry pairs = clause_values.smi.map(function(v) { 4170ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return { 4180ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry value: v, 4190ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry expected: clause_type !== 'string' ? 'ok-' + v : undefined 4200ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 4210ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 4220ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } else if (test_type === 'heapnum') { 4230ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry pairs = clause_values.smi.map(function(v) { 4240ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return { 4250ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry value: ((v * 17)/16) - ((v*17)%16/16), 4260ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry expected: clause_type !== 'string' ? 'ok-' + v : undefined 4270ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 4280ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 4290ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry } 4300ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4310ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry pairs.forEach(function(pair) { 4320ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry assertEquals(fn(pair.value), pair.expected); 4330ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 4340ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry}; 4350ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4360ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry// test_switch(clause_type, test_type, feedback, optimize); 4370ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4380ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryfunction test_switches(opt) { 4390ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry var test_types = ['symbols', 'strings', 'oddball', 'smi', 'heapnum']; 4400ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4410ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry function test(clause_type) { 4420ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry var values = clause_values[clause_type]; 4430ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4440ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test_types.forEach(function(test_type) { 4450ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test_switch(clause_type, test_type, 'all', opt); 4460ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test_switch(clause_type, test_type, 'none', opt); 4470ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4480ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry // Targeting specific clause feedback 4490ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry values.forEach(function(value) { 4500ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test_switch(clause_type, test_type, [value], value, opt); 4510ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test_switch(clause_type, test_type, value, value, opt); 4520ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 4530ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }); 4540ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry }; 4550ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4560ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test('string'); 4570ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test('smi'); 4580ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry test('mixed'); 4590ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry}; 4600ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 4610ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorrytest_switches(false); 4620ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorrytest_switches(true); 463