• 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
16class C<T> {
17    constructor (p: T) { this.v = p; }
18    v : T;
19}
20
21type Alias1Function<T> = (p : T) => double;
22type Alias2Function<T> = (p : double) => T;
23type Alias3Function<T> = (p : Int) => T[];
24type Alias4Function<T> = (p : T[], q: T) => double;
25type Alias5Function<T1, T2> = (p : T1[], q: T2) => double;
26type Alias6Function<T1, T2, R> = (p : T1, q: T2) => R;
27type Alias7Function<T> = (p : (p1 : C<T>) => double, q : double) => double;
28
29function main() {
30    let v1 : (p : double) => double = (p : double) : double => { return p; }; // (p:Double) => Double
31    assertEQ(v1(1), 1)
32
33    let v2 : Alias1Function<double> = (p : double) : double => { return p; }; // (p:Double) => Double
34    assertEQ(v2(2), 2)
35
36    let v3 : Alias2Function<double> = (p : double) : double => { return p; }; // (p:Double) => Double
37    assertEQ(v3(3), 3)
38
39    let v4 : Alias3Function<double> = (p : Int) : double[] => { return [p]; }; // (p:Double) => double[]
40    assertEQ(v4(4)[0], 4)
41
42    // let v5 : Alias4Function<double> = (p : double[], q: double) : double => { return p[0]; };  // (p: Double[], q: Double) => Double
43    // assertEQ(v5([5.0], 6), 5)
44
45    let v6 : Alias5Function<double, double> = (p : double[], q: double) : double => { return p[0]; };  // (p: double[], q: Double) => Double
46    assertEQ(v6([7.0], 8), 7.0)
47
48    let v7 : Alias6Function<double, double, double> = (p: double, q: double) : double => { return p + q; }; // (p: Double, q: Double) => Double
49    assertEQ(v7(9, 10), 19)
50
51    let v9 : Alias7Function<double> = (p : (p1 : C<double>) => double, q: double) : double => { return p(new C<double>(q)); }; // (p : (p1 : C<Double) => Double, Double) : Double
52    assertEQ(v9((p : C<double>) : double => { return p.v;}, 20), 20);
53}
54