1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/ion/condswitch.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,104 @@ 1.4 +// This test case is made to be run with --ion-eager. 1.5 + 1.6 +function ret2() { 1.7 + return 2; 1.8 +} 1.9 + 1.10 +// Check with default case in the middle. 1.11 +function test0(x) { 1.12 + var res = 0; 1.13 + switch (x) { 1.14 + case (res |= 0x40, 1): // x === 1 1.15 + res |= 0x1; 1.16 + default: // otherwise 1.17 + res |= 0x2; 1.18 + case (res |= 0x80, ret2()): // x === 2 1.19 + res |= 0x4; 1.20 + case (res |= 0x100, 1 + ret2()): // x === 3 1.21 + res |= 0x8; 1.22 + break; 1.23 + case (res |= 0x200, 0): // x === 0 1.24 + res |= 0x10; 1.25 + } 1.26 + res |= 0x20; 1.27 + return res; 1.28 +} 1.29 + 1.30 +assertEq(test0(0), 0x40 | 0x80 | 0x100 | 0x200 | 0x10 | 0x20); 1.31 +assertEq(test0(1), 0x40 | 0x1 | 0x2 | 0x4 | 0x8 | 0x20); 1.32 +assertEq(test0(2), 0x40 | 0x80 | 0x4 | 0x8 | 0x20); 1.33 +assertEq(test0(3), 0x40 | 0x80 | 0x100 | 0x8 | 0x20); 1.34 +assertEq(test0(4), 0x40 | 0x80 | 0x100 | 0x200 | 0x2 | 0x4 | 0x8 | 0x20); 1.35 + 1.36 +// Check with no default and only one case. 1.37 +function test1(x) { 1.38 + var res = 0; 1.39 + switch (x) { 1.40 + case (res |= 0x1, ret2()): // x === 2 1.41 + res |= 0x2; 1.42 + } 1.43 + res |= 0x4; 1.44 + return res; 1.45 +} 1.46 + 1.47 +assertEq(test1(1), 0x1 | 0x4); // default. 1.48 +assertEq(test1(2), 0x1 | 0x2 | 0x4); // case. 1.49 + 1.50 +// Check with default case identical to a case. 1.51 +function test2(x) { 1.52 + var res = 0; 1.53 + switch (x) { 1.54 + case (res |= 0x1, 0): 1.55 + res |= 0x10; 1.56 + break; 1.57 + default: 1.58 + case (res |= 0x2, 1): 1.59 + res |= 0x20; 1.60 + break; 1.61 + case (res |= 0x4, ret2()): // x === 2 1.62 + res |= 0x40; 1.63 + } 1.64 + res |= 0x100; 1.65 + return res; 1.66 +} 1.67 + 1.68 +assertEq(test2(0), 0x1 | 0x10 | 0x100); 1.69 +assertEq(test2(1), 0x1 | 0x2 | 0x20 | 0x100); 1.70 +assertEq(test2(2), 0x1 | 0x2 | 0x4 | 0x40 | 0x100); 1.71 +assertEq(test2(3), 0x1 | 0x2 | 0x4 | 0x20 | 0x100); 1.72 + 1.73 +// Check a non-break, non-empty default at the end. 1.74 +function test3(x) { 1.75 + var res = 0; 1.76 + switch (x) { 1.77 + case (res |= 0x1, 1): 1.78 + res |= 0x10; 1.79 + case (res |= 0x2, ret2()): // x === 2 1.80 + res |= 0x20; 1.81 + default: 1.82 + res |= 0x40; 1.83 + } 1.84 + res |= 0x100; 1.85 + return res; 1.86 +} 1.87 + 1.88 +assertEq(test3(1), 0x1 | 0x10 | 0x20 | 0x40 | 0x100); 1.89 +assertEq(test3(2), 0x1 | 0x2 | 0x20 | 0x40 | 0x100); 1.90 +assertEq(test3(3), 0x1 | 0x2 | 0x40 | 0x100); 1.91 + 1.92 +// Check cfg in condition of non-last case with no break. (reverse post order failure ?) 1.93 +function test4(x) { 1.94 + var res = 0; 1.95 + switch (x) { 1.96 + case (res |= 0x1, (x ? 1 : 0)): 1.97 + res |= 0x10; 1.98 + case (res |= 0x2, ret2()): // x === 2 1.99 + res |= 0x20; 1.100 + } 1.101 + res |= 0x100; 1.102 + return res; 1.103 +} 1.104 + 1.105 +assertEq(test4(0), 0x1 | 0x10 | 0x20 | 0x100); 1.106 +assertEq(test4(1), 0x1 | 0x10 | 0x20 | 0x100); 1.107 +assertEq(test4(2), 0x1 | 0x2 | 0x20 | 0x100);