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_cifunction force(thunk: () => void) {
173af6ab5fSopenharmony_ci    thunk();
183af6ab5fSopenharmony_ci}
193af6ab5fSopenharmony_ci
203af6ab5fSopenharmony_cifunction bool2Levels(): void {
213af6ab5fSopenharmony_ci    force(() => {
223af6ab5fSopenharmony_ci        let a0 = true;
233af6ab5fSopenharmony_ci        force(() => {
243af6ab5fSopenharmony_ci            let a1 = a0;
253af6ab5fSopenharmony_ci            assert a0 && a1;
263af6ab5fSopenharmony_ci            a0 = false;
273af6ab5fSopenharmony_ci            assert !a0 && a1;
283af6ab5fSopenharmony_ci            a0 = true;
293af6ab5fSopenharmony_ci            a1 = false;
303af6ab5fSopenharmony_ci            assert a0 && !a1;
313af6ab5fSopenharmony_ci        });
323af6ab5fSopenharmony_ci    });
333af6ab5fSopenharmony_ci}
343af6ab5fSopenharmony_ci
353af6ab5fSopenharmony_cifunction bool4Levels(): void {
363af6ab5fSopenharmony_ci    force(() => {
373af6ab5fSopenharmony_ci        let a0 = true;
383af6ab5fSopenharmony_ci        force(() => {
393af6ab5fSopenharmony_ci            let a1 = a0;
403af6ab5fSopenharmony_ci            force(() => {
413af6ab5fSopenharmony_ci                let a2 = a1;
423af6ab5fSopenharmony_ci                force(() => {
433af6ab5fSopenharmony_ci                    let a3 = a2;
443af6ab5fSopenharmony_ci                    assert a0 && a1 && a2 && a3;
453af6ab5fSopenharmony_ci                    a0 = false;
463af6ab5fSopenharmony_ci                    assert !a0 && a1 && a2 && a3;
473af6ab5fSopenharmony_ci                    a3 = false;
483af6ab5fSopenharmony_ci                    assert !a0 && a1 && a2 && !a3;
493af6ab5fSopenharmony_ci                });
503af6ab5fSopenharmony_ci            });
513af6ab5fSopenharmony_ci        });
523af6ab5fSopenharmony_ci    });
533af6ab5fSopenharmony_ci}
543af6ab5fSopenharmony_ci
553af6ab5fSopenharmony_cifunction bool4LevelsBi(): void {
563af6ab5fSopenharmony_ci    force(() => {
573af6ab5fSopenharmony_ci        let a0 = true;
583af6ab5fSopenharmony_ci        force(() => {
593af6ab5fSopenharmony_ci            let a1 = a0;
603af6ab5fSopenharmony_ci            force(() => {
613af6ab5fSopenharmony_ci                let a2 = a1;
623af6ab5fSopenharmony_ci                force(() => {
633af6ab5fSopenharmony_ci                    let a3 = a2;
643af6ab5fSopenharmony_ci                    assert a0 && a1 && a2 && a3;
653af6ab5fSopenharmony_ci                    a0 = false;
663af6ab5fSopenharmony_ci                    assert !a0 && a1 && a2 && a3;
673af6ab5fSopenharmony_ci                    a3 = a0;
683af6ab5fSopenharmony_ci                    assert !a0 && a1 && a2 && !a3;
693af6ab5fSopenharmony_ci                });
703af6ab5fSopenharmony_ci                force(() => {
713af6ab5fSopenharmony_ci                    a2 = a0;
723af6ab5fSopenharmony_ci                    assert !a0 && a1 && !a2;
733af6ab5fSopenharmony_ci                });
743af6ab5fSopenharmony_ci            });
753af6ab5fSopenharmony_ci            force(() => {
763af6ab5fSopenharmony_ci                assert !a0 && a1;
773af6ab5fSopenharmony_ci            });
783af6ab5fSopenharmony_ci        });
793af6ab5fSopenharmony_ci        force(() => {
803af6ab5fSopenharmony_ci            assert !a0;
813af6ab5fSopenharmony_ci        });
823af6ab5fSopenharmony_ci    });
833af6ab5fSopenharmony_ci}
843af6ab5fSopenharmony_ci
853af6ab5fSopenharmony_cifunction number4Levels(): void {
863af6ab5fSopenharmony_ci    force(() => {
873af6ab5fSopenharmony_ci        let a0 = 1;
883af6ab5fSopenharmony_ci        force(() => {
893af6ab5fSopenharmony_ci            let a1 = a0++;
903af6ab5fSopenharmony_ci            force(() => {
913af6ab5fSopenharmony_ci                let a2 = a1++;
923af6ab5fSopenharmony_ci                force(() => {
933af6ab5fSopenharmony_ci                    let a3 = a2++;
943af6ab5fSopenharmony_ci                    a3++;
953af6ab5fSopenharmony_ci                    assert 8 == a0 + a1 + a2 + a3;
963af6ab5fSopenharmony_ci                });
973af6ab5fSopenharmony_ci            });
983af6ab5fSopenharmony_ci        });
993af6ab5fSopenharmony_ci    });
1003af6ab5fSopenharmony_ci}
1013af6ab5fSopenharmony_ci
1023af6ab5fSopenharmony_cifunction arrays(): void {
1033af6ab5fSopenharmony_ci    force(() => {
1043af6ab5fSopenharmony_ci        let a0 = [1, 0, 0, 0];
1053af6ab5fSopenharmony_ci        force(() => {
1063af6ab5fSopenharmony_ci            let a1 = a0;
1073af6ab5fSopenharmony_ci            a1[1]=a0[0];
1083af6ab5fSopenharmony_ci            force(() => {
1093af6ab5fSopenharmony_ci                let a2 = a1;
1103af6ab5fSopenharmony_ci                a2[2] = a1[1];
1113af6ab5fSopenharmony_ci                force(() => {
1123af6ab5fSopenharmony_ci                    let a3 = a2;
1133af6ab5fSopenharmony_ci                    force(() => {
1143af6ab5fSopenharmony_ci                        a3[3] = a2[2];
1153af6ab5fSopenharmony_ci                        assert a0[0] + a0[1] + a0[2] + a0[3] == 4;
1163af6ab5fSopenharmony_ci                        a0 = new double[5];
1173af6ab5fSopenharmony_ci                        assert a0.length == 5;
1183af6ab5fSopenharmony_ci                        assert a0[0] + a0[1] + a0[2] + a0[3] + a0[4] == 0;
1193af6ab5fSopenharmony_ci                        assert a1[0] + a1[1] + a1[2] + a1[3] == 4;
1203af6ab5fSopenharmony_ci                        assert a1 == a2 && a2 == a3;
1213af6ab5fSopenharmony_ci                    })
1223af6ab5fSopenharmony_ci                });
1233af6ab5fSopenharmony_ci            });
1243af6ab5fSopenharmony_ci        });
1253af6ab5fSopenharmony_ci    });
1263af6ab5fSopenharmony_ci}
1273af6ab5fSopenharmony_ci
1283af6ab5fSopenharmony_cifunction main():void {
1293af6ab5fSopenharmony_ci    bool2Levels();
1303af6ab5fSopenharmony_ci    bool4Levels();
1313af6ab5fSopenharmony_ci    bool4LevelsBi();
1323af6ab5fSopenharmony_ci    number4Levels();
1333af6ab5fSopenharmony_ci    arrays();
1343af6ab5fSopenharmony_ci}
135