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_ciclass D<T1, T2> { 223af6ab5fSopenharmony_ci constructor (p: T1, q: T2) { this.v = p; this.w = q; } 233af6ab5fSopenharmony_ci v : T1; 243af6ab5fSopenharmony_ci w : T2; 253af6ab5fSopenharmony_ci} 263af6ab5fSopenharmony_ci 273af6ab5fSopenharmony_citype AliasPrimitive<T> = T; 283af6ab5fSopenharmony_citype AliasAlias<T> = AliasPrimitive<T>; 293af6ab5fSopenharmony_ci 303af6ab5fSopenharmony_citype Alias1Class<T> = C<T>; 313af6ab5fSopenharmony_citype Alias2Class<T> = C<T[]>; 323af6ab5fSopenharmony_citype Alias3Class<T1, T2> = D<T1, T2>; 333af6ab5fSopenharmony_citype Alias4Class<T1, T2> = D<T2, T1>; 343af6ab5fSopenharmony_citype Alias5Class<T1, T2> = D<Alias1Class<T1>, AliasAlias<T2>[]> 353af6ab5fSopenharmony_ci 363af6ab5fSopenharmony_cifunction main() { 373af6ab5fSopenharmony_ci let v1 : C<double> = new C<double>(1); // C<Double> 383af6ab5fSopenharmony_ci assert(v1.v == 1); 393af6ab5fSopenharmony_ci 403af6ab5fSopenharmony_ci let v2 : Alias1Class<double> = new C<double>(2); // C<Double> 413af6ab5fSopenharmony_ci assert(v2.v == 2); 423af6ab5fSopenharmony_ci 433af6ab5fSopenharmony_ci let v3 : Alias2Class<double> = new C<double[]>([3.0]); // C<double[]> 443af6ab5fSopenharmony_ci assert(v3.v[0] == 3); 453af6ab5fSopenharmony_ci 463af6ab5fSopenharmony_ci let v4: Alias3Class<double, int> = new D<double, int>(4.0, 5); // D<Double, Int> 473af6ab5fSopenharmony_ci assert(v4.v == 4.0); 483af6ab5fSopenharmony_ci assert(v4.w == 5); 493af6ab5fSopenharmony_ci 503af6ab5fSopenharmony_ci let v5: Alias4Class<double, int> = new D<int, double>(6, 7.0); // D<Int, Double> 513af6ab5fSopenharmony_ci assert(v5.v == 6); 523af6ab5fSopenharmony_ci assert(v5.w == 7.0); 533af6ab5fSopenharmony_ci 543af6ab5fSopenharmony_ci let v6: Alias5Class<double, double> = new D<C<double>, double[]>(new C<double>(8), [9.0]); // D<C<Double>, double[]> 553af6ab5fSopenharmony_ci assert(v6.v.v == 8); 563af6ab5fSopenharmony_ci assert(v6.w[0] == 9.0); 573af6ab5fSopenharmony_ci} 58