/*
 * Copyright (c) 2024 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the 'License');
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an 'AS IS' BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import assert from 'assert';
let value1: number = 1;
assert.strictEqual(value1, 1);
function func1(): number {
    return value1;
}
assert.strictEqual(func1(), 1);
function func2(g: boolean): number {
    let h: number = 2;
    {
        let i: number = 3;
        assert.strictEqual(i, 3);
    }
    if (g) {
        return h;
    }
    else {
        // @ts-expect-error
        return value3; // This will cause an error as value3 is not defined in this scope
    }
}
assert.strictEqual(func2(true), 2);
try {
    func2(false);
}
catch (f) {
    assert.strictEqual((f as ReferenceError).name, 'ReferenceError');
    assert.strictEqual((f as ReferenceError).message, 'value3 is not defined');
}
function func3(c: boolean, d: number): number {
    if (c) {
        let e: number = 100;
        return e;
    }
    return d;
}
assert.strictEqual(func3(false, 0), 0);
assert.strictEqual(func3(true, 0), 100);
function func4(): string {
    let a: () => string;
    if (true) {
        let b: string = 'hello';
        a = function () {
            return b;
        };
    }
    return a();
}
assert.strictEqual(func4(), 'hello');
