blob: e69d60e51cc75348280466800837ef18278ce6f8 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
/*
***************************UNIT TEST FOR SWITCH CASE OPTIMIZATION*****************************
* Empty case statements
*/
/*
***************************************TEST 1*****************************************
* For empty test cases and an object present in the mid of empty test cases
*
*/
function f(x)
{
switch(x)
{
case 1:
WScript.Echo(1);
break;
case 2:
WScript.Echo(2);
break;
case 3:
WScript.Echo(3);
break;
case 4:
WScript.Echo(4);
break;
// empty integer case statements intercepted by an object
case 5:
case 6:
case f: // object case - optimization should break the flow here
case 8:
case 9:
WScript.Echo(9);
break;
case f:
WScript.Echo(10);
break;
case 11:
WScript.Echo(11);
break;
case 12:
WScript.Echo(12);
break;
//Following four case statements are empty case statements with just a single case block
//(optimizer will generate special instructions for such kind)
case 13:
case 14:
case 15:
case 16:
WScript.Echo(16);
break;
case 17:
WScript.Echo(17);
break;
case 18:
WScript.Echo(18);
break;
case 19:
WScript.Echo(19);
break;
case 20:
WScript.Echo(20);
default:
WScript.Echo('default');
break;
}
}
for (i = 1; i < 20; i++) {
f(i);
}
f(100); //default
f(0); //default
/*
*****************************************TEST 2****************************************************
* Test for case statements values in unsorted order
* Set of Empty case statements are placed on the top, middle and at the bottom of the switch statement
*/
function g(x)
{
switch(x)
{
/*empty case statements*/
case 20:
case 19:
case 18:
case 17:
WScript.Echo(17);
break;
case 16:
WScript.Echo(16);
break;
case 15:
WScript.Echo(15);
break;
case 14:
WScript.Echo(14);
break;
case 13:
WScript.Echo(13);
break;
/*empty case statements*/
case 12:
case 11:
case 10:
case 9:
WScript.Echo(9);
break;
case 8:
WScript.Echo(8);
break;
case 7:
WScript.Echo(7);
break;
case 6:
WScript.Echo(6);
break;
/*empty case statements*/
case 5:
case 4:
case 3:
case 2:
case 1:
/* No default statement and no break at the end of the switch */
}
}
g(1);
g(2);
g(3);
g(4);
g(5);
g(6);
g(7);
g(8);
g(9);
g(10);
g(11);
g(12);
g(13);
g(14);
g(15);
g(16);
g(17);
g(18);
g(19);
g(20);
g(100);
g(0);
/*
********************************TEST 3********************************
** All empty case statements
*/
function h(x)
{
switch(x)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
default:
WScript.Echo('default');
break;
}
}
for(i=0;i<=13;i++)
{
h(i);
}
h('hello');
for(i=14;i<=18;i++)
{
h(i);
}