Skip to content

Commit 5cb2b6a

Browse files
committed
Adding tests
1 parent 5ab5338 commit 5cb2b6a

8 files changed

Lines changed: 300 additions & 0 deletions
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [declarationEmitFBoundedTypeParams.ts]
2+
3+
// Repro from #6040
4+
5+
function append<a, b extends a>(result: a[], value: b): a[] {
6+
result.push(value);
7+
return result;
8+
}
9+
10+
11+
//// [declarationEmitFBoundedTypeParams.js]
12+
// Repro from #6040
13+
function append(result, value) {
14+
result.push(value);
15+
return result;
16+
}
17+
18+
19+
//// [declarationEmitFBoundedTypeParams.d.ts]
20+
declare function append<a, b extends a>(result: a[], value: b): a[];
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== tests/cases/compiler/declarationEmitFBoundedTypeParams.ts ===
2+
3+
// Repro from #6040
4+
5+
function append<a, b extends a>(result: a[], value: b): a[] {
6+
>append : Symbol(append, Decl(declarationEmitFBoundedTypeParams.ts, 0, 0))
7+
>a : Symbol(a, Decl(declarationEmitFBoundedTypeParams.ts, 3, 16))
8+
>b : Symbol(b, Decl(declarationEmitFBoundedTypeParams.ts, 3, 18))
9+
>a : Symbol(a, Decl(declarationEmitFBoundedTypeParams.ts, 3, 16))
10+
>result : Symbol(result, Decl(declarationEmitFBoundedTypeParams.ts, 3, 32))
11+
>a : Symbol(a, Decl(declarationEmitFBoundedTypeParams.ts, 3, 16))
12+
>value : Symbol(value, Decl(declarationEmitFBoundedTypeParams.ts, 3, 44))
13+
>b : Symbol(b, Decl(declarationEmitFBoundedTypeParams.ts, 3, 18))
14+
>a : Symbol(a, Decl(declarationEmitFBoundedTypeParams.ts, 3, 16))
15+
16+
result.push(value);
17+
>result.push : Symbol(Array.push, Decl(lib.d.ts, --, --))
18+
>result : Symbol(result, Decl(declarationEmitFBoundedTypeParams.ts, 3, 32))
19+
>push : Symbol(Array.push, Decl(lib.d.ts, --, --))
20+
>value : Symbol(value, Decl(declarationEmitFBoundedTypeParams.ts, 3, 44))
21+
22+
return result;
23+
>result : Symbol(result, Decl(declarationEmitFBoundedTypeParams.ts, 3, 32))
24+
}
25+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
=== tests/cases/compiler/declarationEmitFBoundedTypeParams.ts ===
2+
3+
// Repro from #6040
4+
5+
function append<a, b extends a>(result: a[], value: b): a[] {
6+
>append : <a, b extends a>(result: a[], value: b) => a[]
7+
>a : a
8+
>b : b
9+
>a : a
10+
>result : a[]
11+
>a : a
12+
>value : b
13+
>b : b
14+
>a : a
15+
16+
result.push(value);
17+
>result.push(value) : number
18+
>result.push : (...items: a[]) => number
19+
>result : a[]
20+
>push : (...items: a[]) => number
21+
>value : b
22+
23+
return result;
24+
>result : a[]
25+
}
26+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//// [typeInferenceFBoundedTypeParams.ts]
2+
// Example from #6037
3+
4+
function fold<a, r>(values: a[], result: r, fold: (result: r, value: a) => r): r {
5+
for (let value of values) {
6+
result = fold(result, value);
7+
}
8+
return result;
9+
}
10+
11+
function append<a, b extends a>(values: a[], value: b): a[] {
12+
values.push(value);
13+
return values;
14+
}
15+
16+
fold(
17+
[1, 2, 3],
18+
[] as [string, string][],
19+
(result, value) => append(
20+
result,
21+
["", ""]
22+
)
23+
);
24+
25+
26+
//// [typeInferenceFBoundedTypeParams.js]
27+
// Example from #6037
28+
function fold(values, result, fold) {
29+
for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
30+
var value = values_1[_i];
31+
result = fold(result, value);
32+
}
33+
return result;
34+
}
35+
function append(values, value) {
36+
values.push(value);
37+
return values;
38+
}
39+
fold([1, 2, 3], [], function (result, value) { return append(result, ["", ""]); });
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
=== tests/cases/compiler/typeInferenceFBoundedTypeParams.ts ===
2+
// Example from #6037
3+
4+
function fold<a, r>(values: a[], result: r, fold: (result: r, value: a) => r): r {
5+
>fold : Symbol(fold, Decl(typeInferenceFBoundedTypeParams.ts, 0, 0))
6+
>a : Symbol(a, Decl(typeInferenceFBoundedTypeParams.ts, 2, 14))
7+
>r : Symbol(r, Decl(typeInferenceFBoundedTypeParams.ts, 2, 16))
8+
>values : Symbol(values, Decl(typeInferenceFBoundedTypeParams.ts, 2, 20))
9+
>a : Symbol(a, Decl(typeInferenceFBoundedTypeParams.ts, 2, 14))
10+
>result : Symbol(result, Decl(typeInferenceFBoundedTypeParams.ts, 2, 32))
11+
>r : Symbol(r, Decl(typeInferenceFBoundedTypeParams.ts, 2, 16))
12+
>fold : Symbol(fold, Decl(typeInferenceFBoundedTypeParams.ts, 2, 43))
13+
>result : Symbol(result, Decl(typeInferenceFBoundedTypeParams.ts, 2, 51))
14+
>r : Symbol(r, Decl(typeInferenceFBoundedTypeParams.ts, 2, 16))
15+
>value : Symbol(value, Decl(typeInferenceFBoundedTypeParams.ts, 2, 61))
16+
>a : Symbol(a, Decl(typeInferenceFBoundedTypeParams.ts, 2, 14))
17+
>r : Symbol(r, Decl(typeInferenceFBoundedTypeParams.ts, 2, 16))
18+
>r : Symbol(r, Decl(typeInferenceFBoundedTypeParams.ts, 2, 16))
19+
20+
for (let value of values) {
21+
>value : Symbol(value, Decl(typeInferenceFBoundedTypeParams.ts, 3, 12))
22+
>values : Symbol(values, Decl(typeInferenceFBoundedTypeParams.ts, 2, 20))
23+
24+
result = fold(result, value);
25+
>result : Symbol(result, Decl(typeInferenceFBoundedTypeParams.ts, 2, 32))
26+
>fold : Symbol(fold, Decl(typeInferenceFBoundedTypeParams.ts, 2, 43))
27+
>result : Symbol(result, Decl(typeInferenceFBoundedTypeParams.ts, 2, 32))
28+
>value : Symbol(value, Decl(typeInferenceFBoundedTypeParams.ts, 3, 12))
29+
}
30+
return result;
31+
>result : Symbol(result, Decl(typeInferenceFBoundedTypeParams.ts, 2, 32))
32+
}
33+
34+
function append<a, b extends a>(values: a[], value: b): a[] {
35+
>append : Symbol(append, Decl(typeInferenceFBoundedTypeParams.ts, 7, 1))
36+
>a : Symbol(a, Decl(typeInferenceFBoundedTypeParams.ts, 9, 16))
37+
>b : Symbol(b, Decl(typeInferenceFBoundedTypeParams.ts, 9, 18))
38+
>a : Symbol(a, Decl(typeInferenceFBoundedTypeParams.ts, 9, 16))
39+
>values : Symbol(values, Decl(typeInferenceFBoundedTypeParams.ts, 9, 32))
40+
>a : Symbol(a, Decl(typeInferenceFBoundedTypeParams.ts, 9, 16))
41+
>value : Symbol(value, Decl(typeInferenceFBoundedTypeParams.ts, 9, 44))
42+
>b : Symbol(b, Decl(typeInferenceFBoundedTypeParams.ts, 9, 18))
43+
>a : Symbol(a, Decl(typeInferenceFBoundedTypeParams.ts, 9, 16))
44+
45+
values.push(value);
46+
>values.push : Symbol(Array.push, Decl(lib.d.ts, --, --))
47+
>values : Symbol(values, Decl(typeInferenceFBoundedTypeParams.ts, 9, 32))
48+
>push : Symbol(Array.push, Decl(lib.d.ts, --, --))
49+
>value : Symbol(value, Decl(typeInferenceFBoundedTypeParams.ts, 9, 44))
50+
51+
return values;
52+
>values : Symbol(values, Decl(typeInferenceFBoundedTypeParams.ts, 9, 32))
53+
}
54+
55+
fold(
56+
>fold : Symbol(fold, Decl(typeInferenceFBoundedTypeParams.ts, 0, 0))
57+
58+
[1, 2, 3],
59+
[] as [string, string][],
60+
(result, value) => append(
61+
>result : Symbol(result, Decl(typeInferenceFBoundedTypeParams.ts, 17, 5))
62+
>value : Symbol(value, Decl(typeInferenceFBoundedTypeParams.ts, 17, 12))
63+
>append : Symbol(append, Decl(typeInferenceFBoundedTypeParams.ts, 7, 1))
64+
65+
result,
66+
>result : Symbol(result, Decl(typeInferenceFBoundedTypeParams.ts, 17, 5))
67+
68+
["", ""]
69+
)
70+
);
71+
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
=== tests/cases/compiler/typeInferenceFBoundedTypeParams.ts ===
2+
// Example from #6037
3+
4+
function fold<a, r>(values: a[], result: r, fold: (result: r, value: a) => r): r {
5+
>fold : <a, r>(values: a[], result: r, fold: (result: r, value: a) => r) => r
6+
>a : a
7+
>r : r
8+
>values : a[]
9+
>a : a
10+
>result : r
11+
>r : r
12+
>fold : (result: r, value: a) => r
13+
>result : r
14+
>r : r
15+
>value : a
16+
>a : a
17+
>r : r
18+
>r : r
19+
20+
for (let value of values) {
21+
>value : a
22+
>values : a[]
23+
24+
result = fold(result, value);
25+
>result = fold(result, value) : r
26+
>result : r
27+
>fold(result, value) : r
28+
>fold : (result: r, value: a) => r
29+
>result : r
30+
>value : a
31+
}
32+
return result;
33+
>result : r
34+
}
35+
36+
function append<a, b extends a>(values: a[], value: b): a[] {
37+
>append : <a, b extends a>(values: a[], value: b) => a[]
38+
>a : a
39+
>b : b
40+
>a : a
41+
>values : a[]
42+
>a : a
43+
>value : b
44+
>b : b
45+
>a : a
46+
47+
values.push(value);
48+
>values.push(value) : number
49+
>values.push : (...items: a[]) => number
50+
>values : a[]
51+
>push : (...items: a[]) => number
52+
>value : b
53+
54+
return values;
55+
>values : a[]
56+
}
57+
58+
fold(
59+
>fold( [1, 2, 3], [] as [string, string][], (result, value) => append( result, ["", ""] )) : [string, string][]
60+
>fold : <a, r>(values: a[], result: r, fold: (result: r, value: a) => r) => r
61+
62+
[1, 2, 3],
63+
>[1, 2, 3] : number[]
64+
>1 : number
65+
>2 : number
66+
>3 : number
67+
68+
[] as [string, string][],
69+
>[] as [string, string][] : [string, string][]
70+
>[] : undefined[]
71+
72+
(result, value) => append(
73+
>(result, value) => append( result, ["", ""] ) : (result: [string, string][], value: number) => [string, string][]
74+
>result : [string, string][]
75+
>value : number
76+
>append( result, ["", ""] ) : [string, string][]
77+
>append : <a, b extends a>(values: a[], value: b) => a[]
78+
79+
result,
80+
>result : [string, string][]
81+
82+
["", ""]
83+
>["", ""] : [string, string]
84+
>"" : string
85+
>"" : string
86+
87+
)
88+
);
89+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// @declaration: true
2+
3+
// Repro from #6040
4+
5+
function append<a, b extends a>(result: a[], value: b): a[] {
6+
result.push(value);
7+
return result;
8+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Example from #6037
2+
3+
function fold<a, r>(values: a[], result: r, fold: (result: r, value: a) => r): r {
4+
for (let value of values) {
5+
result = fold(result, value);
6+
}
7+
return result;
8+
}
9+
10+
function append<a, b extends a>(values: a[], value: b): a[] {
11+
values.push(value);
12+
return values;
13+
}
14+
15+
fold(
16+
[1, 2, 3],
17+
[] as [string, string][],
18+
(result, value) => append(
19+
result,
20+
["", ""]
21+
)
22+
);

0 commit comments

Comments
 (0)