• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2023-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 A {
17  protected name_: char;
18
19  public constructor() {
20    this.name_ = c'A';
21  }
22
23  public name(): char {
24    return this.name_;
25  }
26
27  public a(): char {
28    return c'A';
29  }
30}
31
32final class B extends A {
33  public constructor() {
34    this.name_ = c'B';
35  }
36
37  public b(): char {
38    return c'B';
39  }
40}
41
42function reference_reference_test(): void {
43  let B_ = new B();
44  assertEQ(B_.name(), c'B')
45  assertEQ(B_.b(), c'B')
46
47  let B_A = B_ as A;
48  assertEQ(B_A.name(), c'B')
49  assertEQ(B_A.a(), c'A')
50
51  let A_B = B_A as B;
52  assertEQ(B_.name(), c'B')
53  assertEQ(B_.b(), c'B')
54}
55
56function array_test(): void {
57  let Bs: FixedArray<B> = [new B(), new B(), new B()];
58
59  let B_As: FixedArray<A> = Bs as FixedArray<A>;
60  for (let i: int = 0; i < B_As.length; i++) {
61    assertEQ(B_As[i].name(), c'B')
62    assertEQ(B_As[i].a(), c'A')
63  }
64
65  let Object_: Object = B_As as Object;
66
67  let Object_Bs: FixedArray<B> = Object_ as FixedArray<B>;
68  for (let i: int = 0; i < Object_Bs.length; i++) {
69    assertEQ(Object_Bs[i].name(), c'B')
70    assertEQ(Object_Bs[i].b(), c'B')
71  }
72}
73
74function multi_array_test(): void {
75  let Bs: FixedArray<FixedArray<B>> = [[new B()], [new B()], [new B()]];
76
77  let B_As: FixedArray<FixedArray<A>> = Bs as FixedArray<FixedArray<A>>;
78  for (let i: int = 0; i < B_As.length; i++) {
79    for (let j: int = 0; j < B_As[i].length; j++) {
80      assertEQ(B_As[i][j].name(), c'B')
81      assertEQ(B_As[i][j].a(), c'A')
82    }
83  }
84
85  let Object_: Object = B_As as Object;
86
87  let Object_Bs: FixedArray<FixedArray<B>> = Object_ as FixedArray<FixedArray<B>>;
88  for (let i: int = 0; i < Object_Bs.length; i++) {
89    for (let j: int = 0; j < Object_Bs[i].length; j++) {
90      assertEQ(Object_Bs[i][j].name(), c'B')
91      assertEQ(Object_Bs[i][j].b(), c'B')
92    }
93  }
94}
95
96function primitive_reference_test(): void {
97  let int_: int = 42;
98  let Int_ = int_ as Int;
99  assertTrue(Int_ instanceof Int)
100  assertEQ(Int_.toInt(), 42)
101  assertEQ(Int_.add(1) as int, 43)
102}
103
104function main(): void {
105  reference_reference_test();
106  array_test();
107  multi_array_test();
108  primitive_reference_test();
109}
110