TypeScript/tests/baselines/reference/controlFlowLoopAnalysis.types
Nathan Shively-Sanders 71c1da020f
redo #28564 (#36665)
2020-02-07 09:55:29 -08:00

138 lines
2.5 KiB
Plaintext

=== tests/cases/compiler/controlFlowLoopAnalysis.ts ===
// Repro from #8418
let cond: boolean;
>cond : boolean
function foo(x: number): number { return 1; }
>foo : (x: number) => number
>x : number
>1 : 1
function test1() {
>test1 : () => void
let x: number | undefined;
>x : number | undefined
while (cond) {
>cond : boolean
while (cond) {
>cond : true
while (cond) {
>cond : true
x = foo(x);
>x = foo(x) : number
>x : number | undefined
>foo(x) : number
>foo : (x: number) => number
>x : number | undefined
}
}
x = 1;
>x = 1 : 1
>x : number | undefined
>1 : 1
}
}
// Repro from #8418
function test2() {
>test2 : () => void
let x: number | undefined;
>x : number | undefined
x = 1;
>x = 1 : 1
>x : number | undefined
>1 : 1
while (cond) {
>cond : boolean
while (cond) {
>cond : true
x = foo(x);
>x = foo(x) : number
>x : number | undefined
>foo(x) : number
>foo : (x: number) => number
>x : number
}
}
}
// Repro from #8511
function mapUntilCant<a, b>(
>mapUntilCant : <a, b>(values: a[], canTake: (value: a, index: number) => boolean, mapping: (value: a, index: number) => b) => b[]
values: a[],
>values : a[]
canTake: (value: a, index: number) => boolean,
>canTake : (value: a, index: number) => boolean
>value : a
>index : number
mapping: (value: a, index: number) => b
>mapping : (value: a, index: number) => b
>value : a
>index : number
): b[] {
let result: b[] = [];
>result : b[]
>[] : never[]
for (let index = 0, length = values.length; index < length; index++) {
>index : number
>0 : 0
>length : number
>values.length : number
>values : a[]
>length : number
>index < length : boolean
>index : number
>length : number
>index++ : number
>index : number
let value = values[index];
>value : a
>values[index] : a
>values : a[]
>index : number
if (canTake(value, index)) {
>canTake(value, index) : boolean
>canTake : (value: a, index: number) => boolean
>value : a
>index : number
result.push(mapping(value, index));
>result.push(mapping(value, index)) : number
>result.push : (...items: b[]) => number
>result : b[]
>push : (...items: b[]) => number
>mapping(value, index) : b
>mapping : (value: a, index: number) => b
>value : a
>index : number
} else {
return result;
>result : b[]
}
}
return result;
>result : b[]
}