Skip to content

Commit e9f81ce

Browse files
committed
Add tests
1 parent 513ef34 commit e9f81ce

4 files changed

Lines changed: 204 additions & 0 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//// [deferredConditionalTypes.ts]
2+
type T0<X, Y> = X extends Y ? true : false; // Deferred
3+
type T1<X, Y> = [X] extends [Y] ? true : false; // Deferred
4+
type T2<X, Y> = [X, X] extends [Y, Y] ? true : false; // Deferred
5+
type T3<X, Y> = [X, X, X] extends [Y, Y, Y] ? true : false; // Deferred
6+
7+
type T4<X, Y> = [X] extends [Y, Y] ? true : false; // false
8+
type T5<X, Y> = [X, X] extends [Y] ? true : false; // false
9+
10+
// Repro from #52068
11+
12+
type Or<A extends boolean, B extends boolean> = [A, B] extends [false, false] ? false : true;
13+
type And<A extends boolean, B extends boolean> = [A, B] extends [true, true] ? true : false;
14+
type Not<T extends boolean> = T extends true ? false : true;
15+
type Extends<A, B> = A extends B ? true : false;
16+
17+
type IsNumberLiteral<T> = And<Extends<T, number>, Not<Extends<number, T>>>;
18+
19+
type IsLiteral<T> = Or<false, IsNumberLiteral<T>>;
20+
21+
22+
//// [deferredConditionalTypes.js]
23+
"use strict";
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
=== tests/cases/compiler/deferredConditionalTypes.ts ===
2+
type T0<X, Y> = X extends Y ? true : false; // Deferred
3+
>T0 : Symbol(T0, Decl(deferredConditionalTypes.ts, 0, 0))
4+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 0, 8))
5+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 0, 10))
6+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 0, 8))
7+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 0, 10))
8+
9+
type T1<X, Y> = [X] extends [Y] ? true : false; // Deferred
10+
>T1 : Symbol(T1, Decl(deferredConditionalTypes.ts, 0, 43))
11+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 1, 8))
12+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 1, 10))
13+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 1, 8))
14+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 1, 10))
15+
16+
type T2<X, Y> = [X, X] extends [Y, Y] ? true : false; // Deferred
17+
>T2 : Symbol(T2, Decl(deferredConditionalTypes.ts, 1, 47))
18+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 2, 8))
19+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 2, 10))
20+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 2, 8))
21+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 2, 8))
22+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 2, 10))
23+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 2, 10))
24+
25+
type T3<X, Y> = [X, X, X] extends [Y, Y, Y] ? true : false; // Deferred
26+
>T3 : Symbol(T3, Decl(deferredConditionalTypes.ts, 2, 53))
27+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 3, 8))
28+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 3, 10))
29+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 3, 8))
30+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 3, 8))
31+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 3, 8))
32+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 3, 10))
33+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 3, 10))
34+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 3, 10))
35+
36+
type T4<X, Y> = [X] extends [Y, Y] ? true : false; // false
37+
>T4 : Symbol(T4, Decl(deferredConditionalTypes.ts, 3, 59))
38+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 5, 8))
39+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 5, 10))
40+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 5, 8))
41+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 5, 10))
42+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 5, 10))
43+
44+
type T5<X, Y> = [X, X] extends [Y] ? true : false; // false
45+
>T5 : Symbol(T5, Decl(deferredConditionalTypes.ts, 5, 50))
46+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 6, 8))
47+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 6, 10))
48+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 6, 8))
49+
>X : Symbol(X, Decl(deferredConditionalTypes.ts, 6, 8))
50+
>Y : Symbol(Y, Decl(deferredConditionalTypes.ts, 6, 10))
51+
52+
// Repro from #52068
53+
54+
type Or<A extends boolean, B extends boolean> = [A, B] extends [false, false] ? false : true;
55+
>Or : Symbol(Or, Decl(deferredConditionalTypes.ts, 6, 50))
56+
>A : Symbol(A, Decl(deferredConditionalTypes.ts, 10, 8))
57+
>B : Symbol(B, Decl(deferredConditionalTypes.ts, 10, 26))
58+
>A : Symbol(A, Decl(deferredConditionalTypes.ts, 10, 8))
59+
>B : Symbol(B, Decl(deferredConditionalTypes.ts, 10, 26))
60+
61+
type And<A extends boolean, B extends boolean> = [A, B] extends [true, true] ? true : false;
62+
>And : Symbol(And, Decl(deferredConditionalTypes.ts, 10, 93))
63+
>A : Symbol(A, Decl(deferredConditionalTypes.ts, 11, 9))
64+
>B : Symbol(B, Decl(deferredConditionalTypes.ts, 11, 27))
65+
>A : Symbol(A, Decl(deferredConditionalTypes.ts, 11, 9))
66+
>B : Symbol(B, Decl(deferredConditionalTypes.ts, 11, 27))
67+
68+
type Not<T extends boolean> = T extends true ? false : true;
69+
>Not : Symbol(Not, Decl(deferredConditionalTypes.ts, 11, 92))
70+
>T : Symbol(T, Decl(deferredConditionalTypes.ts, 12, 9))
71+
>T : Symbol(T, Decl(deferredConditionalTypes.ts, 12, 9))
72+
73+
type Extends<A, B> = A extends B ? true : false;
74+
>Extends : Symbol(Extends, Decl(deferredConditionalTypes.ts, 12, 60))
75+
>A : Symbol(A, Decl(deferredConditionalTypes.ts, 13, 13))
76+
>B : Symbol(B, Decl(deferredConditionalTypes.ts, 13, 15))
77+
>A : Symbol(A, Decl(deferredConditionalTypes.ts, 13, 13))
78+
>B : Symbol(B, Decl(deferredConditionalTypes.ts, 13, 15))
79+
80+
type IsNumberLiteral<T> = And<Extends<T, number>, Not<Extends<number, T>>>;
81+
>IsNumberLiteral : Symbol(IsNumberLiteral, Decl(deferredConditionalTypes.ts, 13, 48))
82+
>T : Symbol(T, Decl(deferredConditionalTypes.ts, 15, 21))
83+
>And : Symbol(And, Decl(deferredConditionalTypes.ts, 10, 93))
84+
>Extends : Symbol(Extends, Decl(deferredConditionalTypes.ts, 12, 60))
85+
>T : Symbol(T, Decl(deferredConditionalTypes.ts, 15, 21))
86+
>Not : Symbol(Not, Decl(deferredConditionalTypes.ts, 11, 92))
87+
>Extends : Symbol(Extends, Decl(deferredConditionalTypes.ts, 12, 60))
88+
>T : Symbol(T, Decl(deferredConditionalTypes.ts, 15, 21))
89+
90+
type IsLiteral<T> = Or<false, IsNumberLiteral<T>>;
91+
>IsLiteral : Symbol(IsLiteral, Decl(deferredConditionalTypes.ts, 15, 75))
92+
>T : Symbol(T, Decl(deferredConditionalTypes.ts, 17, 15))
93+
>Or : Symbol(Or, Decl(deferredConditionalTypes.ts, 6, 50))
94+
>IsNumberLiteral : Symbol(IsNumberLiteral, Decl(deferredConditionalTypes.ts, 13, 48))
95+
>T : Symbol(T, Decl(deferredConditionalTypes.ts, 17, 15))
96+
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
=== tests/cases/compiler/deferredConditionalTypes.ts ===
2+
type T0<X, Y> = X extends Y ? true : false; // Deferred
3+
>T0 : T0<X, Y>
4+
>true : true
5+
>false : false
6+
7+
type T1<X, Y> = [X] extends [Y] ? true : false; // Deferred
8+
>T1 : T1<X, Y>
9+
>true : true
10+
>false : false
11+
12+
type T2<X, Y> = [X, X] extends [Y, Y] ? true : false; // Deferred
13+
>T2 : T2<X, Y>
14+
>true : true
15+
>false : false
16+
17+
type T3<X, Y> = [X, X, X] extends [Y, Y, Y] ? true : false; // Deferred
18+
>T3 : T3<X, Y>
19+
>true : true
20+
>false : false
21+
22+
type T4<X, Y> = [X] extends [Y, Y] ? true : false; // false
23+
>T4 : false
24+
>true : true
25+
>false : false
26+
27+
type T5<X, Y> = [X, X] extends [Y] ? true : false; // false
28+
>T5 : false
29+
>true : true
30+
>false : false
31+
32+
// Repro from #52068
33+
34+
type Or<A extends boolean, B extends boolean> = [A, B] extends [false, false] ? false : true;
35+
>Or : Or<A, B>
36+
>false : false
37+
>false : false
38+
>false : false
39+
>true : true
40+
41+
type And<A extends boolean, B extends boolean> = [A, B] extends [true, true] ? true : false;
42+
>And : And<A, B>
43+
>true : true
44+
>true : true
45+
>true : true
46+
>false : false
47+
48+
type Not<T extends boolean> = T extends true ? false : true;
49+
>Not : Not<T>
50+
>true : true
51+
>false : false
52+
>true : true
53+
54+
type Extends<A, B> = A extends B ? true : false;
55+
>Extends : Extends<A, B>
56+
>true : true
57+
>false : false
58+
59+
type IsNumberLiteral<T> = And<Extends<T, number>, Not<Extends<number, T>>>;
60+
>IsNumberLiteral : IsNumberLiteral<T>
61+
62+
type IsLiteral<T> = Or<false, IsNumberLiteral<T>>;
63+
>IsLiteral : IsLiteral<T>
64+
>false : false
65+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// @strict: true
2+
3+
type T0<X, Y> = X extends Y ? true : false; // Deferred
4+
type T1<X, Y> = [X] extends [Y] ? true : false; // Deferred
5+
type T2<X, Y> = [X, X] extends [Y, Y] ? true : false; // Deferred
6+
type T3<X, Y> = [X, X, X] extends [Y, Y, Y] ? true : false; // Deferred
7+
8+
type T4<X, Y> = [X] extends [Y, Y] ? true : false; // false
9+
type T5<X, Y> = [X, X] extends [Y] ? true : false; // false
10+
11+
// Repro from #52068
12+
13+
type Or<A extends boolean, B extends boolean> = [A, B] extends [false, false] ? false : true;
14+
type And<A extends boolean, B extends boolean> = [A, B] extends [true, true] ? true : false;
15+
type Not<T extends boolean> = T extends true ? false : true;
16+
type Extends<A, B> = A extends B ? true : false;
17+
18+
type IsNumberLiteral<T> = And<Extends<T, number>, Not<Extends<number, T>>>;
19+
20+
type IsLiteral<T> = Or<false, IsNumberLiteral<T>>;

0 commit comments

Comments
 (0)