/*
 * Copyright (c) 2022-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.
 */


var [var1, var2] = [1, "foo", true];
var1 = 2;
var2 = "bar";

var var3: number;
var var4: boolean;
var [var3, , var4] = [var1, , true];

var [var5 = 2] = ["foo"];
var var5: number | string;

var [var6 = 1, var7 = "asd", var8 = true] = [];
var var6: number;
var var7: string;
var var8: boolean;

var [var9, [var10, , var11], ...var12] = [{ a: 6, b: "bar" }, [42, , "foo" + 2]];
var9 = { a: 5, b: "foo" };
var10 = var3;
var11 = var7;
var12 = [];

var [var13 = [1, "foo"], [var14, var15] = [{}, true], ...var16] = [3, [true, {}], function (a: any, b: any): number { return 12 }, "bar"];
var13 = 5;
var13 = [2, "baz"];
var14 = {};
var14 = false;
var15 = var14;
var var16: [(a: any, b: any) => number, string];

var [var17, var18 = 6, var19]: [number, number | string, boolean[]] = [1, "foo", [true, false]];
var [var20, , var21]: number[] | [number, number, string] = [];
var [var22, var23 = [{ a: 5, b: "foo" }, false], var24]: string[] | [number, ({ a: number, b: string } | boolean)[]] = [1, [{ a: 1, b: "bat" }, true]];
var [[var25, var26] = ["foo", {}], [[var27]]]: number[][][] | [[number | string, {}], [[number]]] = [[1, {}], [[3]]];
var [var28 = {}, { var29 }, ...var30]: [{}, { var29: number }, number, string] = [{}, { var29: 5 }, 1, "foo"];

var var31: number;
var var32: boolean;

[var31, var32] = [var31, true];
[var31, var31] = [5, 6];
[var31, var32] = [var31, true, false, 5];

var var33: number;
var var34: boolean;

[var33, var34] = [var31, var32];

var var35: string | number;

[var35 = 2] = ["foo"];

var var36: number;
var var37: string;
var var38: boolean;
[var36 = 1, var37 = "asd", var38 = true] = [];

var var39 = {};
var var40 = var33;
var var41 = var37;
var var42 = [];
[var39, [var40, , var41 = "bar"], ...var42] = [{}, [42, , "foo" + 2]];
[var39, [var40, , var41 = "bar"], ...var42] = [{}, [42, , "foo" + 2], 3, "baz", false];

[var39, [var40, , var41 = "bar"] = [45, , "baz"], ...var42] = [{}, [42, , "foo" + 2]];

var var43 = [45, , "baz"] as const;

var var44 = "foo";

[var39, [var40, , var41 = "bar"] = var43, ...var42] = [{}, [42, , var44 + 2]];

var var45: string[];
var var46: number[];
var var47: (string | number)[];
var var48: string[];

[var45, var46, var47, var47, var47, ...var48] = [["foo", "bar"], [1, 2], ["foo", "bar"], [1, 2], [1, "foo"], "bar", "bar"]

var var49: string[];
var var50: number[];
[[...var49], ...var50] = [["foo", "bar"], 1, 2]