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 28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f0() { 29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (0) { 30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // switch deliberately left empty 31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockf0(); // no errors 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f1(x) { 37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (x) { 38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: return "f1"; 39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return "foo"; 41a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 43a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("f1", f1(0), "default-switch.0"); 44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("f1", f1(1), "default-switch.1"); 45a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f2(x) { 47a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var r; 48a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (x) { 49a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: 50a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "zero"; 51a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 52a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 1: 53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "one"; 54a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 55a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: 56a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "two"; 57a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 3: 59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "three"; 60a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 62a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "default"; 63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 64a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return r; 65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 66a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("zero", f2(0), "0-1-switch.0"); 68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("one", f2(1), "0-1-switch.1"); 69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(7), "0-1-switch.2"); 70a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(-1), "0-1-switch.-1"); 71a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(NaN), "0-1-switch.NaN"); 72a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(Math.pow(2,34)), "0-1-switch.largeNum"); 73a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2("0"), "0-1-switch.string"); 74a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(false), "0-1-switch.bool"); 75a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(null), "0-1-switch.null"); 76a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(undefined), "0-1-switch.undef"); 77a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2(new Number(2)), "0-1-switch.undef"); 78a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f2({valueOf: function(){return 2; }}), "0-1-switch.obj"); 79a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 80a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 81a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f3(x, c) { 82a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var r = 0; 83a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (x) { 84a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 85a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "default"; 86a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 87a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case c: 88a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "value is c = " + c; 89a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 90a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: 91a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "two"; 92a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 93a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -5: 94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "minus 5"; 95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 9: 97a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block r = "nine"; 98a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 99a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 100a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return r; 101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 102a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 103a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("two", f3(2,0), "value-switch.2-0"); 104a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("minus 5", f3(-5,0), "value-switch.-5-0"); 105a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("nine", f3(9,0), "value-switch.9-0"); 106a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("value is c = 0", f3(0,0), "value-switch.0-0"); 107a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("value is c = 2", f3(2,2), "value-switch.2-2"); 108a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f3(7,0), "value-switch.7-0"); 109a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 110a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 111a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f4(x) { 112a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch(x) { 113a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: 114a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block x++; 115a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 116a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block x++; 117a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: 118a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block x++; 119a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 120a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return x; 121a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 122a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 123a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 124a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(3, f4(0), "fallthrough-switch.0"); 125a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(3, f4(1), "fallthrough-switch.1"); 126a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(3, f4(2), "fallthrough-switch.2"); 127a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(5, f4(3), "fallthrough-switch.3"); 128a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 129a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 130a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f5(x) { 131a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch(x) { 132a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -2: return true; 133a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -1: return false; 134a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: return true; 135a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: return false; 136a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: return 42; 137a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 138a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 139a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 140a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertTrue(f5(-2), "negcase.-2"); 141a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertFalse(f5(-1), "negcase.-1"); 142a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertTrue(f5(0), "negcase.-0"); 143a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(42, f5(1), "negcase.1"); 144a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertFalse(f5(2), "negcase.2"); 145a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 146a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f6(N) { 147a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // long enough case that code buffer grows during code-generation 148a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var res = 0; 149a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for(var i = 0; i < N; i++) { 150a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch(i & 0x3f) { 151a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: res += 0; break; 152a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 1: res += 1; break; 153a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 2: res += 2; break; 154a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 3: res += 3; break; 155a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 4: res += 4; break; 156a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 5: res += 5; break; 157a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 6: res += 6; break; 158a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 7: res += 7; break; 159a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 8: res += 8; break; 160a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 9: res += 9; break; 161a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 10: res += 10; break; 162a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 11: res += 11; break; 163a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 12: res += 12; break; 164a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 13: res += 13; break; 165a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 14: res += 14; break; 166a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 15: res += 15; break; 167a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 16: res += 16; break; 168a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 17: res += 17; break; 169a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 18: res += 18; break; 170a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 19: res += 19; break; 171a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 20: res += 20; break; 172a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 21: res += 21; break; 173a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 22: res += 22; break; 174a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 23: res += 23; break; 175a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 24: res += 24; break; 176a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 25: res += 25; break; 177a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 26: res += 26; break; 178a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 27: res += 27; break; 179a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 28: res += 28; break; 180a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 29: res += 29; break; 181a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 30: res += 30; break; 182a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 31: res += 31; break; 183a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 32: res += 32; break; 184a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 33: res += 33; break; 185a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 34: res += 34; break; 186a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 35: res += 35; break; 187a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 36: res += 36; break; 188a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 37: res += 37; break; 189a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 38: res += 38; break; 190a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 39: res += 39; break; 191a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 40: res += 40; break; 192a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 41: res += 41; break; 193a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 42: res += 42; break; 194a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 43: res += 43; break; 195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 44: res += 44; break; 196a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 45: res += 45; break; 197a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 46: res += 46; break; 198a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 47: res += 47; break; 199a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 48: res += 48; break; 200a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 49: res += 49; break; 201a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 50: res += 50; break; 202a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 51: res += 51; break; 203a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 52: res += 52; break; 204a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 53: res += 53; break; 205a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 54: res += 54; break; 206a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 55: res += 55; break; 207a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 56: res += 56; break; 208a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 57: res += 57; break; 209a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 58: res += 58; break; 210a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 59: res += 59; break; 211a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 60: res += 60; break; 212a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 61: res += 61; break; 213a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 62: res += 62; break; 214a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 63: res += 63; break; 215a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 64: break; 216a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: break; 217a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 218a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 219a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return res; 220a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 221a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 222a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(190, f6(20), "largeSwitch.20"); 223a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(2016, f6(64), "largeSwitch.64"); 224a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(4032, f6(128), "largeSwitch.128"); 225a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(4222, f6(148), "largeSwitch.148"); 226a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 227a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 228a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction f7(value) { 229a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 230a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0: return "0"; 231a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0: return "-0"; 232a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 1: case 2: case 3: case 4: // Dummy fillers. 233a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 234a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 235a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3fffffff: return "MaxSmi"; 236a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffe: 237a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffd: 238a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffc: 239a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffb: 240a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 0x3ffffffa: // Dummy fillers 241a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 242a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 243a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x40000000: return "MinSmi"; 244a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3fffffff: 245a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffe: 246a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffd: 247a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffc: 248a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case -0x3ffffffb: // Dummy fillers 249a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 250a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (value) { 251a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 10: return "A"; 252a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 11: 253a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 12: 254a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 13: 255a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 14: 256a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case 15: // Dummy fillers 257a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 258a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return "default"; 259a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 260a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 261a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 262a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f7(0.1), "0-1-switch.double-0.1"); 263a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("0", f7(-0), "0-1-switch.double-neg0"); 264a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("MaxSmi", f7((1<<30)-1), "0-1-switch.maxsmi"); 265a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("MinSmi", f7(-(1<<30)), "0-1-switch.minsmi"); 266a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f7(1<<30), "0-1-switch.maxsmi++"); 267a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("default", f7(-(1<<30)-1), "0-1-switch.minsmi--"); 268a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals("A", f7((170/16)-(170%16/16)), "0-1-switch.heapnum"); 269a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 270a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 271a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction makeVeryLong(length) { 272a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var res = "(function () {\n" + 273a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " var res = 0;\n" + 274a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " for (var i = 0; i <= " + length + "; i++) {\n" + 275a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " switch(i) {\n"; 276a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (var i = 0; i < length; i++) { 277a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block res += " case " + i + ": res += 2; break;\n"; 278a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 279a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block res += " default: res += 1;\n" + 280a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " }\n" + 281a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " }\n" + 282a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block " return res;\n" + 283a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "})"; 284a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return eval(res); 285a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 286a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar verylong_size = 1000; 287a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvar verylong = makeVeryLong(verylong_size); 288a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 289a7e24c173cf37484693b9abb38e494fa7bd7baebSteve BlockassertEquals(verylong_size * 2 + 1, verylong()); 290