1/*
2 * Copyright (c) 2022-2024 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
16
17var tuple1: [] = [];
18var tuple2: [[[]]] = [[[]]];
19var tuple3: [number, number, number] = [1, 2, 3];
20var tuple4: [typeof tuple1, string] = [[], "foo"];
21var tuple5: [[a: number, b?: string], [boolean | string, number[]]] = [[1], ["foo", [1, 2, 3]]];
22
23var tuple6: [number] | [string] = [5];
24var tuple7: [number, string] | number | string = [5, "foo"];
25var tuple8: (boolean | { a: number, b: string })[] | [string, number | string] = [false, { a: 5, b: "foo" }];
26
27var tuple9: [number, string | number, boolean | string];
28var tuple10: [number, string, string];
29var tuple11: [a: number, b: number | string, c: boolean];
30var tuple12: [a: number, b: string, c: boolean, d?: any];
31var tuple13: [a?: number, b?: number, c?: number];
32
33tuple9 = tuple10;
34tuple9 = tuple11;
35tuple9 = tuple12;
36tuple11 = tuple12;
37tuple13 = tuple1;
38tuple13 = tuple13;
39
40var tuple14 = [[1, 2], func1(1, "foo"), true] as [a?: [number, number], b?: [a: number, b?: boolean[]], c?: boolean];
41tuple14 = [];
42tuple14 = [[1, 2]];
43tuple14 = [[3, 4], [5]];
44tuple14 = [[6, 7], [8, [true, false]]];
45tuple14 = [[9, 10], [11, [true, false]], true];
46
47function func1(a: number, b: string): [a: number, b?: boolean[]] {
48    var tuple15: [number];
49    tuple15 = [123];
50    return tuple15;
51}
52
53var tuple16: [typeof tuple10, typeof tuple1, number];
54
55function func2(a: typeof tuple16, b?: [number, boolean]): [typeof func2, string] {
56    return [func2, "foo"];
57}
58
59var tuple17 = func2([[1, "foo", "bar"], [], 2]);
60var tuple18 = func2([[3, "baz", "qux"], [], 4], [5, true]);
61
62var a: string = tuple17[1];
63var b: typeof func2 = tuple18[0];
64b([[1, "foo", "bar"], [], 2]);
65
66var tuple19: [number, string] | [number, string];
67var tuple20: [a: string, b: number, c?: boolean];
68var tuple21: number | typeof tuple20 | [a: string, b: number];
69var tuple22: [number, string];
70tuple21 = tuple20;
71tuple19 = tuple22;
72
73var tuple23: [number, number, number] | [number, number, number, number];
74tuple23 = [1, 2, 3];
75tuple23 = [1, 2, 3, 4];
76
77var tuple24: number[][] | string[][] | [[number, number], [string, string]];
78tuple24 = [[1, 2, 3]];
79tuple24 = [[1, 2], ["foo", "bar"]];
80tuple24 = [["foo", "bar", "baz"]];
81
82var tuple25: number[] | [string, string] | number;
83tuple25 = [1, 2, 3, 4, 5];
84tuple25 = ["foo", "bar"];
85tuple25 = 12;
86