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