//------------------------------------------------------------------------------------------------------- // 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); }