• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16
17class C<T> {
18    constructor (p: T) { this.v = p; }
19    v : T;
20}
21
22type Alias1Array<T> = T[];
23type Alias2Array<T> = C<T>[];
24type Alias3Array<T> = C<T>[][];
25type Alias4Array<T> = ((p: T) => double)[];
26type Alias5Array<T> = (p: T[]) => double;
27type Alias6Array<T> = (p: T[], q: T) => double;
28type Alias7Array<T1, T2> = (p: T1[], q: T2) => double;
29type Alias8Array<T> = [T][];
30type Alias9Array<T> = [C<T>][];
31
32function main()
33{
34    let v1 : double[] = [1,2,3];                       // double[]
35    v1[0] = new Double(4);
36    assertEQ(v1[0], 4)
37    assertEQ(v1[1], 2)
38    assertEQ(v1[2], 3)
39
40    let v2 : Alias1Array<double> =  [5, 6, 7];         // double[]
41    v2[0] = new Double(8);
42    assertEQ(v2[0], 8)
43    assertEQ(v2[1], 6)
44    assertEQ(v2[2], 7)
45
46    let v3 : Alias2Array<double> = [new C<double>(9)];  // C<Double>[]
47    assertEQ(v3[0].v, 9)
48    v3[0].v = 10;
49    assertEQ(v3[0].v, 10)
50
51    let v4 : Alias3Array<double> = [[new C<double>(11)]];  // C<Double>[][]
52    assertEQ(v4[0][0].v, 11)
53    v4[0][0].v = 12;
54    assertEQ(v4[0][0].v, 12)
55
56    let v5 : Alias4Array<double> = [(p : double) : double => { return p; }];  // [(p: Double)=>Double]
57    assertEQ(v5[0](13), 13)
58
59    let v6 : Alias5Array<double> = (p : double[]) : double => { return p[0]; };  // (p: double[])=>Double
60    assertEQ(v6([14.0]), 14)
61
62    // let v7 : Alias6Array<double> = (p : double[], q: double) : double => { return p[0]; };  // (p: Double[], q: Double)=>Double
63    // assertEQ(v7([15.0], 16), 15)
64
65    let v9 : Alias7Array<double, double> = (p : double[], q: double) : double => { return p[0]; };  // (p: double[], q: Double)=>Double
66    assertEQ(v9([17.0], 18), 17)
67
68    let v10 : Alias8Array<double> = [[new Int(18)]];  //  [double][]
69    assertEQ(v10[0][0], 18)
70
71    let v11 : Alias9Array<double> = [[new C<double>(19)]]; // [C<Double>][]
72    assertEQ(v11[0][0].v, 19)
73}
74