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