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_ciclass C<T> {
173af6ab5fSopenharmony_ci    constructor (p: T) { this.v = p; }
183af6ab5fSopenharmony_ci    v: T;
193af6ab5fSopenharmony_ci }
203af6ab5fSopenharmony_ci
213af6ab5fSopenharmony_citype Alias1Tuple<T> = [T];
223af6ab5fSopenharmony_citype Alias2Tuple<T> = [T, Int];
233af6ab5fSopenharmony_citype Alias3Tuple<T> = [C<T>, double];
243af6ab5fSopenharmony_citype Alias4Tuple<T1, T2> = [T1[], T2];
253af6ab5fSopenharmony_citype Alias5Tuple<T1, T2> = [C<T1>[], T2];
263af6ab5fSopenharmony_citype Alias6Tuple<T1, T2> = [(p: T1) => double, T2];
273af6ab5fSopenharmony_ci
283af6ab5fSopenharmony_ci
293af6ab5fSopenharmony_cifunction main() {
303af6ab5fSopenharmony_ci    let v1: [double] = [new Int(1)];                            //  [double]
313af6ab5fSopenharmony_ci    let v2: [double, Int] = [new Double(2), new Int(3)];        //  [Double, Int]
323af6ab5fSopenharmony_ci
333af6ab5fSopenharmony_ci    let v3: Alias1Tuple<double> = [new Int(4)];                 //  [double] 
343af6ab5fSopenharmony_ci    let v4: Alias2Tuple<double> = [new Double(5), new Int(6)];  //  [Double, Int]
353af6ab5fSopenharmony_ci
363af6ab5fSopenharmony_ci    let v5: Alias3Tuple<double> = [new C<double>(7), 8];        //  [C<Double>, Double]
373af6ab5fSopenharmony_ci    assert(v5[0].v == 7);
383af6ab5fSopenharmony_ci    assert(v5[1] == 8);
393af6ab5fSopenharmony_ci
403af6ab5fSopenharmony_ci    let v6: Alias4Tuple<double, double> = [[new Int(9), new Int(10), new Int(11)], 12];  // [double[], Double]
413af6ab5fSopenharmony_ci    assert(v6[0][0] == 9);
423af6ab5fSopenharmony_ci    assert(v6[0][1] == 10);
433af6ab5fSopenharmony_ci    assert(v6[0][2] == 11);
443af6ab5fSopenharmony_ci    assert(v6[1] == 12);
453af6ab5fSopenharmony_ci
463af6ab5fSopenharmony_ci    let v7: Alias5Tuple<double, double> = [[new C<double>(13)], 14];  // [C<Double>[], Double]
473af6ab5fSopenharmony_ci    assert(v7[0][0].v == 13);
483af6ab5fSopenharmony_ci    assert(v7[1] == 14);
493af6ab5fSopenharmony_ci
503af6ab5fSopenharmony_ci    let v9: Alias6Tuple<double, double> = [(p: double) : double => { return p;}, 16];  // [(p: Double) => Double, Double]
513af6ab5fSopenharmony_ci    assert(v9[0](15) == 15);
523af6ab5fSopenharmony_ci    assert(v9[1] == 16);
533af6ab5fSopenharmony_ci}
54