14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2024 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_ci/*
174514f5e3Sopenharmony_ci * @tc.name:sendablearray
184514f5e3Sopenharmony_ci * @tc.desc:test sendablearray
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci * @tc.require: issueI8QUU0
214514f5e3Sopenharmony_ci */
224514f5e3Sopenharmony_ci
234514f5e3Sopenharmony_ci// @ts-nocheck
244514f5e3Sopenharmony_cideclare function print(str: any): string;
254514f5e3Sopenharmony_ci
264514f5e3Sopenharmony_ciclass SuperClass {
274514f5e3Sopenharmony_ci    public num: number = 0;
284514f5e3Sopenharmony_ci    constructor(num: number) {
294514f5e3Sopenharmony_ci        "use sendable"
304514f5e3Sopenharmony_ci        this.num = num;
314514f5e3Sopenharmony_ci    }
324514f5e3Sopenharmony_ci}
334514f5e3Sopenharmony_ci
344514f5e3Sopenharmony_ciclass SubClass extends SuperClass {
354514f5e3Sopenharmony_ci    public strProp: string = "";
364514f5e3Sopenharmony_ci    constructor(num: number) {
374514f5e3Sopenharmony_ci        "use sendable"
384514f5e3Sopenharmony_ci        super(num);
394514f5e3Sopenharmony_ci        this.strProp = "" + num;
404514f5e3Sopenharmony_ci    }
414514f5e3Sopenharmony_ci}
424514f5e3Sopenharmony_ci
434514f5e3Sopenharmony_ciclass SubSharedClass extends SendableArray {
444514f5e3Sopenharmony_ci  constructor() {
454514f5e3Sopenharmony_ci    'use sendable';
464514f5e3Sopenharmony_ci    super();
474514f5e3Sopenharmony_ci  }
484514f5e3Sopenharmony_ci}
494514f5e3Sopenharmony_ci
504514f5e3Sopenharmony_ciclass SuperUnSharedClass {
514514f5e3Sopenharmony_ci    public num: number = 0;
524514f5e3Sopenharmony_ci    constructor(num: number) {
534514f5e3Sopenharmony_ci        this.num = num;
544514f5e3Sopenharmony_ci    }
554514f5e3Sopenharmony_ci}
564514f5e3Sopenharmony_ci
574514f5e3Sopenharmony_ciSendableArray.from<string>(['a', 'r', 'k']);
584514f5e3Sopenharmony_ci
594514f5e3Sopenharmony_cifunction at() {
604514f5e3Sopenharmony_ci    print("Start Test at")
614514f5e3Sopenharmony_ci    const array1 = new SendableArray<number>(5, 12, 8, 130, 44);
624514f5e3Sopenharmony_ci    let index = 2;
634514f5e3Sopenharmony_ci    print(`An index of ${index} returns ${array1.at(index)}`); // An index of 2 returns 8
644514f5e3Sopenharmony_ci
654514f5e3Sopenharmony_ci    index = -2;
664514f5e3Sopenharmony_ci    print(`An index of ${index} returns ${array1.at(index)}`); // An index of -2 returns 130
674514f5e3Sopenharmony_ci
684514f5e3Sopenharmony_ci    index = 200;
694514f5e3Sopenharmony_ci    print(`An index of ${index} returns ${array1.at(index)}`); // An index of 200 returns undefined
704514f5e3Sopenharmony_ci
714514f5e3Sopenharmony_ci    print(`An index of null returns ${array1.at(null)}`); // An index of null returns 5
724514f5e3Sopenharmony_ci
734514f5e3Sopenharmony_ci    print(`An index of undefined returns ${array1.at(undefined)}`); // An index of undefined returns 5
744514f5e3Sopenharmony_ci
754514f5e3Sopenharmony_ci    print(`An index of undefined returns ${array1.at(true)}`); // An index of true returns 12
764514f5e3Sopenharmony_ci
774514f5e3Sopenharmony_ci    print(`An index of undefined returns ${array1.at(false)}`); // An index of false returns 5
784514f5e3Sopenharmony_ci
794514f5e3Sopenharmony_ci    index = 2871622679;
804514f5e3Sopenharmony_ci    print(`An index of 2871622679 returns ${array1.at(index)}`); // An index of 2871622679 returns undefined
814514f5e3Sopenharmony_ci}
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_cifunction entries() {
844514f5e3Sopenharmony_ci    print("Start Test entries")
854514f5e3Sopenharmony_ci    const array1 = new SendableArray<string>('a', 'b', 'c');
864514f5e3Sopenharmony_ci    const iterator = array1.entries();
874514f5e3Sopenharmony_ci    for (const [key, value] of iterator) {
884514f5e3Sopenharmony_ci        print("" + key + "," + value); // 0 a, 1 b, 2 c
894514f5e3Sopenharmony_ci    }
904514f5e3Sopenharmony_ci}
914514f5e3Sopenharmony_ci
924514f5e3Sopenharmony_cifunction keys() {
934514f5e3Sopenharmony_ci    print("Start Test keys")
944514f5e3Sopenharmony_ci    const array1 = new SendableArray<string>('a', 'b', 'c');
954514f5e3Sopenharmony_ci    const iterator = array1.keys();
964514f5e3Sopenharmony_ci    for (const key of iterator) {
974514f5e3Sopenharmony_ci        print("" + key); // 0, 1, 2
984514f5e3Sopenharmony_ci    }
994514f5e3Sopenharmony_ci}
1004514f5e3Sopenharmony_ci
1014514f5e3Sopenharmony_cifunction values() {
1024514f5e3Sopenharmony_ci    print("Start Test values")
1034514f5e3Sopenharmony_ci    const array1 = new SendableArray<string>('a', 'b', 'c');
1044514f5e3Sopenharmony_ci    const iterator = array1.values();
1054514f5e3Sopenharmony_ci    for (const value of iterator) {
1064514f5e3Sopenharmony_ci        print("" + value); // a, b, c
1074514f5e3Sopenharmony_ci    }
1084514f5e3Sopenharmony_ci}
1094514f5e3Sopenharmony_ci
1104514f5e3Sopenharmony_cifunction find() {
1114514f5e3Sopenharmony_ci    print("Start Test find")
1124514f5e3Sopenharmony_ci    const array1 = new SendableArray<number>(5, 12, 8, 130, 44);
1134514f5e3Sopenharmony_ci
1144514f5e3Sopenharmony_ci    const found = array1.find((element: number) => element > 10);
1154514f5e3Sopenharmony_ci    print("" + found); // 12
1164514f5e3Sopenharmony_ci
1174514f5e3Sopenharmony_ci    const array2 = new SendableArray<SuperClass>(
1184514f5e3Sopenharmony_ci      new SubClass(5),
1194514f5e3Sopenharmony_ci      new SubClass(32),
1204514f5e3Sopenharmony_ci      new SubClass(8),
1214514f5e3Sopenharmony_ci      new SubClass(130),
1224514f5e3Sopenharmony_ci      new SubClass(44),
1234514f5e3Sopenharmony_ci    );
1244514f5e3Sopenharmony_ci    const result: SubClass | undefined = array2.find<SubClass>(
1254514f5e3Sopenharmony_ci      (value: SuperClass, index: number, obj: SendableArray<SuperClass>) => value instanceof SubClass,
1264514f5e3Sopenharmony_ci    );
1274514f5e3Sopenharmony_ci    print((new SubClass(5)).strProp); // 5
1284514f5e3Sopenharmony_ci}
1294514f5e3Sopenharmony_ci
1304514f5e3Sopenharmony_cifunction includes() {
1314514f5e3Sopenharmony_ci    print("Start Test includes")
1324514f5e3Sopenharmony_ci    const array1 = new SendableArray<number>(1, 2, 3);
1334514f5e3Sopenharmony_ci    print("" + array1.includes(2)); // true
1344514f5e3Sopenharmony_ci
1354514f5e3Sopenharmony_ci    const pets = new SendableArray<string>('cat', 'dog', 'bat');
1364514f5e3Sopenharmony_ci    print("" + pets.includes('cat')); // true
1374514f5e3Sopenharmony_ci
1384514f5e3Sopenharmony_ci    print("" + pets.includes('at')); // false
1394514f5e3Sopenharmony_ci}
1404514f5e3Sopenharmony_ci
1414514f5e3Sopenharmony_cifunction index() {
1424514f5e3Sopenharmony_ci    print("Start Test index")
1434514f5e3Sopenharmony_ci    const array1 = new SendableArray<number>(5, 12, 8, 130, 44);
1444514f5e3Sopenharmony_ci    const isLargeNumber = (element: number) => element > 13;
1454514f5e3Sopenharmony_ci    print("" + array1.findIndex(isLargeNumber)); // 3
1464514f5e3Sopenharmony_ci
1474514f5e3Sopenharmony_ci}
1484514f5e3Sopenharmony_ci
1494514f5e3Sopenharmony_cifunction fill() {
1504514f5e3Sopenharmony_ci    print("Start Test fill")
1514514f5e3Sopenharmony_ci    const array1 = new SendableArray<number>(1, 2, 3, 4);
1524514f5e3Sopenharmony_ci    array1.fill(0, 2, 4);
1534514f5e3Sopenharmony_ci    print(array1); // [1, 2, 0, 0]
1544514f5e3Sopenharmony_ci
1554514f5e3Sopenharmony_ci    array1.fill(5, 1);
1564514f5e3Sopenharmony_ci    print(array1); // [1, 5, 5, 5]
1574514f5e3Sopenharmony_ci
1584514f5e3Sopenharmony_ci    array1.fill(6);
1594514f5e3Sopenharmony_ci    print(array1) // [6, 6, 6, 6]
1604514f5e3Sopenharmony_ci}
1614514f5e3Sopenharmony_ci
1624514f5e3Sopenharmony_ci// remove
1634514f5e3Sopenharmony_cifunction pop() {
1644514f5e3Sopenharmony_ci    print("Start Test pop")
1654514f5e3Sopenharmony_ci    const sharedArray = new SendableArray<number>(5, 12, 8, 130, 44);
1664514f5e3Sopenharmony_ci    print("poped: " + sharedArray.pop());
1674514f5e3Sopenharmony_ci}
1684514f5e3Sopenharmony_ci
1694514f5e3Sopenharmony_ci// update
1704514f5e3Sopenharmony_cifunction randomUpdate() {
1714514f5e3Sopenharmony_ci    print("Start Test randomUpdate")
1724514f5e3Sopenharmony_ci    const sharedArray = new SendableArray<number>(5, 12, 8, 130, 44);
1734514f5e3Sopenharmony_ci    sharedArray[1] = 30
1744514f5e3Sopenharmony_ci    print(sharedArray[1]);
1754514f5e3Sopenharmony_ci    try {
1764514f5e3Sopenharmony_ci        sharedArray[null] = 30
1774514f5e3Sopenharmony_ci    } catch (err) {
1784514f5e3Sopenharmony_ci        print("add element by index access failed. err: " + err + ", code: " + err.code);
1794514f5e3Sopenharmony_ci    }
1804514f5e3Sopenharmony_ci
1814514f5e3Sopenharmony_ci    try {
1824514f5e3Sopenharmony_ci        sharedArray[undefined] = 30
1834514f5e3Sopenharmony_ci    } catch (err) {
1844514f5e3Sopenharmony_ci        print("add element by index access failed. err: " + err + ", code: " + err.code);
1854514f5e3Sopenharmony_ci    }
1864514f5e3Sopenharmony_ci
1874514f5e3Sopenharmony_ci    try {
1884514f5e3Sopenharmony_ci        sharedArray[2871622679] = 30
1894514f5e3Sopenharmony_ci    } catch (err) {
1904514f5e3Sopenharmony_ci        print("add element by index access failed. err: " + err + ", code: " + err.code);
1914514f5e3Sopenharmony_ci    }
1924514f5e3Sopenharmony_ci}
1934514f5e3Sopenharmony_ci
1944514f5e3Sopenharmony_ci//  get
1954514f5e3Sopenharmony_cifunction randomGet() {
1964514f5e3Sopenharmony_ci    print("Start Test randomGet")
1974514f5e3Sopenharmony_ci    const sharedArray = new SendableArray<number>(5, 12, 8, 130, 44);
1984514f5e3Sopenharmony_ci    sharedArray.at(0)
1994514f5e3Sopenharmony_ci    print(sharedArray);
2004514f5e3Sopenharmony_ci}
2014514f5e3Sopenharmony_ci
2024514f5e3Sopenharmony_ci// add
2034514f5e3Sopenharmony_cifunction randomAdd() {
2044514f5e3Sopenharmony_ci    print("Start Test randomAdd")
2054514f5e3Sopenharmony_ci    const sharedArray = new SendableArray<number>(5, 12, 8);
2064514f5e3Sopenharmony_ci    try {
2074514f5e3Sopenharmony_ci        sharedArray[4000] = 7;
2084514f5e3Sopenharmony_ci    } catch (err) {
2094514f5e3Sopenharmony_ci        print("add element by index access failed. err: " + err + ", code: " + err.code);
2104514f5e3Sopenharmony_ci    }
2114514f5e3Sopenharmony_ci}
2124514f5e3Sopenharmony_ci
2134514f5e3Sopenharmony_cifunction create(): void {
2144514f5e3Sopenharmony_ci    print("Start Test create")
2154514f5e3Sopenharmony_ci    let arkTSTest: SendableArray<number> = new SendableArray<number>(5);
2164514f5e3Sopenharmony_ci    let arkTSTest1: SendableArray<number> = new SendableArray<number>(1, 3, 5);
2174514f5e3Sopenharmony_ci}
2184514f5e3Sopenharmony_ci
2194514f5e3Sopenharmony_cifunction from(): void {
2204514f5e3Sopenharmony_ci    print("Start Test from")
2214514f5e3Sopenharmony_ci    print(SendableArray.from<string>(['A', 'B', 'C']));
2224514f5e3Sopenharmony_ci    try {
2234514f5e3Sopenharmony_ci        print(SendableArray.from<string>(['E', , 'M', 'P', 'T', 'Y']));
2244514f5e3Sopenharmony_ci    } catch (err) {
2254514f5e3Sopenharmony_ci        print("Create from empty element list failed. err: " + err + ", code: " + err.code);
2264514f5e3Sopenharmony_ci    }
2274514f5e3Sopenharmony_ci    const source = new SendableArray<undefined>(undefined, undefined, 1);
2284514f5e3Sopenharmony_ci    try {
2294514f5e3Sopenharmony_ci        print('Create from sendable undefined element list success. arr: ' + SendableArray.from<string>(source));
2304514f5e3Sopenharmony_ci    } catch (err) {
2314514f5e3Sopenharmony_ci        print("Create from sendable undefined element list failed. err: " + err + ", code: " + err.code);
2324514f5e3Sopenharmony_ci    }
2334514f5e3Sopenharmony_ci    // trigger string cache
2344514f5e3Sopenharmony_ci    SendableArray.from("hello");
2354514f5e3Sopenharmony_ci    print(SendableArray.from("hello"));
2364514f5e3Sopenharmony_ci}
2374514f5e3Sopenharmony_ci
2384514f5e3Sopenharmony_cifunction fromTemplate(): void {
2394514f5e3Sopenharmony_ci  print('Start Test fromTemplate');
2404514f5e3Sopenharmony_ci  let artTSTest1: SendableArray<string> = SendableArray.from<Number, string>([1, 2, 3], (x: number) => '' + x);
2414514f5e3Sopenharmony_ci  print('artTSTest1: ' + artTSTest1);
2424514f5e3Sopenharmony_ci  let arkTSTest2: SendableArray<string> = SendableArray.from<Number, string>([1, 2, 3], (item: number) => '' + item); // ["1", "Key", "3"]
2434514f5e3Sopenharmony_ci  print('arkTSTest2: ' + arkTSTest2);
2444514f5e3Sopenharmony_ci}
2454514f5e3Sopenharmony_ci
2464514f5e3Sopenharmony_cifunction length(): void {
2474514f5e3Sopenharmony_ci    print("Start Test length")
2484514f5e3Sopenharmony_ci    let array: SendableArray<number> = new SendableArray<number>(1, 3, 5);
2494514f5e3Sopenharmony_ci    print("Array length: " + array.length);
2504514f5e3Sopenharmony_ci    array.length = 50;
2514514f5e3Sopenharmony_ci    print("Array length after changed: " + array.length);
2524514f5e3Sopenharmony_ci}
2534514f5e3Sopenharmony_ci
2544514f5e3Sopenharmony_cifunction push(): void {
2554514f5e3Sopenharmony_ci    print("Start Test push")
2564514f5e3Sopenharmony_ci    let array: SendableArray<number> = new SendableArray<number>(1, 3, 5);
2574514f5e3Sopenharmony_ci    array.push(2, 4, 6);
2584514f5e3Sopenharmony_ci    print("Elements pushed: " + array);
2594514f5e3Sopenharmony_ci}
2604514f5e3Sopenharmony_ci
2614514f5e3Sopenharmony_cifunction concat(): void {
2624514f5e3Sopenharmony_ci    print("Start Test concat")
2634514f5e3Sopenharmony_ci    let array: SendableArray<number> = new SendableArray<number>(1, 3, 5);
2644514f5e3Sopenharmony_ci    let arkTSToAppend: SendableArray<number> = new SendableArray<number>(2, 4, 6);
2654514f5e3Sopenharmony_ci    let arkTSToAppend1: SendableArray<number> = new SendableArray<number>(100, 101, 102);
2664514f5e3Sopenharmony_ci
2674514f5e3Sopenharmony_ci    print(array.concat(arkTSToAppend)); // [1, 3, 5, 2, 4, 6]
2684514f5e3Sopenharmony_ci    print(array.concat(arkTSToAppend, arkTSToAppend1));
2694514f5e3Sopenharmony_ci    print(array.concat(200));
2704514f5e3Sopenharmony_ci    print(array.concat(201, 202));
2714514f5e3Sopenharmony_ci    let arr: SendableArray<number> = array.concat(null);
2724514f5e3Sopenharmony_ci    print(arr);
2734514f5e3Sopenharmony_ci    print(arr[3]);
2744514f5e3Sopenharmony_ci    print(arr.length);
2754514f5e3Sopenharmony_ci    let arr1: SendableArray<number> = array.concat(undefined);
2764514f5e3Sopenharmony_ci    print(arr1);
2774514f5e3Sopenharmony_ci    print(arr1[3]);
2784514f5e3Sopenharmony_ci    print(arr1.length);
2794514f5e3Sopenharmony_ci}
2804514f5e3Sopenharmony_ci
2814514f5e3Sopenharmony_cifunction join(): void {
2824514f5e3Sopenharmony_ci    print("Start Test join")
2834514f5e3Sopenharmony_ci    const elements = new SendableArray<string>('Fire', 'Air', 'Water');
2844514f5e3Sopenharmony_ci    print(elements.join());
2854514f5e3Sopenharmony_ci    print(elements.join(''));
2864514f5e3Sopenharmony_ci    print(elements.join('-'));
2874514f5e3Sopenharmony_ci    print(elements.join(null));
2884514f5e3Sopenharmony_ci    print(elements.join(undefined));
2894514f5e3Sopenharmony_ci}
2904514f5e3Sopenharmony_ci
2914514f5e3Sopenharmony_cifunction shift() {
2924514f5e3Sopenharmony_ci    print("Start Test shift")
2934514f5e3Sopenharmony_ci    const array1 = new SendableArray<number>(2, 4, 6);
2944514f5e3Sopenharmony_ci    print(array1.shift());
2954514f5e3Sopenharmony_ci    print(array1.length);
2964514f5e3Sopenharmony_ci
2974514f5e3Sopenharmony_ci    const emptyArray = new SendableArray<number>();
2984514f5e3Sopenharmony_ci    print(emptyArray.shift());
2994514f5e3Sopenharmony_ci}
3004514f5e3Sopenharmony_ci
3014514f5e3Sopenharmony_cifunction unshift() {
3024514f5e3Sopenharmony_ci    print("Start Test unshift")
3034514f5e3Sopenharmony_ci    const array = SendableArray.from<number>([1, 2, 3]);
3044514f5e3Sopenharmony_ci    print(array.unshift(4, 5));
3054514f5e3Sopenharmony_ci    print(array.length);
3064514f5e3Sopenharmony_ci}
3074514f5e3Sopenharmony_ci
3084514f5e3Sopenharmony_cifunction slice() {
3094514f5e3Sopenharmony_ci    print("Start Test slice")
3104514f5e3Sopenharmony_ci    const animals = new SendableArray<string>('ant', 'bison', 'camel', 'duck', 'elephant');
3114514f5e3Sopenharmony_ci    print(animals.slice());
3124514f5e3Sopenharmony_ci    print(animals.slice(2));
3134514f5e3Sopenharmony_ci    print(animals.slice(2, 4));
3144514f5e3Sopenharmony_ci    try {
3154514f5e3Sopenharmony_ci        let a1 = animals.slice(1.5, 4);
3164514f5e3Sopenharmony_ci        print("slice(1.5, 4) element success");
3174514f5e3Sopenharmony_ci        print(a1);
3184514f5e3Sopenharmony_ci    } catch (err) {
3194514f5e3Sopenharmony_ci        print("slice element failed. err: " + err + ", code: " + err.code);
3204514f5e3Sopenharmony_ci    }
3214514f5e3Sopenharmony_ci
3224514f5e3Sopenharmony_ci    try {
3234514f5e3Sopenharmony_ci        let a2 = animals.slice(8, 4);
3244514f5e3Sopenharmony_ci        print("slice(8, 4) element success");
3254514f5e3Sopenharmony_ci    } catch (err) {
3264514f5e3Sopenharmony_ci        print("slice element failed. err: " + err + ", code: " + err.code);
3274514f5e3Sopenharmony_ci    }
3284514f5e3Sopenharmony_ci
3294514f5e3Sopenharmony_ci    try {
3304514f5e3Sopenharmony_ci        let a3 = animals.slice(8, 100);
3314514f5e3Sopenharmony_ci        print("slice(8, 100) element success");
3324514f5e3Sopenharmony_ci    } catch (err) {
3334514f5e3Sopenharmony_ci        print("slice element failed. err: " + err + ", code: " + err.code);
3344514f5e3Sopenharmony_ci    }
3354514f5e3Sopenharmony_ci
3364514f5e3Sopenharmony_ci    try {
3374514f5e3Sopenharmony_ci        print(animals.slice(null));
3384514f5e3Sopenharmony_ci    } catch (err) {
3394514f5e3Sopenharmony_ci        print("slice element failed. err: " + err + ", code: " + err.code);
3404514f5e3Sopenharmony_ci    }
3414514f5e3Sopenharmony_ci
3424514f5e3Sopenharmony_ci    try {
3434514f5e3Sopenharmony_ci        print(animals.slice(undefined));
3444514f5e3Sopenharmony_ci    } catch (err) {
3454514f5e3Sopenharmony_ci        print("slice element failed. err: " + err + ", code: " + err.code);
3464514f5e3Sopenharmony_ci    }
3474514f5e3Sopenharmony_ci}
3484514f5e3Sopenharmony_ci
3494514f5e3Sopenharmony_cifunction sort() {
3504514f5e3Sopenharmony_ci    print("Start Test sort")
3514514f5e3Sopenharmony_ci    const months = new SendableArray<string>('March', 'Jan', 'Feb', 'Dec');
3524514f5e3Sopenharmony_ci    print(months.sort());
3534514f5e3Sopenharmony_ci
3544514f5e3Sopenharmony_ci    const array1 = [1, 30, 4, 21, 10000];
3554514f5e3Sopenharmony_ci    print(array1.sort());
3564514f5e3Sopenharmony_ci
3574514f5e3Sopenharmony_ci    array1.sort((a: number, b: number) => a - b);
3584514f5e3Sopenharmony_ci}
3594514f5e3Sopenharmony_ci
3604514f5e3Sopenharmony_cifunction indexOf() {
3614514f5e3Sopenharmony_ci    print("Start Test indexOf")
3624514f5e3Sopenharmony_ci    const beasts = new SendableArray<string>('ant', 'bison', 'camel', 'duck', 'bison');
3634514f5e3Sopenharmony_ci    print(beasts.indexOf('bison')); // Expected: 1
3644514f5e3Sopenharmony_ci    print(beasts.indexOf('bison', 2)) // Expected: 4
3654514f5e3Sopenharmony_ci    print(beasts.indexOf('giraffe')) // Expected: -1
3664514f5e3Sopenharmony_ci}
3674514f5e3Sopenharmony_ci
3684514f5e3Sopenharmony_cifunction forEach() {
3694514f5e3Sopenharmony_ci  print('Start Test forEach');
3704514f5e3Sopenharmony_ci  const array = new SendableArray<string>('a', 'b', 'c');
3714514f5e3Sopenharmony_ci  array.forEach((element: string) => print(element)); // a <br/> b <br/>  c
3724514f5e3Sopenharmony_ci
3734514f5e3Sopenharmony_ci  array.forEach((element: string, index: number, array: SendableArray<string>) =>
3744514f5e3Sopenharmony_ci    print(`a[${index}] = ${element}, ${array[index]}`),
3754514f5e3Sopenharmony_ci  );
3764514f5e3Sopenharmony_ci}
3774514f5e3Sopenharmony_ci
3784514f5e3Sopenharmony_cifunction map() {
3794514f5e3Sopenharmony_ci    print("Start Test map")
3804514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 4, 9, 16);
3814514f5e3Sopenharmony_ci    print(array.map<string>((x: number) => x + x));
3824514f5e3Sopenharmony_ci}
3834514f5e3Sopenharmony_ci
3844514f5e3Sopenharmony_cifunction filter() {
3854514f5e3Sopenharmony_ci    print("Start Test filter")
3864514f5e3Sopenharmony_ci    const words = new SendableArray<string>('spray', 'elite', 'exuberant', 'destruction', 'present');
3874514f5e3Sopenharmony_ci    print(words.filter((word: string) => word.length > 6))
3884514f5e3Sopenharmony_ci    const array2 = new SendableArray<SuperClass>(
3894514f5e3Sopenharmony_ci      new SubClass(5),
3904514f5e3Sopenharmony_ci      new SuperClass(12),
3914514f5e3Sopenharmony_ci      new SubClass(8),
3924514f5e3Sopenharmony_ci      new SuperClass(130),
3934514f5e3Sopenharmony_ci      new SubClass(44),
3944514f5e3Sopenharmony_ci    );
3954514f5e3Sopenharmony_ci    const result = array2.filter<SubClass>((value: SuperClass, index: number, obj: Array<SuperClass>) => value instanceof SubClass);
3964514f5e3Sopenharmony_ci    result.forEach((element: SubClass) => print(element.num)); // 5, 8, 44
3974514f5e3Sopenharmony_ci}
3984514f5e3Sopenharmony_ci
3994514f5e3Sopenharmony_cifunction reduce() {
4004514f5e3Sopenharmony_ci    print("Start Test reduce")
4014514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 2, 3, 4);
4024514f5e3Sopenharmony_ci    print(array.reduce((acc: number, currValue: number) => acc + currValue)); // 10
4034514f5e3Sopenharmony_ci
4044514f5e3Sopenharmony_ci    print(array.reduce((acc: number, currValue: number) => acc + currValue, 10)); // 20
4054514f5e3Sopenharmony_ci
4064514f5e3Sopenharmony_ci    print(array.reduce<string>((acc: number, currValue: number) => "" + acc + " " + currValue, "10")); // 10, 1, 2, 3, 4
4074514f5e3Sopenharmony_ci}
4084514f5e3Sopenharmony_ci
4094514f5e3Sopenharmony_cifunction f0() {
4104514f5e3Sopenharmony_ci    const o1 = {
4114514f5e3Sopenharmony_ci    };
4124514f5e3Sopenharmony_ci
4134514f5e3Sopenharmony_ci    return o1;
4144514f5e3Sopenharmony_ci}
4154514f5e3Sopenharmony_ci
4164514f5e3Sopenharmony_ciconst v2 = f0();
4174514f5e3Sopenharmony_ciclass C3 {
4184514f5e3Sopenharmony_ci    constructor(a5,a6) {
4194514f5e3Sopenharmony_ci        const v9 = new SendableArray();
4204514f5e3Sopenharmony_ci        v9.splice(0,0, v2);
4214514f5e3Sopenharmony_ci    }
4224514f5e3Sopenharmony_ci}
4234514f5e3Sopenharmony_ci
4244514f5e3Sopenharmony_cifunction splice() {
4254514f5e3Sopenharmony_ci    print("Start Test splice")
4264514f5e3Sopenharmony_ci    const array = new SendableArray<string>('Jan', 'March', 'April', 'June');
4274514f5e3Sopenharmony_ci    array.splice(1, 0, 'Feb', 'Oct');
4284514f5e3Sopenharmony_ci    print(array); // "Jan", "Feb", "Oct", "March", "April", "June"
4294514f5e3Sopenharmony_ci    const removeArray = array.splice(4, 2, 'May');
4304514f5e3Sopenharmony_ci    print(array); // "Jan", "Feb", "Oct", "March", "May"
4314514f5e3Sopenharmony_ci    print(removeArray); // "April", "June"
4324514f5e3Sopenharmony_ci    const removeArray1 = array.splice(2, 3);
4334514f5e3Sopenharmony_ci    print(array); // "Jan", "Feb"
4344514f5e3Sopenharmony_ci    print(removeArray1); // "Oct", "March", "May"
4354514f5e3Sopenharmony_ci
4364514f5e3Sopenharmony_ci    const array2 = new SendableArray<SubClass>(
4374514f5e3Sopenharmony_ci        new SubClass(5),
4384514f5e3Sopenharmony_ci        new SubClass(32),
4394514f5e3Sopenharmony_ci        new SubClass(8),
4404514f5e3Sopenharmony_ci        new SubClass(130),
4414514f5e3Sopenharmony_ci        new SubClass(44),
4424514f5e3Sopenharmony_ci    );
4434514f5e3Sopenharmony_ci
4444514f5e3Sopenharmony_ci    try {
4454514f5e3Sopenharmony_ci        array2.splice(0, 0, new SuperUnSharedClass(48));
4464514f5e3Sopenharmony_ci        print("Add one element by splice api.");
4474514f5e3Sopenharmony_ci    } catch (err) {
4484514f5e3Sopenharmony_ci        print("Add one element by splice api failed. err: " + err + ", code: " + err.code);
4494514f5e3Sopenharmony_ci    }
4504514f5e3Sopenharmony_ci
4514514f5e3Sopenharmony_ci    try {
4524514f5e3Sopenharmony_ci        new C3();
4534514f5e3Sopenharmony_ci        print("Add one element by splice api.");
4544514f5e3Sopenharmony_ci    } catch (err) {
4554514f5e3Sopenharmony_ci        print("Add one element by splice api failed. err: " + err + ", code: " + err.code);
4564514f5e3Sopenharmony_ci    }
4574514f5e3Sopenharmony_ci}
4584514f5e3Sopenharmony_ci
4594514f5e3Sopenharmony_cifunction staticCreate() {
4604514f5e3Sopenharmony_ci    print("Start Test staticCreate")
4614514f5e3Sopenharmony_ci    const array = SendableArray.create<number>(10, 5);
4624514f5e3Sopenharmony_ci    print(array);
4634514f5e3Sopenharmony_ci    try {
4644514f5e3Sopenharmony_ci        const array = SendableArray.create<number>(5);
4654514f5e3Sopenharmony_ci        print("Create with without initialValue success.");
4664514f5e3Sopenharmony_ci    } catch (err) {
4674514f5e3Sopenharmony_ci        print("Create with without initialValue failed. err: " + err + ", code: " + err.code);
4684514f5e3Sopenharmony_ci    }
4694514f5e3Sopenharmony_ci    try {
4704514f5e3Sopenharmony_ci        const array = SendableArray.create<number>(-1, 5);
4714514f5e3Sopenharmony_ci        print("Create with negative length success.");
4724514f5e3Sopenharmony_ci    } catch (err) {
4734514f5e3Sopenharmony_ci        print("Create with negative length failed. err: " + err + ", code: " + err.code);
4744514f5e3Sopenharmony_ci    }
4754514f5e3Sopenharmony_ci    try {
4764514f5e3Sopenharmony_ci        const array = SendableArray.create<number>(13107200, 1); // 13107200: 12.5MB
4774514f5e3Sopenharmony_ci        print("Create huge sendableArrayWith initialValue success.");
4784514f5e3Sopenharmony_ci    } catch (err) {
4794514f5e3Sopenharmony_ci        print("Create huge sendableArrayWith initialValue failed. err: " + err + ", code: " + err.code);
4804514f5e3Sopenharmony_ci    }
4814514f5e3Sopenharmony_ci    try {
4824514f5e3Sopenharmony_ci        const array = SendableArray.create<number>(0x100000000, 5);
4834514f5e3Sopenharmony_ci        print("Create with exceed max length success.");
4844514f5e3Sopenharmony_ci    } catch (err) {
4854514f5e3Sopenharmony_ci        print("Create with exceed max length failed. err: " + err + ", code: " + err.code);
4864514f5e3Sopenharmony_ci    }
4874514f5e3Sopenharmony_ci}
4884514f5e3Sopenharmony_ci
4894514f5e3Sopenharmony_cifunction readonlyLength() {
4904514f5e3Sopenharmony_ci    print("Start Test readonlyLength")
4914514f5e3Sopenharmony_ci    const array = SendableArray.create<number>(10, 5);
4924514f5e3Sopenharmony_ci    print(array.length);
4934514f5e3Sopenharmony_ci    array.length = 0;
4944514f5e3Sopenharmony_ci    print(array.length);
4954514f5e3Sopenharmony_ci}
4964514f5e3Sopenharmony_ci
4974514f5e3Sopenharmony_cifunction shrinkTo() {
4984514f5e3Sopenharmony_ci    print("Start Test shrinkTo")
4994514f5e3Sopenharmony_ci    const array = new SendableArray<number>(5, 5, 5, 5, 5, 5, 5, 5, 5, 5);
5004514f5e3Sopenharmony_ci    print(array.length);
5014514f5e3Sopenharmony_ci    array.shrinkTo(array.length);
5024514f5e3Sopenharmony_ci    print("Shrink to array.length: " + array);
5034514f5e3Sopenharmony_ci    array.shrinkTo(array.length + 1);
5044514f5e3Sopenharmony_ci    print("Shrink to array.length + 1: " + array);
5054514f5e3Sopenharmony_ci    try {
5064514f5e3Sopenharmony_ci        array.shrinkTo(-1);
5074514f5e3Sopenharmony_ci        print("Shrink to -1 success");
5084514f5e3Sopenharmony_ci    } catch (err) {
5094514f5e3Sopenharmony_ci        print("Shrink to -1 fail. err: " + err + ", code: " + err.code);
5104514f5e3Sopenharmony_ci    }
5114514f5e3Sopenharmony_ci    try {
5124514f5e3Sopenharmony_ci        array.shrinkTo(0x100000000);
5134514f5e3Sopenharmony_ci        print("Shrink to invalid 0x100000000 success");
5144514f5e3Sopenharmony_ci    } catch (err) {
5154514f5e3Sopenharmony_ci        print("Shrink to invalid 0x100000000 fail. err: " + err + ", code: " + err.code);
5164514f5e3Sopenharmony_ci    }    
5174514f5e3Sopenharmony_ci    array.shrinkTo(1);
5184514f5e3Sopenharmony_ci    print(array.length);
5194514f5e3Sopenharmony_ci    print(array);
5204514f5e3Sopenharmony_ci
5214514f5e3Sopenharmony_ci}
5224514f5e3Sopenharmony_ci
5234514f5e3Sopenharmony_cifunction extendTo() {
5244514f5e3Sopenharmony_ci    print("Start Test growTo")
5254514f5e3Sopenharmony_ci    const array = SendableArray.create<number>(5, 5);
5264514f5e3Sopenharmony_ci    print(array.length);
5274514f5e3Sopenharmony_ci    array.extendTo(array.length, 0);
5284514f5e3Sopenharmony_ci    print("ExtendTo to array.length: " + array);
5294514f5e3Sopenharmony_ci    array.extendTo(array.length - 1, 0);
5304514f5e3Sopenharmony_ci    print("ExtendTo to array.length - 1: " + array);
5314514f5e3Sopenharmony_ci    array.extendTo(0, 0);
5324514f5e3Sopenharmony_ci    print("ExtendTo to 0: " + array);
5334514f5e3Sopenharmony_ci    try {
5344514f5e3Sopenharmony_ci        array.extendTo(-1, 0);
5354514f5e3Sopenharmony_ci        print("ExtendTo to -1 success.");
5364514f5e3Sopenharmony_ci    } catch (err) {
5374514f5e3Sopenharmony_ci        print("ExtendTo to -1 fail. err: " + err + ", code: " + err.code);
5384514f5e3Sopenharmony_ci    }
5394514f5e3Sopenharmony_ci    try {
5404514f5e3Sopenharmony_ci        array.extendTo(0x100000000, 0);
5414514f5e3Sopenharmony_ci        print("ExtendTo to invalid 0x100000000 success.");
5424514f5e3Sopenharmony_ci    } catch (err) {
5434514f5e3Sopenharmony_ci        print("ExtendTo to invalid 0x100000000 fail. err: " + err + ", code: " + err.code);
5444514f5e3Sopenharmony_ci    }
5454514f5e3Sopenharmony_ci    try {
5464514f5e3Sopenharmony_ci        array.extendTo(8);
5474514f5e3Sopenharmony_ci        print("ExtendTo to 8 without initValue success.");
5484514f5e3Sopenharmony_ci    } catch (err) {
5494514f5e3Sopenharmony_ci        print("ExtendTo to 8 without initValue fail. err: " + err + ", code: " + err.code);
5504514f5e3Sopenharmony_ci    }
5514514f5e3Sopenharmony_ci    array.extendTo(8, 11);
5524514f5e3Sopenharmony_ci    print(array.length);
5534514f5e3Sopenharmony_ci    print(array);
5544514f5e3Sopenharmony_ci}
5554514f5e3Sopenharmony_ci
5564514f5e3Sopenharmony_cifunction indexAccess() {
5574514f5e3Sopenharmony_ci    print("Start Test indexAccess")
5584514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 3, 5, 7);
5594514f5e3Sopenharmony_ci    print("element1: " + array[1]);
5604514f5e3Sopenharmony_ci    array[1] = 10
5614514f5e3Sopenharmony_ci    print("element1 assigned to 10: " + array[1]);
5624514f5e3Sopenharmony_ci    try {
5634514f5e3Sopenharmony_ci        array[10]
5644514f5e3Sopenharmony_ci        print("Index access read out of range success.");
5654514f5e3Sopenharmony_ci    } catch (err) {
5664514f5e3Sopenharmony_ci        print("Index access read out of range failed. err: " + err + ", code: " + err.code);
5674514f5e3Sopenharmony_ci    }
5684514f5e3Sopenharmony_ci    try {
5694514f5e3Sopenharmony_ci        array[100] = 10
5704514f5e3Sopenharmony_ci        print("Index access write out of range success.");
5714514f5e3Sopenharmony_ci    } catch (err) {
5724514f5e3Sopenharmony_ci        print("Index access write out of range failed. err: " + err + ", code: " + err.code);
5734514f5e3Sopenharmony_ci    }
5744514f5e3Sopenharmony_ci    try {
5754514f5e3Sopenharmony_ci        array.forEach((key: number, _: number, array: SendableArray) => {
5764514f5e3Sopenharmony_ci          array[key + array.length];
5774514f5e3Sopenharmony_ci        });
5784514f5e3Sopenharmony_ci    } catch (err) {
5794514f5e3Sopenharmony_ci        print("read element while iterate array fail. err: " + err + ", errCode: " + err.code);
5804514f5e3Sopenharmony_ci    }
5814514f5e3Sopenharmony_ci    try {
5824514f5e3Sopenharmony_ci        array.forEach((key: number, _: number, array: SendableArray) => {
5834514f5e3Sopenharmony_ci          array[key + array.length] = 100;
5844514f5e3Sopenharmony_ci        });
5854514f5e3Sopenharmony_ci    } catch (err) {
5864514f5e3Sopenharmony_ci        print("write element while iterate array fail. err: " + err + ", errCode: " + err.code);
5874514f5e3Sopenharmony_ci    }
5884514f5e3Sopenharmony_ci}
5894514f5e3Sopenharmony_ci
5904514f5e3Sopenharmony_cifunction indexStringAccess() {
5914514f5e3Sopenharmony_ci    print("Start Test indexStringAccess")
5924514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 3, 5, 7);
5934514f5e3Sopenharmony_ci    print("String index element1: " + array["" + 1]);
5944514f5e3Sopenharmony_ci    array["" + 1] = 10
5954514f5e3Sopenharmony_ci    print("String index element1 assigned to 10: " + array["" + 1]);
5964514f5e3Sopenharmony_ci    try {
5974514f5e3Sopenharmony_ci        array["" + 10]
5984514f5e3Sopenharmony_ci        print("String Index access read out of range success.");
5994514f5e3Sopenharmony_ci    } catch (err) {
6004514f5e3Sopenharmony_ci        print("String Index access read out of range failed. err: " + err + ", code: " + err.code);
6014514f5e3Sopenharmony_ci    }
6024514f5e3Sopenharmony_ci    try {
6034514f5e3Sopenharmony_ci        array["" + 100] = 10
6044514f5e3Sopenharmony_ci        print("String Index access write out of range success.");
6054514f5e3Sopenharmony_ci    } catch (err) {
6064514f5e3Sopenharmony_ci        print("String Index access write out of range failed. err: " + err + ", code: " + err.code);
6074514f5e3Sopenharmony_ci    }
6084514f5e3Sopenharmony_ci    try {
6094514f5e3Sopenharmony_ci        array.forEach((key: number, _: number, array: SendableArray) => {
6104514f5e3Sopenharmony_ci          array['' + key + array.length];
6114514f5e3Sopenharmony_ci        });
6124514f5e3Sopenharmony_ci    } catch (err) {
6134514f5e3Sopenharmony_ci        print("String index read element while iterate array fail. err: " + err + ", errCode: " + err.code);
6144514f5e3Sopenharmony_ci    }
6154514f5e3Sopenharmony_ci    try {
6164514f5e3Sopenharmony_ci        array.forEach((key: number, _: number, array: SendableArray) => {
6174514f5e3Sopenharmony_ci          array['' + key + array.length] = 100;
6184514f5e3Sopenharmony_ci        });
6194514f5e3Sopenharmony_ci    } catch (err) {
6204514f5e3Sopenharmony_ci        print("String index write element while iterate array fail. err: " + err + ", errCode: " + err.code);
6214514f5e3Sopenharmony_ci    }
6224514f5e3Sopenharmony_ci}
6234514f5e3Sopenharmony_ci
6244514f5e3Sopenharmony_cifunction testForIC(index: number) {
6254514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 3, 5, 7);
6264514f5e3Sopenharmony_ci    try {
6274514f5e3Sopenharmony_ci        const element = array[index < 80 ? 1 : 10];
6284514f5e3Sopenharmony_ci        if (index == 1) {
6294514f5e3Sopenharmony_ci            print("[IC] Index access read in range success. array: " + element);
6304514f5e3Sopenharmony_ci        }
6314514f5e3Sopenharmony_ci    } catch (err) {
6324514f5e3Sopenharmony_ci        if (index == 99) {
6334514f5e3Sopenharmony_ci            print("[IC] Index access read out of range failed. err: " + err + ", code: " + err.code);
6344514f5e3Sopenharmony_ci        }
6354514f5e3Sopenharmony_ci    }
6364514f5e3Sopenharmony_ci    try {
6374514f5e3Sopenharmony_ci        array[index < 80 ? 1 : 100] = 10
6384514f5e3Sopenharmony_ci        if (index == 1) {
6394514f5e3Sopenharmony_ci            print("[IC] Index access write in range success.");
6404514f5e3Sopenharmony_ci        }
6414514f5e3Sopenharmony_ci    } catch (err) {
6424514f5e3Sopenharmony_ci        if (index == 99) {
6434514f5e3Sopenharmony_ci            print("[IC] Index access write out of range failed. err: " + err + ", code: " + err.code);
6444514f5e3Sopenharmony_ci        }
6454514f5e3Sopenharmony_ci    }
6464514f5e3Sopenharmony_ci    try {
6474514f5e3Sopenharmony_ci        array.length = index < 80 ? 1 : 100;
6484514f5e3Sopenharmony_ci        if (index == 1) {
6494514f5e3Sopenharmony_ci            print("[IC] assign readonly length no error.");
6504514f5e3Sopenharmony_ci        }
6514514f5e3Sopenharmony_ci    } catch (err) {
6524514f5e3Sopenharmony_ci        if (index == 99) {
6534514f5e3Sopenharmony_ci            print("[IC] assign readonly length fail. err: " + err + ", code: " + err.code);
6544514f5e3Sopenharmony_ci        }
6554514f5e3Sopenharmony_ci    }
6564514f5e3Sopenharmony_ci}
6574514f5e3Sopenharmony_ci
6584514f5e3Sopenharmony_cifunction testStringForIC(index: number) {
6594514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 3, 5, 7);
6604514f5e3Sopenharmony_ci    try {
6614514f5e3Sopenharmony_ci        const element = array["" + index < 80 ? 1 : 10];
6624514f5e3Sopenharmony_ci        if (index == 1) {
6634514f5e3Sopenharmony_ci            print("[IC] String Index access read in range success. array: " + element);
6644514f5e3Sopenharmony_ci        }
6654514f5e3Sopenharmony_ci    } catch (err) {
6664514f5e3Sopenharmony_ci        if (index == 99) {
6674514f5e3Sopenharmony_ci            print("[IC] String Index access read out of range failed. err: " + err + ", code: " + err.code);
6684514f5e3Sopenharmony_ci        }
6694514f5e3Sopenharmony_ci    }
6704514f5e3Sopenharmony_ci    try {
6714514f5e3Sopenharmony_ci        array["" + (index < 80 ? 1 : 100)] = 10
6724514f5e3Sopenharmony_ci        if (index == 1) {
6734514f5e3Sopenharmony_ci            print("[IC] String Index access write in range success.");
6744514f5e3Sopenharmony_ci        }
6754514f5e3Sopenharmony_ci    } catch (err) {
6764514f5e3Sopenharmony_ci        if (index == 99) {
6774514f5e3Sopenharmony_ci            print("[IC] String Index access write out of range failed. err: " + err + ", code: " + err.code);
6784514f5e3Sopenharmony_ci        }
6794514f5e3Sopenharmony_ci    }
6804514f5e3Sopenharmony_ci}
6814514f5e3Sopenharmony_ci
6824514f5e3Sopenharmony_cifunction frozenTest(array: SendableArray) {
6834514f5e3Sopenharmony_ci  try {
6844514f5e3Sopenharmony_ci    array.notExistProp = 1;
6854514f5e3Sopenharmony_ci  } catch (err) {
6864514f5e3Sopenharmony_ci    print('Add prop to array failed. err: ' + err);
6874514f5e3Sopenharmony_ci  }
6884514f5e3Sopenharmony_ci  try {
6894514f5e3Sopenharmony_ci    Object.defineProperty(array, 'defineNotExistProp', { value: 321, writable: false });
6904514f5e3Sopenharmony_ci  } catch (err) {
6914514f5e3Sopenharmony_ci    print('defineNotExistProp to array failed. err: ' + err);
6924514f5e3Sopenharmony_ci  }
6934514f5e3Sopenharmony_ci  try {
6944514f5e3Sopenharmony_ci    array.at = 1;
6954514f5e3Sopenharmony_ci  } catch (err) {
6964514f5e3Sopenharmony_ci    print('Update function [at] failed. err: ' + err);
6974514f5e3Sopenharmony_ci  }
6984514f5e3Sopenharmony_ci  try {
6994514f5e3Sopenharmony_ci    Object.defineProperty(array, 'at', { value: 321, writable: false });
7004514f5e3Sopenharmony_ci  } catch (err) {
7014514f5e3Sopenharmony_ci    print('Update function [at] by defineProperty failed. err: ' + err);
7024514f5e3Sopenharmony_ci  }
7034514f5e3Sopenharmony_ci  array.push(111);
7044514f5e3Sopenharmony_ci}
7054514f5e3Sopenharmony_ci
7064514f5e3Sopenharmony_cifunction arrayFrozenTest() {
7074514f5e3Sopenharmony_ci    print("Start Test arrayFrozenTest")
7084514f5e3Sopenharmony_ci    let arr1 = new SendableArray<string>('ARK');
7094514f5e3Sopenharmony_ci    print("arrayFrozenTest [new] single string. arr: " + arr1);
7104514f5e3Sopenharmony_ci    frozenTest(arr1);
7114514f5e3Sopenharmony_ci    arr1 = new SendableArray<string>('A', 'R', 'K');
7124514f5e3Sopenharmony_ci    print("arrayFrozenTest [new]. arr: " + arr1);
7134514f5e3Sopenharmony_ci    frozenTest(arr1);
7144514f5e3Sopenharmony_ci    arr1 = SendableArray.from<string>(['A', 'R', 'K']);
7154514f5e3Sopenharmony_ci    print("arrayFrozenTest static [from]. arr: " + arr1);
7164514f5e3Sopenharmony_ci    frozenTest(arr1);
7174514f5e3Sopenharmony_ci    arr1 = SendableArray.create<string>(3, 'A');
7184514f5e3Sopenharmony_ci    print("arrayFrozenTest static [create]. arr: " + arr1);
7194514f5e3Sopenharmony_ci    frozenTest(arr1);
7204514f5e3Sopenharmony_ci}
7214514f5e3Sopenharmony_ci
7224514f5e3Sopenharmony_cifunction sharedArrayFrozenTest() {
7234514f5e3Sopenharmony_ci    print("Start Test sharedArrayFrozenTest")
7244514f5e3Sopenharmony_ci    let arr1 = new SubSharedClass();
7254514f5e3Sopenharmony_ci    arr1.push("A");
7264514f5e3Sopenharmony_ci    arr1.push("R");
7274514f5e3Sopenharmony_ci    arr1.push("K");
7284514f5e3Sopenharmony_ci    print("sharedArrayFrozenTest [new]. arr: " + arr1);
7294514f5e3Sopenharmony_ci    frozenTest(arr1);
7304514f5e3Sopenharmony_ci}
7314514f5e3Sopenharmony_ci
7324514f5e3Sopenharmony_cifunction increaseArray() {
7334514f5e3Sopenharmony_ci    print("Start Test extendSharedTest")
7344514f5e3Sopenharmony_ci    let sub = new SubSharedClass();
7354514f5e3Sopenharmony_ci    for (let idx: number = 0; idx < 1200; idx++) {
7364514f5e3Sopenharmony_ci        sub.push(idx + 10);
7374514f5e3Sopenharmony_ci    }
7384514f5e3Sopenharmony_ci    print("Push: " + sub);
7394514f5e3Sopenharmony_ci}
7404514f5e3Sopenharmony_ci
7414514f5e3Sopenharmony_cifunction arrayFromSet(){
7424514f5e3Sopenharmony_ci  print('Start Test arrayFromSet');
7434514f5e3Sopenharmony_ci  const set = new Set(['foo', 'bar', 'baz', 'foo']);
7444514f5e3Sopenharmony_ci  const sharedSet = new SendableSet(['foo', 'bar', 'baz', 'foo']);
7454514f5e3Sopenharmony_ci  print('Create from normal set: ' + SendableArray.from(set));
7464514f5e3Sopenharmony_ci  print('Create from shared set: ' + SendableArray.from(set));
7474514f5e3Sopenharmony_ci}
7484514f5e3Sopenharmony_ci
7494514f5e3Sopenharmony_cifunction arrayFromNormalMap() {
7504514f5e3Sopenharmony_ci    print("Start Test arrayFromNormalMap")
7514514f5e3Sopenharmony_ci    const map = new Map([
7524514f5e3Sopenharmony_ci        [1, 2],
7534514f5e3Sopenharmony_ci        [2, 4],
7544514f5e3Sopenharmony_ci        [4, 8],
7554514f5e3Sopenharmony_ci      ]);
7564514f5e3Sopenharmony_ci      Array.from(map);
7574514f5e3Sopenharmony_ci      // [[1, 2], [2, 4], [4, 8]]
7584514f5e3Sopenharmony_ci      
7594514f5e3Sopenharmony_ci      const mapper = new Map([
7604514f5e3Sopenharmony_ci        ["1", "a"],
7614514f5e3Sopenharmony_ci        ["2", "b"],
7624514f5e3Sopenharmony_ci      ]);
7634514f5e3Sopenharmony_ci      Array.from(mapper.values());
7644514f5e3Sopenharmony_ci      // ['a', 'b'];
7654514f5e3Sopenharmony_ci      
7664514f5e3Sopenharmony_ci      Array.from(mapper.keys());
7674514f5e3Sopenharmony_ci      // ['1', '2'];
7684514f5e3Sopenharmony_ci}
7694514f5e3Sopenharmony_ci
7704514f5e3Sopenharmony_cifunction arrayFromSendableMap() {
7714514f5e3Sopenharmony_ci  print('Start test arrayFromSendableMap');
7724514f5e3Sopenharmony_ci  const map = new SendableMap([
7734514f5e3Sopenharmony_ci    [1, 2],
7744514f5e3Sopenharmony_ci    [2, 4],
7754514f5e3Sopenharmony_ci    [4, 8],
7764514f5e3Sopenharmony_ci  ]);
7774514f5e3Sopenharmony_ci  try {
7784514f5e3Sopenharmony_ci    print('create from sharedMap: ' + SendableArray.from(map));
7794514f5e3Sopenharmony_ci  } catch (err) {
7804514f5e3Sopenharmony_ci    print('create from sharedMap with non-sendable array failed. err: ' + err + ', code: ' + err.code);
7814514f5e3Sopenharmony_ci  }
7824514f5e3Sopenharmony_ci  // [[1, 2], [2, 4], [4, 8]]
7834514f5e3Sopenharmony_ci
7844514f5e3Sopenharmony_ci  const mapper = new SendableMap([SendableArray.from(['1', 'a']), SendableArray.from(['2', 'b'])]);
7854514f5e3Sopenharmony_ci  print('create from sharedMapper.values(): ' + SendableArray.from(mapper.values()));
7864514f5e3Sopenharmony_ci  // ['a', 'b'];
7874514f5e3Sopenharmony_ci
7884514f5e3Sopenharmony_ci  print('create from sharedMapper.values(): ' + SendableArray.from(mapper.keys()));
7894514f5e3Sopenharmony_ci  // ['1', '2'];
7904514f5e3Sopenharmony_ci}
7914514f5e3Sopenharmony_ci
7924514f5e3Sopenharmony_cifunction arrayFromNotArray() {
7934514f5e3Sopenharmony_ci    print("Start test arrayFromNotArray")
7944514f5e3Sopenharmony_ci    function NotArray(len: number) {
7954514f5e3Sopenharmony_ci        print("NotArray called with length", len);
7964514f5e3Sopenharmony_ci    }
7974514f5e3Sopenharmony_ci
7984514f5e3Sopenharmony_ci    try {
7994514f5e3Sopenharmony_ci        print('Create array from notArray: ' + SendableArray.from.call(NotArray, new Set(['foo', 'bar', 'baz'])));
8004514f5e3Sopenharmony_ci    } catch (err) {
8014514f5e3Sopenharmony_ci        print("Create array from notArray failed. err: " + err + ", code: " + err.code);
8024514f5e3Sopenharmony_ci    }
8034514f5e3Sopenharmony_ci}
8044514f5e3Sopenharmony_ci
8054514f5e3Sopenharmony_cifunction derivedSlice() {
8064514f5e3Sopenharmony_ci    print("Start Test derivedSlice")
8074514f5e3Sopenharmony_ci    let animals = new SubSharedClass();
8084514f5e3Sopenharmony_ci    animals.push('ant');
8094514f5e3Sopenharmony_ci    animals.push('bison');
8104514f5e3Sopenharmony_ci    animals.push('camel');
8114514f5e3Sopenharmony_ci    animals.push('duck');
8124514f5e3Sopenharmony_ci    animals.push('elephant');
8134514f5e3Sopenharmony_ci    print("instanceOf slice result: " + (animals.slice() instanceof SubSharedClass));
8144514f5e3Sopenharmony_ci}
8154514f5e3Sopenharmony_ci
8164514f5e3Sopenharmony_cifunction derivedSort() {
8174514f5e3Sopenharmony_ci    print("Start Test derivedSort")
8184514f5e3Sopenharmony_ci    let months = new SubSharedClass();
8194514f5e3Sopenharmony_ci    months.push('March')
8204514f5e3Sopenharmony_ci    months.push('Jan')
8214514f5e3Sopenharmony_ci    months.push('Feb')
8224514f5e3Sopenharmony_ci    months.push('Dec')
8234514f5e3Sopenharmony_ci
8244514f5e3Sopenharmony_ci    const sortedMonth = months.sort();
8254514f5e3Sopenharmony_ci    print("instanceOf derived sort result: " + (sortedMonth instanceof SubSharedClass));
8264514f5e3Sopenharmony_ci}
8274514f5e3Sopenharmony_ci
8284514f5e3Sopenharmony_cifunction derivedForEach() {
8294514f5e3Sopenharmony_ci  print('Start Test derivedForEach');
8304514f5e3Sopenharmony_ci  let array = new SubSharedClass();
8314514f5e3Sopenharmony_ci  array.push('March');
8324514f5e3Sopenharmony_ci  array.push('Jan');
8334514f5e3Sopenharmony_ci  array.push('Feb');
8344514f5e3Sopenharmony_ci  array.push('Dec');
8354514f5e3Sopenharmony_ci  array.forEach((element: string, index: number, array: SendableArray<string>) =>
8364514f5e3Sopenharmony_ci    print(`a[${index}] = ${element}, ${array instanceof SubSharedClass}`),
8374514f5e3Sopenharmony_ci  );
8384514f5e3Sopenharmony_ci}
8394514f5e3Sopenharmony_ci
8404514f5e3Sopenharmony_cifunction derivedMap() {
8414514f5e3Sopenharmony_ci    print("Start derivedMap")
8424514f5e3Sopenharmony_ci    let array = new SubSharedClass();
8434514f5e3Sopenharmony_ci    array.push(1);
8444514f5e3Sopenharmony_ci    array.push(4);
8454514f5e3Sopenharmony_ci    array.push(9);
8464514f5e3Sopenharmony_ci    array.push(16);
8474514f5e3Sopenharmony_ci    print("instanceOf derived map result: " + (array.map<string>((x: number) => x + x + "") instanceof SubSharedClass));
8484514f5e3Sopenharmony_ci}
8494514f5e3Sopenharmony_ci
8504514f5e3Sopenharmony_cifunction derivedFill() {
8514514f5e3Sopenharmony_ci    print("Start Test derivedFill")
8524514f5e3Sopenharmony_ci    let array = new SubSharedClass();
8534514f5e3Sopenharmony_ci    array.push(1);
8544514f5e3Sopenharmony_ci    array.push(2);
8554514f5e3Sopenharmony_ci    array.push(3);
8564514f5e3Sopenharmony_ci    array.push(4);
8574514f5e3Sopenharmony_ci    const filledArray = array.fill(0, 2, 4);
8584514f5e3Sopenharmony_ci    print(array); // [1, 2, 0, 0]
8594514f5e3Sopenharmony_ci    print("instanceOf derived fill result: " + (filledArray instanceof SubSharedClass));
8604514f5e3Sopenharmony_ci}
8614514f5e3Sopenharmony_ci
8624514f5e3Sopenharmony_cifunction readOutOfRange() {
8634514f5e3Sopenharmony_ci    print("Start Test array read out of range")
8644514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 3, 5, 7);
8654514f5e3Sopenharmony_ci    print("array[0]: " + array[0]);
8664514f5e3Sopenharmony_ci    try {
8674514f5e3Sopenharmony_ci        let value = array[9];
8684514f5e3Sopenharmony_ci        print("read out of range success " + value);
8694514f5e3Sopenharmony_ci    } catch (err) {
8704514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
8714514f5e3Sopenharmony_ci    }
8724514f5e3Sopenharmony_ci
8734514f5e3Sopenharmony_ci    try {
8744514f5e3Sopenharmony_ci        let value = array['0'];
8754514f5e3Sopenharmony_ci        print("read out of range success " + value);
8764514f5e3Sopenharmony_ci    } catch (err) {
8774514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
8784514f5e3Sopenharmony_ci    }
8794514f5e3Sopenharmony_ci
8804514f5e3Sopenharmony_ci    try {
8814514f5e3Sopenharmony_ci        let value = array[0.0];
8824514f5e3Sopenharmony_ci        print("read out of range success " + value);
8834514f5e3Sopenharmony_ci    } catch (err) {
8844514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
8854514f5e3Sopenharmony_ci    }
8864514f5e3Sopenharmony_ci
8874514f5e3Sopenharmony_ci    try {
8884514f5e3Sopenharmony_ci        let value = array[1.5]
8894514f5e3Sopenharmony_ci        print("read out of range success " + value);
8904514f5e3Sopenharmony_ci    } catch (err) {
8914514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
8924514f5e3Sopenharmony_ci    }
8934514f5e3Sopenharmony_ci
8944514f5e3Sopenharmony_ci    try {
8954514f5e3Sopenharmony_ci        let value = array[undefined]
8964514f5e3Sopenharmony_ci        print("read out of range success " + value);
8974514f5e3Sopenharmony_ci    } catch (err) {
8984514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
8994514f5e3Sopenharmony_ci    }
9004514f5e3Sopenharmony_ci
9014514f5e3Sopenharmony_ci    try {
9024514f5e3Sopenharmony_ci        let value = array[null]
9034514f5e3Sopenharmony_ci        print("read out of range success " + value);
9044514f5e3Sopenharmony_ci    } catch (err) {
9054514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
9064514f5e3Sopenharmony_ci    }
9074514f5e3Sopenharmony_ci
9084514f5e3Sopenharmony_ci    try {
9094514f5e3Sopenharmony_ci        let value = array[Symbol.toStringTag]
9104514f5e3Sopenharmony_ci        print("read out of range success " + value);
9114514f5e3Sopenharmony_ci    } catch (err) {
9124514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
9134514f5e3Sopenharmony_ci    }
9144514f5e3Sopenharmony_ci
9154514f5e3Sopenharmony_ci    try {
9164514f5e3Sopenharmony_ci        let value = array[false]
9174514f5e3Sopenharmony_ci        print("read out of range success " + value);
9184514f5e3Sopenharmony_ci    } catch (err) {
9194514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
9204514f5e3Sopenharmony_ci    }
9214514f5e3Sopenharmony_ci
9224514f5e3Sopenharmony_ci    try {
9234514f5e3Sopenharmony_ci        let value = array[true]
9244514f5e3Sopenharmony_ci        print("read out of range success " + value);
9254514f5e3Sopenharmony_ci    } catch (err) {
9264514f5e3Sopenharmony_ci        print("read out of range failed. err: " + err + ", code: " + err.code);
9274514f5e3Sopenharmony_ci    }
9284514f5e3Sopenharmony_ci}
9294514f5e3Sopenharmony_ci
9304514f5e3Sopenharmony_cifunction forOf() {
9314514f5e3Sopenharmony_ci    print("Start Test array for of")
9324514f5e3Sopenharmony_ci    const array = new SendableArray<number>(1, 3, 5, 7);
9334514f5e3Sopenharmony_ci    for(const num of array){
9344514f5e3Sopenharmony_ci        print(num);
9354514f5e3Sopenharmony_ci    }
9364514f5e3Sopenharmony_ci}
9374514f5e3Sopenharmony_ci
9384514f5e3Sopenharmony_cifunction sharedArrayConstructorTest(){
9394514f5e3Sopenharmony_ci    let from_arr  = [1,2,3];
9404514f5e3Sopenharmony_ci    let s_arr = new SendableArray<number>(...from_arr); // output [1,2,3]
9414514f5e3Sopenharmony_ci    print(("SendableArray ...from_arr: " + s_arr));
9424514f5e3Sopenharmony_ci    let s_arr1 = new SendableArray<number>(0, ...from_arr); // output [1,2,3]
9434514f5e3Sopenharmony_ci    print(("SendableArray ...from_arr1: " + s_arr1));
9444514f5e3Sopenharmony_ci    try {
9454514f5e3Sopenharmony_ci        print("Create from SendableArray with non-sendable array error: " + new SendableArray(from_arr));
9464514f5e3Sopenharmony_ci    } catch (err) {
9474514f5e3Sopenharmony_ci        print("Create from SendableArray with non-sendable array error failed. err: " + err + ", code: " + err.code);
9484514f5e3Sopenharmony_ci    }
9494514f5e3Sopenharmony_ci}
9504514f5e3Sopenharmony_ci
9514514f5e3Sopenharmony_cifunction fromArrayConstructorTest(): void {
9524514f5e3Sopenharmony_ci    print("Start Test fromArrayConstructorTest")
9534514f5e3Sopenharmony_ci    const array1 = new SendableArray<string>('a', 'b', 'c');
9544514f5e3Sopenharmony_ci    const iterator = array1.values();
9554514f5e3Sopenharmony_ci    print(SendableArray.from<string>(iterator));
9564514f5e3Sopenharmony_ci}
9574514f5e3Sopenharmony_ci
9584514f5e3Sopenharmony_cifunction DefinePropertyTest() {
9594514f5e3Sopenharmony_ci    print("Start Test DefinePropertyTest")
9604514f5e3Sopenharmony_ci    let array = new SendableArray<string>('ARK');
9614514f5e3Sopenharmony_ci    try {
9624514f5e3Sopenharmony_ci        Object.defineProperty(array, '0', {writable: true, configurable: true, enumerable: true, value: "321"});
9634514f5e3Sopenharmony_ci        print('defineProperty to array success');
9644514f5e3Sopenharmony_ci    } catch (err) {
9654514f5e3Sopenharmony_ci        print('defineProperty to array failed. err: ' + err);
9664514f5e3Sopenharmony_ci    }
9674514f5e3Sopenharmony_ci
9684514f5e3Sopenharmony_ci    try {
9694514f5e3Sopenharmony_ci        Object.defineProperty(array, '1200', {writable: true, configurable: true, enumerable: true, value: "321"});
9704514f5e3Sopenharmony_ci        print('defineProperty to array success');
9714514f5e3Sopenharmony_ci    } catch (err) {
9724514f5e3Sopenharmony_ci        print('defineProperty to array failed. err: ' + err);
9734514f5e3Sopenharmony_ci    }
9744514f5e3Sopenharmony_ci
9754514f5e3Sopenharmony_ci    try {
9764514f5e3Sopenharmony_ci        Object.defineProperty(array, 0, {writable: true, configurable: true, enumerable: true, value: "321"});
9774514f5e3Sopenharmony_ci        print('defineProperty to array success');
9784514f5e3Sopenharmony_ci    } catch (err) {
9794514f5e3Sopenharmony_ci        print('defineProperty to array failed. err: ' + err);
9804514f5e3Sopenharmony_ci    }
9814514f5e3Sopenharmony_ci
9824514f5e3Sopenharmony_ci    try {
9834514f5e3Sopenharmony_ci        Object.defineProperty(array, 1200, {writable: true, configurable: true, enumerable: true, value: "321"});
9844514f5e3Sopenharmony_ci        print('defineProperty to array success');
9854514f5e3Sopenharmony_ci    } catch (err) {
9864514f5e3Sopenharmony_ci        print('defineProperty to array failed. err: ' + err);
9874514f5e3Sopenharmony_ci    }
9884514f5e3Sopenharmony_ci
9894514f5e3Sopenharmony_ci    try {
9904514f5e3Sopenharmony_ci        Object.defineProperty(array, 2871622679, {writable: true, configurable: true, enumerable: true, value: "321"});
9914514f5e3Sopenharmony_ci        print('defineProperty to array success');
9924514f5e3Sopenharmony_ci    } catch (err) {
9934514f5e3Sopenharmony_ci        print('defineProperty to array failed. err: ' + err);
9944514f5e3Sopenharmony_ci    }
9954514f5e3Sopenharmony_ci    try {
9964514f5e3Sopenharmony_ci        Object.defineProperty(array, 0.0, {writable: true, configurable: true, enumerable: true, value: "321"});
9974514f5e3Sopenharmony_ci        print('defineProperty to array success ' + array[0.0]);
9984514f5e3Sopenharmony_ci    } catch (err) {
9994514f5e3Sopenharmony_ci        print("defineProperty to array failed. err: " + err + ", code: " + err.code);
10004514f5e3Sopenharmony_ci    }
10014514f5e3Sopenharmony_ci
10024514f5e3Sopenharmony_ci    try {
10034514f5e3Sopenharmony_ci        Object.defineProperty(array, 1.5, {writable: true, configurable: true, enumerable: true, value: "321"});
10044514f5e3Sopenharmony_ci        print('defineProperty to array success ' + array[1.5]);
10054514f5e3Sopenharmony_ci    } catch (err) {
10064514f5e3Sopenharmony_ci        print("defineProperty to array failed. err: " + err + ", code: " + err.code);
10074514f5e3Sopenharmony_ci    }
10084514f5e3Sopenharmony_ci
10094514f5e3Sopenharmony_ci    try {
10104514f5e3Sopenharmony_ci        Object.defineProperty(array, undefined, {writable: true, configurable: true, enumerable: true, value: "321"});
10114514f5e3Sopenharmony_ci        print("defineProperty to array success " + array[undefined]);
10124514f5e3Sopenharmony_ci    } catch (err) {
10134514f5e3Sopenharmony_ci        print("defineProperty to array failed. err: " + err + ", code: " + err.code);
10144514f5e3Sopenharmony_ci    }
10154514f5e3Sopenharmony_ci
10164514f5e3Sopenharmony_ci    try {
10174514f5e3Sopenharmony_ci        Object.defineProperty(array, null, {writable: true, configurable: true, enumerable: true, value: "321"});
10184514f5e3Sopenharmony_ci        print("defineProperty to array success " + array[null]);
10194514f5e3Sopenharmony_ci    } catch (err) {
10204514f5e3Sopenharmony_ci        print("defineProperty to array failed. err: " + err + ", code: " + err.code);
10214514f5e3Sopenharmony_ci    }
10224514f5e3Sopenharmony_ci
10234514f5e3Sopenharmony_ci    try {
10244514f5e3Sopenharmony_ci        Object.defineProperty(array, Symbol.toStringTag, {writable: true, configurable: true, enumerable: true, value: "321"});
10254514f5e3Sopenharmony_ci        print("defineProperty to array success " + array[Symbol.toStringTag]);
10264514f5e3Sopenharmony_ci    } catch (err) {
10274514f5e3Sopenharmony_ci        print("defineProperty to array failed. err: " + err + ", code: " + err.code);
10284514f5e3Sopenharmony_ci    }
10294514f5e3Sopenharmony_ci
10304514f5e3Sopenharmony_ci    try {
10314514f5e3Sopenharmony_ci        Object.defineProperty(array, true, {writable: true, configurable: true, enumerable: true, value: "321"});
10324514f5e3Sopenharmony_ci        print("defineProperty to array success " + array[null]);
10334514f5e3Sopenharmony_ci    } catch (err) {
10344514f5e3Sopenharmony_ci        print("defineProperty to array failed. err: " + err + ", code: " + err.code);
10354514f5e3Sopenharmony_ci    }
10364514f5e3Sopenharmony_ci
10374514f5e3Sopenharmony_ci    try {
10384514f5e3Sopenharmony_ci        Object.defineProperty(array, false, {writable: true, configurable: true, enumerable: true, value: "321"});
10394514f5e3Sopenharmony_ci        print("defineProperty to array success " + array[Symbol.toStringTag]);
10404514f5e3Sopenharmony_ci    } catch (err) {
10414514f5e3Sopenharmony_ci        print("defineProperty to array failed. err: " + err + ", code: " + err.code);
10424514f5e3Sopenharmony_ci    }
10434514f5e3Sopenharmony_ci}
10444514f5e3Sopenharmony_ci
10454514f5e3Sopenharmony_cifunction isEven(num) {
10464514f5e3Sopenharmony_ci    return num % 2 === 0;
10474514f5e3Sopenharmony_ci}
10484514f5e3Sopenharmony_ci
10494514f5e3Sopenharmony_cifunction SomeTest(): void {
10504514f5e3Sopenharmony_ci    print("Start Test SomeTest")
10514514f5e3Sopenharmony_ci    const numbers = new SendableArray<number>(1, 2, 3, 4, 5);
10524514f5e3Sopenharmony_ci
10534514f5e3Sopenharmony_ci    const hasEvenNumber = numbers.some(isEven); // 1: Whether there are even numbers in the array
10544514f5e3Sopenharmony_ci    print(hasEvenNumber); // should be true
10554514f5e3Sopenharmony_ci
10564514f5e3Sopenharmony_ci    const hasNegativeNumber = numbers.some(num => num < 0); // 2:  Whether there are negative numbers in the array
10574514f5e3Sopenharmony_ci    print(hasNegativeNumber); // should be false
10584514f5e3Sopenharmony_ci}
10594514f5e3Sopenharmony_ci
10604514f5e3Sopenharmony_cifunction EveryTest(): void {
10614514f5e3Sopenharmony_ci    print("Start Test EveryTest")
10624514f5e3Sopenharmony_ci    const numbers = new SendableArray<number>(1, 2, 3, 4, 5);
10634514f5e3Sopenharmony_ci
10644514f5e3Sopenharmony_ci    const allPositive = numbers.every((num) => num > 0); // Check that all elements in the array are greater than 0
10654514f5e3Sopenharmony_ci    print(allPositive); // should be true
10664514f5e3Sopenharmony_ci
10674514f5e3Sopenharmony_ci    const allEven = numbers.every((num) => num % 2 === 0); // Check if all the elements in the array are even
10684514f5e3Sopenharmony_ci    print(allEven); // should be false
10694514f5e3Sopenharmony_ci}
10704514f5e3Sopenharmony_ci
10714514f5e3Sopenharmony_cifunction isArrayTest() {
10724514f5e3Sopenharmony_ci  // print true
10734514f5e3Sopenharmony_ci  print(SendableArray.isArray(new SendableArray()));
10744514f5e3Sopenharmony_ci  print(SendableArray.isArray(new SendableArray('a', 'b', 'c', 'd')));
10754514f5e3Sopenharmony_ci  print(SendableArray.isArray(new SendableArray(3)));
10764514f5e3Sopenharmony_ci  print(SendableArray.isArray(SendableArray.prototype));
10774514f5e3Sopenharmony_ci
10784514f5e3Sopenharmony_ci  // print false
10794514f5e3Sopenharmony_ci  print(SendableArray.isArray([]));
10804514f5e3Sopenharmony_ci  print(SendableArray.isArray([1]));
10814514f5e3Sopenharmony_ci  print(SendableArray.isArray());
10824514f5e3Sopenharmony_ci  print(SendableArray.isArray({}));
10834514f5e3Sopenharmony_ci  print(SendableArray.isArray(null));
10844514f5e3Sopenharmony_ci  print(SendableArray.isArray(undefined));
10854514f5e3Sopenharmony_ci  print(SendableArray.isArray(17));
10864514f5e3Sopenharmony_ci  print(SendableArray.isArray('SendableArray'));
10874514f5e3Sopenharmony_ci  print(SendableArray.isArray(true));
10884514f5e3Sopenharmony_ci  print(SendableArray.isArray(false));
10894514f5e3Sopenharmony_ci  print(SendableArray.isArray(new SendableUint8Array(32)));
10904514f5e3Sopenharmony_ci}
10914514f5e3Sopenharmony_ci
10924514f5e3Sopenharmony_cifunction lastIndexOfTest() {
10934514f5e3Sopenharmony_ci  let arr = SendableArray.from([1, 2, 3, 4, 2, 5]);
10944514f5e3Sopenharmony_ci  print(arr.lastIndexOf(2));
10954514f5e3Sopenharmony_ci
10964514f5e3Sopenharmony_ci  print(arr.lastIndexOf(1));
10974514f5e3Sopenharmony_ci  print(arr.lastIndexOf(5));
10984514f5e3Sopenharmony_ci  print(arr.lastIndexOf(6));
10994514f5e3Sopenharmony_ci
11004514f5e3Sopenharmony_ci  let emptyArr = SendableArray.from([]);
11014514f5e3Sopenharmony_ci  print(emptyArr.lastIndexOf(1));
11024514f5e3Sopenharmony_ci
11034514f5e3Sopenharmony_ci  let arrWithNaN = SendableArray.from([1, 2, NaN, 4, NaN]);
11044514f5e3Sopenharmony_ci  print(arrWithNaN.lastIndexOf(NaN));
11054514f5e3Sopenharmony_ci
11064514f5e3Sopenharmony_ci  let arrWithUndefined = SendableArray.from([1, 2, undefined, 4]);
11074514f5e3Sopenharmony_ci  print(arrWithUndefined.lastIndexOf(undefined));
11084514f5e3Sopenharmony_ci}
11094514f5e3Sopenharmony_ci
11104514f5e3Sopenharmony_ciat()
11114514f5e3Sopenharmony_ci
11124514f5e3Sopenharmony_cientries()
11134514f5e3Sopenharmony_ci
11144514f5e3Sopenharmony_cikeys()
11154514f5e3Sopenharmony_ci
11164514f5e3Sopenharmony_civalues()
11174514f5e3Sopenharmony_ci
11184514f5e3Sopenharmony_cifind();
11194514f5e3Sopenharmony_ci
11204514f5e3Sopenharmony_ciincludes();
11214514f5e3Sopenharmony_ci
11224514f5e3Sopenharmony_ciindex();
11234514f5e3Sopenharmony_ci
11244514f5e3Sopenharmony_cifill();
11254514f5e3Sopenharmony_ci
11264514f5e3Sopenharmony_cipop();
11274514f5e3Sopenharmony_ci
11284514f5e3Sopenharmony_cirandomUpdate();
11294514f5e3Sopenharmony_ci
11304514f5e3Sopenharmony_cirandomGet();
11314514f5e3Sopenharmony_ci
11324514f5e3Sopenharmony_cirandomAdd();
11334514f5e3Sopenharmony_cicreate();
11344514f5e3Sopenharmony_cifrom();
11354514f5e3Sopenharmony_cifromTemplate();
11364514f5e3Sopenharmony_cilength();
11374514f5e3Sopenharmony_cipush();
11384514f5e3Sopenharmony_ciconcat();
11394514f5e3Sopenharmony_cijoin()
11404514f5e3Sopenharmony_cishift()
11414514f5e3Sopenharmony_ciunshift()
11424514f5e3Sopenharmony_cislice()
11434514f5e3Sopenharmony_cisort()
11444514f5e3Sopenharmony_ciindexOf()
11454514f5e3Sopenharmony_ciforEach()
11464514f5e3Sopenharmony_cimap()
11474514f5e3Sopenharmony_cifilter()
11484514f5e3Sopenharmony_cireduce()
11494514f5e3Sopenharmony_cisplice()
11504514f5e3Sopenharmony_cistaticCreate()
11514514f5e3Sopenharmony_cireadonlyLength()
11524514f5e3Sopenharmony_cishrinkTo()
11534514f5e3Sopenharmony_ciextendTo()
11544514f5e3Sopenharmony_ciindexAccess()
11554514f5e3Sopenharmony_ciindexStringAccess()
11564514f5e3Sopenharmony_ciprint("Start Test testForIC")
11574514f5e3Sopenharmony_cifor (let index: number = 0; index < 100; index++) {
11584514f5e3Sopenharmony_ci    testForIC(index)
11594514f5e3Sopenharmony_ci}
11604514f5e3Sopenharmony_ci
11614514f5e3Sopenharmony_ciprint("Start Test testStringForIC")
11624514f5e3Sopenharmony_cifor (let index: number = 0; index < 100; index++) {
11634514f5e3Sopenharmony_ci    testStringForIC(index)
11644514f5e3Sopenharmony_ci}
11654514f5e3Sopenharmony_ci
11664514f5e3Sopenharmony_ciarrayFrozenTest()
11674514f5e3Sopenharmony_cisharedArrayFrozenTest()
11684514f5e3Sopenharmony_ciarrayFromSet()
11694514f5e3Sopenharmony_ciarrayFromNormalMap()
11704514f5e3Sopenharmony_ciarrayFromSendableMap();
11714514f5e3Sopenharmony_ciarrayFromNotArray();
11724514f5e3Sopenharmony_ci
11734514f5e3Sopenharmony_ciderivedSlice();
11744514f5e3Sopenharmony_ciderivedSort();
11754514f5e3Sopenharmony_ciderivedForEach();
11764514f5e3Sopenharmony_ciderivedMap()
11774514f5e3Sopenharmony_ciderivedFill()
11784514f5e3Sopenharmony_cireadOutOfRange()
11794514f5e3Sopenharmony_ciforOf();
11804514f5e3Sopenharmony_cisharedArrayConstructorTest()
11814514f5e3Sopenharmony_cifromArrayConstructorTest()
11824514f5e3Sopenharmony_ciDefinePropertyTest()
11834514f5e3Sopenharmony_ci
11844514f5e3Sopenharmony_ciSomeTest()
11854514f5e3Sopenharmony_ciEveryTest()
11864514f5e3Sopenharmony_ciisArrayTest();
11874514f5e3Sopenharmony_cilastIndexOfTest();
1188