• 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
16function force(thunk: () => void) {
17    thunk();
18}
19
20function bool2Levels(): void {
21    force(() => {
22        let a0 = true;
23        force(() => {
24            let a1 = a0;
25            assertTrue(a0 && a1)
26            a0 = false;
27            assertTrue(!a0 && a1)
28            a0 = true;
29            a1 = false;
30            assertTrue(a0 && !a1)
31        });
32    });
33}
34
35function bool4Levels(): void {
36    force(() => {
37        let a0 = true;
38        force(() => {
39            let a1 = a0;
40            force(() => {
41                let a2 = a1;
42                force(() => {
43                    let a3 = a2;
44                    assertTrue(a0 && a1 && a2 && a3)
45                    a0 = false;
46                    assertTrue(!a0 && a1 && a2 && a3)
47                    a3 = false;
48                    assertTrue(!a0 && a1 && a2 && !a3)
49                });
50            });
51        });
52    });
53}
54
55function bool4LevelsBi(): void {
56    force(() => {
57        let a0 = true;
58        force(() => {
59            let a1 = a0;
60            force(() => {
61                let a2 = a1;
62                force(() => {
63                    let a3 = a2;
64                    assertTrue(a0 && a1 && a2 && a3)
65                    a0 = false;
66                    assertTrue(!a0 && a1 && a2 && a3)
67                    a3 = a0;
68                    assertTrue(!a0 && a1 && a2 && !a3)
69                });
70                force(() => {
71                    a2 = a0;
72                    assertTrue(!a0 && a1 && !a2)
73                });
74            });
75            force(() => {
76                assertTrue(!a0 && a1)
77            });
78        });
79        force(() => {
80            assertTrue(!a0)
81        });
82    });
83}
84
85function number4Levels(): void {
86    force(() => {
87        let a0 = 1;
88        force(() => {
89            let a1 = a0++;
90            force(() => {
91                let a2 = a1++;
92                force(() => {
93                    let a3 = a2++;
94                    a3++;
95                    assertEQ(8, a0 + a1 + a2 + a3)
96                });
97            });
98        });
99    });
100}
101
102function arrays(): void {
103    force(() => {
104        let a0 : FixedArray<double> = [1, 0, 0, 0];
105        force(() => {
106            let a1 = a0;
107            a1[1]=a0[0];
108            force(() => {
109                let a2 = a1;
110                a2[2] = a1[1];
111                force(() => {
112                    let a3 = a2;
113                    force(() => {
114                        a3[3] = a2[2];
115                        assertEQ(a0[0] + a0[1] + a0[2] + a0[3], 4)
116                        a0 = new double[5];
117                        assertEQ(a0.length, 5)
118                        assertEQ(a0[0] + a0[1] + a0[2] + a0[3] + a0[4], 0)
119                        assertEQ(a1[0] + a1[1] + a1[2] + a1[3], 4)
120                        assertTrue(a1 == a2 && a2 == a3)
121                    })
122                });
123            });
124        });
125    });
126}
127
128function main():void {
129    bool2Levels();
130    bool4Levels();
131    bool4LevelsBi();
132    number4Levels();
133    arrays();
134}
135