14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_cideclare function print(arg: any): string;
174514f5e3Sopenharmony_ci
184514f5e3Sopenharmony_cifunction foo() {
194514f5e3Sopenharmony_ci    let intArray: number[] = [1, 2, 3];
204514f5e3Sopenharmony_ci    print(intArray[0]);
214514f5e3Sopenharmony_ci
224514f5e3Sopenharmony_ci    let doubleArray: number[] = [1.1, 2.2, 3.3];
234514f5e3Sopenharmony_ci    print(doubleArray[1]);
244514f5e3Sopenharmony_ci
254514f5e3Sopenharmony_ci    let objectArray: object[] = [{}, {}, {}];
264514f5e3Sopenharmony_ci    print(objectArray[1]);
274514f5e3Sopenharmony_ci
284514f5e3Sopenharmony_ci    let holeyArray: (number | undefined | object)[] = [1, , {}];
294514f5e3Sopenharmony_ci    print(holeyArray[1]);
304514f5e3Sopenharmony_ci}
314514f5e3Sopenharmony_ci
324514f5e3Sopenharmony_cifoo();
334514f5e3Sopenharmony_ci
344514f5e3Sopenharmony_ci
354514f5e3Sopenharmony_ciclass C {
364514f5e3Sopenharmony_ci    x: number;
374514f5e3Sopenharmony_ci    constructor(v: number) {
384514f5e3Sopenharmony_ci        this.x = v;
394514f5e3Sopenharmony_ci    }
404514f5e3Sopenharmony_ci}
414514f5e3Sopenharmony_ci
424514f5e3Sopenharmony_cifunction testObject() {
434514f5e3Sopenharmony_ci    let objArray: C[] = [new C(1), new C(2)];
444514f5e3Sopenharmony_ci    for (let i: number = 0; i < objArray.length; ++i) {
454514f5e3Sopenharmony_ci        print(objArray[i].x);
464514f5e3Sopenharmony_ci    }
474514f5e3Sopenharmony_ci}
484514f5e3Sopenharmony_ci
494514f5e3Sopenharmony_citestObject();
504514f5e3Sopenharmony_ci
514514f5e3Sopenharmony_ciclass OrderedCollection {
524514f5e3Sopenharmony_ci    elms: number[];
534514f5e3Sopenharmony_ci    constructor() {
544514f5e3Sopenharmony_ci      this.elms = [];
554514f5e3Sopenharmony_ci    }
564514f5e3Sopenharmony_ci    add(elm: number):void {
574514f5e3Sopenharmony_ci      this.elms.push(elm);
584514f5e3Sopenharmony_ci    }
594514f5e3Sopenharmony_ci
604514f5e3Sopenharmony_ci    at(index: number):number{
614514f5e3Sopenharmony_ci      return this.elms[index];
624514f5e3Sopenharmony_ci    }
634514f5e3Sopenharmony_ci}
644514f5e3Sopenharmony_ci
654514f5e3Sopenharmony_cilet constraints: OrderedCollection = new OrderedCollection();
664514f5e3Sopenharmony_ciconstraints.add(0);
674514f5e3Sopenharmony_ciconstraints.add(1);
684514f5e3Sopenharmony_ciconstraints.add(2);
694514f5e3Sopenharmony_ciprint(constraints.at(0));
704514f5e3Sopenharmony_ci
714514f5e3Sopenharmony_cifunction testReverse() {
724514f5e3Sopenharmony_ci  const v0 = [100, 65536]
734514f5e3Sopenharmony_ci  v0.reverse();
744514f5e3Sopenharmony_ci  v0[1] = v0;
754514f5e3Sopenharmony_ci  v0.reverse();
764514f5e3Sopenharmony_ci  print("success");
774514f5e3Sopenharmony_ci}
784514f5e3Sopenharmony_ci
794514f5e3Sopenharmony_citestReverse();
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_cifunction testArrayUsedAsProto() {
824514f5e3Sopenharmony_ci  let v0 = [1];
834514f5e3Sopenharmony_ci  let o = {
844514f5e3Sopenharmony_ci    __proto__: v0
854514f5e3Sopenharmony_ci  }
864514f5e3Sopenharmony_ci  v0.length = 0;
874514f5e3Sopenharmony_ci  print("testArrayUsedAsProto success")
884514f5e3Sopenharmony_ci}
894514f5e3Sopenharmony_ci
904514f5e3Sopenharmony_citestArrayUsedAsProto();
914514f5e3Sopenharmony_ci
924514f5e3Sopenharmony_cifunction testProto1() {
934514f5e3Sopenharmony_ci  let a = [1, 2, 3];
944514f5e3Sopenharmony_ci  let obj = {};
954514f5e3Sopenharmony_ci  obj.__proto__ = a;
964514f5e3Sopenharmony_ci  print(a[0]);
974514f5e3Sopenharmony_ci  print(ArkTools.getElementsKind(a));
984514f5e3Sopenharmony_ci}
994514f5e3Sopenharmony_ci
1004514f5e3Sopenharmony_ciprint(ArkTools.isAOTCompiled(testProto1));
1014514f5e3Sopenharmony_citestProto1();
1024514f5e3Sopenharmony_ci
1034514f5e3Sopenharmony_ci
1044514f5e3Sopenharmony_cifunction testProto2() {
1054514f5e3Sopenharmony_ci  let obj = {};
1064514f5e3Sopenharmony_ci  for (let i = 0; i < 4; i++) {
1074514f5e3Sopenharmony_ci    let a = [1, 2, 3];
1084514f5e3Sopenharmony_ci    if (i == 2) {
1094514f5e3Sopenharmony_ci      obj.__proto__ = a;
1104514f5e3Sopenharmony_ci      a[1] = 1.5
1114514f5e3Sopenharmony_ci    }
1124514f5e3Sopenharmony_ci    print(a[0] + 1);
1134514f5e3Sopenharmony_ci    print(ArkTools.getElementsKind(a));
1144514f5e3Sopenharmony_ci  }
1154514f5e3Sopenharmony_ci}
1164514f5e3Sopenharmony_ci
1174514f5e3Sopenharmony_ciprint(ArkTools.isAOTCompiled(testProto2));
1184514f5e3Sopenharmony_citestProto2();
119