Skip to content

Commit 4a50f11

Browse files
committed
test: add a test for array non null inference
thanks to @Andarist for providing this test!
1 parent a5189b1 commit 4a50f11

File tree

4 files changed

+143
-10
lines changed

4 files changed

+143
-10
lines changed

tests/baselines/reference/nonNullFullInference.js

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,25 @@ function testNonNullInference(numbers: number[]) {
1212
last = n;
1313
}
1414

15-
last; // number
16-
last!; // number
15+
last;
16+
last!;
17+
}
18+
19+
function testNonNullInferenceWithArrays(numbers: number[]) {
20+
let result;
21+
const arr = [];
22+
23+
for (const n of numbers) {
24+
if (n % 2) {
25+
return [n];
26+
}
27+
28+
arr.push(n);
29+
result = arr;
30+
}
31+
32+
result;
33+
result!;
1734
}
1835

1936
//// [nonNullFullInference.js]
@@ -27,6 +44,20 @@ function testNonNullInference(numbers) {
2744
}
2845
last = n;
2946
}
30-
last; // number
31-
last; // number
47+
last;
48+
last;
49+
}
50+
function testNonNullInferenceWithArrays(numbers) {
51+
var result;
52+
var arr = [];
53+
for (var _i = 0, numbers_2 = numbers; _i < numbers_2.length; _i++) {
54+
var n = numbers_2[_i];
55+
if (n % 2) {
56+
return [n];
57+
}
58+
arr.push(n);
59+
result = arr;
60+
}
61+
result;
62+
result;
3263
}

tests/baselines/reference/nonNullFullInference.symbols

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,48 @@ function testNonNullInference(numbers: number[]) {
2424
>n : Symbol(n, Decl(nonNullFullInference.ts, 5, 14))
2525
}
2626

27-
last; // number
27+
last;
2828
>last : Symbol(last, Decl(nonNullFullInference.ts, 3, 7))
2929

30-
last!; // number
30+
last!;
3131
>last : Symbol(last, Decl(nonNullFullInference.ts, 3, 7))
3232
}
33+
34+
function testNonNullInferenceWithArrays(numbers: number[]) {
35+
>testNonNullInferenceWithArrays : Symbol(testNonNullInferenceWithArrays, Decl(nonNullFullInference.ts, 15, 1))
36+
>numbers : Symbol(numbers, Decl(nonNullFullInference.ts, 17, 40))
37+
38+
let result;
39+
>result : Symbol(result, Decl(nonNullFullInference.ts, 18, 7))
40+
41+
const arr = [];
42+
>arr : Symbol(arr, Decl(nonNullFullInference.ts, 19, 9))
43+
44+
for (const n of numbers) {
45+
>n : Symbol(n, Decl(nonNullFullInference.ts, 21, 14))
46+
>numbers : Symbol(numbers, Decl(nonNullFullInference.ts, 17, 40))
47+
48+
if (n % 2) {
49+
>n : Symbol(n, Decl(nonNullFullInference.ts, 21, 14))
50+
51+
return [n];
52+
>n : Symbol(n, Decl(nonNullFullInference.ts, 21, 14))
53+
}
54+
55+
arr.push(n);
56+
>arr.push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
57+
>arr : Symbol(arr, Decl(nonNullFullInference.ts, 19, 9))
58+
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
59+
>n : Symbol(n, Decl(nonNullFullInference.ts, 21, 14))
60+
61+
result = arr;
62+
>result : Symbol(result, Decl(nonNullFullInference.ts, 18, 7))
63+
>arr : Symbol(arr, Decl(nonNullFullInference.ts, 19, 9))
64+
}
65+
66+
result;
67+
>result : Symbol(result, Decl(nonNullFullInference.ts, 18, 7))
68+
69+
result!;
70+
>result : Symbol(result, Decl(nonNullFullInference.ts, 18, 7))
71+
}

tests/baselines/reference/nonNullFullInference.types

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,56 @@ function testNonNullInference(numbers: number[]) {
2727
>n : number
2828
}
2929

30-
last; // number
30+
last;
3131
>last : number
3232

33-
last!; // number
33+
last!;
3434
>last! : number
3535
>last : number
3636
}
37+
38+
function testNonNullInferenceWithArrays(numbers: number[]) {
39+
>testNonNullInferenceWithArrays : (numbers: number[]) => number[]
40+
>numbers : number[]
41+
42+
let result;
43+
>result : any
44+
45+
const arr = [];
46+
>arr : any[]
47+
>[] : undefined[]
48+
49+
for (const n of numbers) {
50+
>n : number
51+
>numbers : number[]
52+
53+
if (n % 2) {
54+
>n % 2 : number
55+
>n : number
56+
>2 : 2
57+
58+
return [n];
59+
>[n] : number[]
60+
>n : number
61+
}
62+
63+
arr.push(n);
64+
>arr.push(n) : number
65+
>arr.push : (...items: any[]) => number
66+
>arr : any[]
67+
>push : (...items: any[]) => number
68+
>n : number
69+
70+
result = arr;
71+
>result = arr : number[]
72+
>result : any
73+
>arr : number[]
74+
}
75+
76+
result;
77+
>result : number[]
78+
79+
result!;
80+
>result! : number[]
81+
>result : number[]
82+
}

tests/cases/compiler/nonNullFullInference.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,23 @@ function testNonNullInference(numbers: number[]) {
1212
last = n;
1313
}
1414

15-
last; // number
16-
last!; // number
15+
last;
16+
last!;
17+
}
18+
19+
function testNonNullInferenceWithArrays(numbers: number[]) {
20+
let result;
21+
const arr = [];
22+
23+
for (const n of numbers) {
24+
if (n % 2) {
25+
return [n];
26+
}
27+
28+
arr.push(n);
29+
result = arr;
30+
}
31+
32+
result;
33+
result!;
1734
}

0 commit comments

Comments
 (0)