Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0a4f60e

Browse filesBrowse files
committed
Add tests
1 parent a8160de commit 0a4f60e
Copy full SHA for 0a4f60e

4 files changed

+214Lines changed: 214 additions & 0 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//// [neverInference.ts]
2+
declare function f<T>(x: T[]): T;
3+
4+
let neverArray: never[] = [];
5+
6+
let a1 = f([]); // {}
7+
let a2 = f(neverArray); // never
8+
9+
// Repro from #19576
10+
11+
type Comparator<T> = (x: T, y: T) => number;
12+
13+
interface LinkedList<T> {
14+
comparator: Comparator<T>,
15+
nodes: Node<T>
16+
}
17+
18+
type Node<T> = { value: T, next: Node<T> } | null
19+
20+
declare function compareNumbers(x: number, y: number): number;
21+
declare function mkList<T>(items: T[], comparator: Comparator<T>): LinkedList<T>;
22+
23+
const list: LinkedList<number> = mkList([], compareNumbers);
24+
25+
26+
//// [neverInference.js]
27+
"use strict";
28+
var neverArray = [];
29+
var a1 = f([]); // {}
30+
var a2 = f(neverArray); // never
31+
var list = mkList([], compareNumbers);
Collapse file
+76Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
=== tests/cases/conformance/types/never/neverInference.ts ===
2+
declare function f<T>(x: T[]): T;
3+
>f : Symbol(f, Decl(neverInference.ts, 0, 0))
4+
>T : Symbol(T, Decl(neverInference.ts, 0, 19))
5+
>x : Symbol(x, Decl(neverInference.ts, 0, 22))
6+
>T : Symbol(T, Decl(neverInference.ts, 0, 19))
7+
>T : Symbol(T, Decl(neverInference.ts, 0, 19))
8+
9+
let neverArray: never[] = [];
10+
>neverArray : Symbol(neverArray, Decl(neverInference.ts, 2, 3))
11+
12+
let a1 = f([]); // {}
13+
>a1 : Symbol(a1, Decl(neverInference.ts, 4, 3))
14+
>f : Symbol(f, Decl(neverInference.ts, 0, 0))
15+
16+
let a2 = f(neverArray); // never
17+
>a2 : Symbol(a2, Decl(neverInference.ts, 5, 3))
18+
>f : Symbol(f, Decl(neverInference.ts, 0, 0))
19+
>neverArray : Symbol(neverArray, Decl(neverInference.ts, 2, 3))
20+
21+
// Repro from #19576
22+
23+
type Comparator<T> = (x: T, y: T) => number;
24+
>Comparator : Symbol(Comparator, Decl(neverInference.ts, 5, 23))
25+
>T : Symbol(T, Decl(neverInference.ts, 9, 16))
26+
>x : Symbol(x, Decl(neverInference.ts, 9, 22))
27+
>T : Symbol(T, Decl(neverInference.ts, 9, 16))
28+
>y : Symbol(y, Decl(neverInference.ts, 9, 27))
29+
>T : Symbol(T, Decl(neverInference.ts, 9, 16))
30+
31+
interface LinkedList<T> {
32+
>LinkedList : Symbol(LinkedList, Decl(neverInference.ts, 9, 44))
33+
>T : Symbol(T, Decl(neverInference.ts, 11, 21))
34+
35+
comparator: Comparator<T>,
36+
>comparator : Symbol(LinkedList.comparator, Decl(neverInference.ts, 11, 25))
37+
>Comparator : Symbol(Comparator, Decl(neverInference.ts, 5, 23))
38+
>T : Symbol(T, Decl(neverInference.ts, 11, 21))
39+
40+
nodes: Node<T>
41+
>nodes : Symbol(LinkedList.nodes, Decl(neverInference.ts, 12, 30))
42+
>Node : Symbol(Node, Decl(neverInference.ts, 14, 1))
43+
>T : Symbol(T, Decl(neverInference.ts, 11, 21))
44+
}
45+
46+
type Node<T> = { value: T, next: Node<T> } | null
47+
>Node : Symbol(Node, Decl(neverInference.ts, 14, 1))
48+
>T : Symbol(T, Decl(neverInference.ts, 16, 10))
49+
>value : Symbol(value, Decl(neverInference.ts, 16, 16))
50+
>T : Symbol(T, Decl(neverInference.ts, 16, 10))
51+
>next : Symbol(next, Decl(neverInference.ts, 16, 26))
52+
>Node : Symbol(Node, Decl(neverInference.ts, 14, 1))
53+
>T : Symbol(T, Decl(neverInference.ts, 16, 10))
54+
55+
declare function compareNumbers(x: number, y: number): number;
56+
>compareNumbers : Symbol(compareNumbers, Decl(neverInference.ts, 16, 49))
57+
>x : Symbol(x, Decl(neverInference.ts, 18, 32))
58+
>y : Symbol(y, Decl(neverInference.ts, 18, 42))
59+
60+
declare function mkList<T>(items: T[], comparator: Comparator<T>): LinkedList<T>;
61+
>mkList : Symbol(mkList, Decl(neverInference.ts, 18, 62))
62+
>T : Symbol(T, Decl(neverInference.ts, 19, 24))
63+
>items : Symbol(items, Decl(neverInference.ts, 19, 27))
64+
>T : Symbol(T, Decl(neverInference.ts, 19, 24))
65+
>comparator : Symbol(comparator, Decl(neverInference.ts, 19, 38))
66+
>Comparator : Symbol(Comparator, Decl(neverInference.ts, 5, 23))
67+
>T : Symbol(T, Decl(neverInference.ts, 19, 24))
68+
>LinkedList : Symbol(LinkedList, Decl(neverInference.ts, 9, 44))
69+
>T : Symbol(T, Decl(neverInference.ts, 19, 24))
70+
71+
const list: LinkedList<number> = mkList([], compareNumbers);
72+
>list : Symbol(list, Decl(neverInference.ts, 21, 5))
73+
>LinkedList : Symbol(LinkedList, Decl(neverInference.ts, 9, 44))
74+
>mkList : Symbol(mkList, Decl(neverInference.ts, 18, 62))
75+
>compareNumbers : Symbol(compareNumbers, Decl(neverInference.ts, 16, 49))
76+
Collapse file
+83Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
=== tests/cases/conformance/types/never/neverInference.ts ===
2+
declare function f<T>(x: T[]): T;
3+
>f : <T>(x: T[]) => T
4+
>T : T
5+
>x : T[]
6+
>T : T
7+
>T : T
8+
9+
let neverArray: never[] = [];
10+
>neverArray : never[]
11+
>[] : never[]
12+
13+
let a1 = f([]); // {}
14+
>a1 : {}
15+
>f([]) : {}
16+
>f : <T>(x: T[]) => T
17+
>[] : never[]
18+
19+
let a2 = f(neverArray); // never
20+
>a2 : never
21+
>f(neverArray) : never
22+
>f : <T>(x: T[]) => T
23+
>neverArray : never[]
24+
25+
// Repro from #19576
26+
27+
type Comparator<T> = (x: T, y: T) => number;
28+
>Comparator : Comparator<T>
29+
>T : T
30+
>x : T
31+
>T : T
32+
>y : T
33+
>T : T
34+
35+
interface LinkedList<T> {
36+
>LinkedList : LinkedList<T>
37+
>T : T
38+
39+
comparator: Comparator<T>,
40+
>comparator : Comparator<T>
41+
>Comparator : Comparator<T>
42+
>T : T
43+
44+
nodes: Node<T>
45+
>nodes : Node<T>
46+
>Node : Node<T>
47+
>T : T
48+
}
49+
50+
type Node<T> = { value: T, next: Node<T> } | null
51+
>Node : Node<T>
52+
>T : T
53+
>value : T
54+
>T : T
55+
>next : Node<T>
56+
>Node : Node<T>
57+
>T : T
58+
>null : null
59+
60+
declare function compareNumbers(x: number, y: number): number;
61+
>compareNumbers : (x: number, y: number) => number
62+
>x : number
63+
>y : number
64+
65+
declare function mkList<T>(items: T[], comparator: Comparator<T>): LinkedList<T>;
66+
>mkList : <T>(items: T[], comparator: Comparator<T>) => LinkedList<T>
67+
>T : T
68+
>items : T[]
69+
>T : T
70+
>comparator : Comparator<T>
71+
>Comparator : Comparator<T>
72+
>T : T
73+
>LinkedList : LinkedList<T>
74+
>T : T
75+
76+
const list: LinkedList<number> = mkList([], compareNumbers);
77+
>list : LinkedList<number>
78+
>LinkedList : LinkedList<T>
79+
>mkList([], compareNumbers) : LinkedList<number>
80+
>mkList : <T>(items: T[], comparator: Comparator<T>) => LinkedList<T>
81+
>[] : never[]
82+
>compareNumbers : (x: number, y: number) => number
83+
Collapse file
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// @strict: true
2+
3+
declare function f<T>(x: T[]): T;
4+
5+
let neverArray: never[] = [];
6+
7+
let a1 = f([]); // {}
8+
let a2 = f(neverArray); // never
9+
10+
// Repro from #19576
11+
12+
type Comparator<T> = (x: T, y: T) => number;
13+
14+
interface LinkedList<T> {
15+
comparator: Comparator<T>,
16+
nodes: Node<T>
17+
}
18+
19+
type Node<T> = { value: T, next: Node<T> } | null
20+
21+
declare function compareNumbers(x: number, y: number): number;
22+
declare function mkList<T>(items: T[], comparator: Comparator<T>): LinkedList<T>;
23+
24+
const list: LinkedList<number> = mkList([], compareNumbers);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.