Skip to content

Commit a84ac81

Browse files
committed
Add tests
1 parent 340dae5 commit a84ac81

File tree

4 files changed

+745
-0
lines changed

4 files changed

+745
-0
lines changed
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
//// [computedEnumTypeWidening.ts]
2+
declare function computed(x: number): number;
3+
4+
enum E {
5+
A = computed(0),
6+
B = computed(1),
7+
C = computed(2),
8+
D = computed(3),
9+
}
10+
11+
function f1() {
12+
const c1 = E.B; // Fresh E.B
13+
let v1 = c1; // E
14+
const c2 = c1; // Fresh E.B
15+
let v2 = c2; // E
16+
const c3: E.B = E.B; // E.B
17+
let v3 = c3; // E.B
18+
const c4: E.B = c1; // E.B
19+
let v4 = c4; // E.B
20+
}
21+
22+
function f2(cond: boolean) {
23+
const c1 = cond ? E.A : E.B; // Fresh E.A | fresh E.B
24+
const c2: E.A | E.B = c1; // E.A | E.B
25+
const c3 = cond ? c1 : c2; // E.A | E.B
26+
const c4 = cond ? c3 : E.C; // E.A | E.B | fresh E.C
27+
const c5: E.A | E.B | E.C = c4; // E.A | E.B | E.C
28+
let v1 = c1; // E
29+
let v2 = c2; // E.A | E.B
30+
let v3 = c3; // E.A | E.B
31+
let v4 = c4; // E
32+
let v5 = c5; // E.A | E.B | E.C
33+
}
34+
35+
function f3() {
36+
const c1 = E.B;
37+
let v1 = c1; // E
38+
const c2: E.B = E.B;
39+
let v2 = c2; // E.B
40+
const c3 = E.B as E.B;
41+
let v3 = c3; // E.B
42+
const c4 = <E.B>E.B;
43+
let v4 = c4; // E.B
44+
const c5 = E.B as const;
45+
let v5 = c5; // E.B
46+
}
47+
48+
declare enum E2 { A, B, C, D }
49+
50+
function f4() {
51+
const c1 = E2.B; // Fresh E2.B
52+
let v1 = E.B; // E2
53+
}
54+
55+
// Repro from #52531
56+
57+
enum MyEnum { A, B, C }
58+
59+
let val1 = MyEnum.A;
60+
val1 = MyEnum.B;
61+
62+
declare enum MyDeclaredEnum { A, B, C }
63+
64+
let val2 = MyDeclaredEnum.A;
65+
val2 = MyDeclaredEnum.B;
66+
67+
68+
//// [computedEnumTypeWidening.js]
69+
"use strict";
70+
var E;
71+
(function (E) {
72+
E[E["A"] = computed(0)] = "A";
73+
E[E["B"] = computed(1)] = "B";
74+
E[E["C"] = computed(2)] = "C";
75+
E[E["D"] = computed(3)] = "D";
76+
})(E || (E = {}));
77+
function f1() {
78+
var c1 = E.B; // Fresh E.B
79+
var v1 = c1; // E
80+
var c2 = c1; // Fresh E.B
81+
var v2 = c2; // E
82+
var c3 = E.B; // E.B
83+
var v3 = c3; // E.B
84+
var c4 = c1; // E.B
85+
var v4 = c4; // E.B
86+
}
87+
function f2(cond) {
88+
var c1 = cond ? E.A : E.B; // Fresh E.A | fresh E.B
89+
var c2 = c1; // E.A | E.B
90+
var c3 = cond ? c1 : c2; // E.A | E.B
91+
var c4 = cond ? c3 : E.C; // E.A | E.B | fresh E.C
92+
var c5 = c4; // E.A | E.B | E.C
93+
var v1 = c1; // E
94+
var v2 = c2; // E.A | E.B
95+
var v3 = c3; // E.A | E.B
96+
var v4 = c4; // E
97+
var v5 = c5; // E.A | E.B | E.C
98+
}
99+
function f3() {
100+
var c1 = E.B;
101+
var v1 = c1; // E
102+
var c2 = E.B;
103+
var v2 = c2; // E.B
104+
var c3 = E.B;
105+
var v3 = c3; // E.B
106+
var c4 = E.B;
107+
var v4 = c4; // E.B
108+
var c5 = E.B;
109+
var v5 = c5; // E.B
110+
}
111+
function f4() {
112+
var c1 = E2.B; // Fresh E2.B
113+
var v1 = E.B; // E2
114+
}
115+
// Repro from #52531
116+
var MyEnum;
117+
(function (MyEnum) {
118+
MyEnum[MyEnum["A"] = 0] = "A";
119+
MyEnum[MyEnum["B"] = 1] = "B";
120+
MyEnum[MyEnum["C"] = 2] = "C";
121+
})(MyEnum || (MyEnum = {}));
122+
var val1 = MyEnum.A;
123+
val1 = MyEnum.B;
124+
var val2 = MyDeclaredEnum.A;
125+
val2 = MyDeclaredEnum.B;
126+
127+
128+
//// [computedEnumTypeWidening.d.ts]
129+
declare function computed(x: number): number;
130+
declare enum E {
131+
A,
132+
B,
133+
C,
134+
D
135+
}
136+
declare function f1(): void;
137+
declare function f2(cond: boolean): void;
138+
declare function f3(): void;
139+
declare enum E2 {
140+
A,
141+
B,
142+
C,
143+
D
144+
}
145+
declare function f4(): void;
146+
declare enum MyEnum {
147+
A = 0,
148+
B = 1,
149+
C = 2
150+
}
151+
declare let val1: MyEnum;
152+
declare enum MyDeclaredEnum {
153+
A,
154+
B,
155+
C
156+
}
157+
declare let val2: MyDeclaredEnum;

0 commit comments

Comments
 (0)