13af6ab5fSopenharmony_ci/*
23af6ab5fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License.
53af6ab5fSopenharmony_ci * You may obtain a copy of the License at
63af6ab5fSopenharmony_ci *
73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
83af6ab5fSopenharmony_ci *
93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and
133af6ab5fSopenharmony_ci * limitations under the License.
143af6ab5fSopenharmony_ci */
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_cifunction foo(x: int): string
173af6ab5fSopenharmony_ci{
183af6ab5fSopenharmony_ci  let rc: string|undefined = "default";
193af6ab5fSopenharmony_ci
203af6ab5fSopenharmony_ci  label1: switch(x) {
213af6ab5fSopenharmony_ci    case 0: 
223af6ab5fSopenharmony_ci       rc = "case 0";
233af6ab5fSopenharmony_ci    case 1: {
243af6ab5fSopenharmony_ci       let rc1: string|undefined = ():string => {return "case 1";}();
253af6ab5fSopenharmony_ci       label2: switch(rc) {
263af6ab5fSopenharmony_ci          case "default":
273af6ab5fSopenharmony_ci             rc = undefined;
283af6ab5fSopenharmony_ci             break label2;
293af6ab5fSopenharmony_ci          default:
303af6ab5fSopenharmony_ci             break label1;
313af6ab5fSopenharmony_ci       }
323af6ab5fSopenharmony_ci       rc = rc1;
333af6ab5fSopenharmony_ci       break;
343af6ab5fSopenharmony_ci    }
353af6ab5fSopenharmony_ci    case 2: 
363af6ab5fSopenharmony_ci       rc = undefined; 
373af6ab5fSopenharmony_ci       let rc2: string|null = ():string => {return "case 2";}();
383af6ab5fSopenharmony_ci       return rc2; 
393af6ab5fSopenharmony_ci    case 3: 
403af6ab5fSopenharmony_ci       rc = "case 3";
413af6ab5fSopenharmony_ci       break; 
423af6ab5fSopenharmony_ci    case 4:
433af6ab5fSopenharmony_ci       rc = undefined;
443af6ab5fSopenharmony_ci    default:
453af6ab5fSopenharmony_ci       return rc != null ? rc :"case 4"
463af6ab5fSopenharmony_ci    case 5:
473af6ab5fSopenharmony_ci       rc = "case 5";
483af6ab5fSopenharmony_ci  }
493af6ab5fSopenharmony_ci
503af6ab5fSopenharmony_ci  return rc;
513af6ab5fSopenharmony_ci}
523af6ab5fSopenharmony_ci
533af6ab5fSopenharmony_ci
543af6ab5fSopenharmony_cifunction main(): void {
553af6ab5fSopenharmony_ci  assert(foo(0) == "case 0");
563af6ab5fSopenharmony_ci  assert(foo(1) == "case 1");
573af6ab5fSopenharmony_ci  assert(foo(2) == "case 2");
583af6ab5fSopenharmony_ci  assert(foo(3) == "case 3");
593af6ab5fSopenharmony_ci  assert(foo(4) == "case 4");
603af6ab5fSopenharmony_ci  assert(foo(5) == "case 5");
613af6ab5fSopenharmony_ci  assert(foo(7) == "default");
623af6ab5fSopenharmony_ci}
63