Skip to content

Commit 74779ba

Browse files
committed
Add test
1 parent 17d996e commit 74779ba

4 files changed

+787
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
//// [objectSpreadRepeatedComplexity.ts]
2+
function f(cnd: Record<number, boolean>){
3+
// Type is a union of 2^(n-1) members, where n is the number of spread objects
4+
return {
5+
// Without this one, it collapses to {} ?
6+
...(cnd[1] &&
7+
cnd[2] && {
8+
prop0: 0,
9+
}),
10+
11+
// With one prop each, it collapses to a single object (#34853?)
12+
...(cnd[3] && {
13+
prop3a: 1,
14+
prop3b: 1,
15+
}),
16+
...(cnd[4] && {
17+
prop4a: 1,
18+
prop4b: 1,
19+
}),
20+
...(cnd[5] && {
21+
prop5a: 1,
22+
prop5b: 1,
23+
}),
24+
...(cnd[6] && {
25+
prop6a: 1,
26+
prop6b: 1,
27+
}),
28+
...(cnd[7] && {
29+
prop7a: 1,
30+
prop7b: 1,
31+
}),
32+
...(cnd[8] && {
33+
prop8a: 1,
34+
prop8b: 1,
35+
}),
36+
...(cnd[9] && {
37+
prop9a: 1,
38+
prop9b: 1,
39+
}),
40+
...(cnd[10] && {
41+
prop10a: 1,
42+
prop10b: 1,
43+
}),
44+
...(cnd[11] && {
45+
prop11a: 1,
46+
prop11b: 1,
47+
}),
48+
...(cnd[12] && {
49+
prop12a: 1,
50+
prop12b: 1,
51+
}),
52+
...(cnd[13] && {
53+
prop13a: 1,
54+
prop13b: 1,
55+
}),
56+
...(cnd[14] && {
57+
prop14a: 1,
58+
prop14b: 1,
59+
}),
60+
...(cnd[15] && {
61+
prop15a: 1,
62+
prop15b: 1,
63+
}),
64+
...(cnd[16] && {
65+
prop16a: 1,
66+
prop16b: 1,
67+
}),
68+
...(cnd[17] && {
69+
prop17a: 1,
70+
prop17b: 1,
71+
}),
72+
...(cnd[18] && {
73+
prop18a: 1,
74+
prop18b: 1,
75+
}),
76+
...(cnd[19] && {
77+
prop19a: 1,
78+
prop19b: 1,
79+
}),
80+
...(cnd[20] && {
81+
prop20a: 1,
82+
prop20b: 1,
83+
}),
84+
};
85+
}
86+
87+
//// [objectSpreadRepeatedComplexity.js]
88+
"use strict";
89+
var __assign = (this && this.__assign) || function () {
90+
__assign = Object.assign || function(t) {
91+
for (var s, i = 1, n = arguments.length; i < n; i++) {
92+
s = arguments[i];
93+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
94+
t[p] = s[p];
95+
}
96+
return t;
97+
};
98+
return __assign.apply(this, arguments);
99+
};
100+
function f(cnd) {
101+
// Type is a union of 2^(n-1) members, where n is the number of spread objects
102+
return __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, (cnd[1] &&
103+
cnd[2] && {
104+
prop0: 0
105+
})), (cnd[3] && {
106+
prop3a: 1,
107+
prop3b: 1
108+
})), (cnd[4] && {
109+
prop4a: 1,
110+
prop4b: 1
111+
})), (cnd[5] && {
112+
prop5a: 1,
113+
prop5b: 1
114+
})), (cnd[6] && {
115+
prop6a: 1,
116+
prop6b: 1
117+
})), (cnd[7] && {
118+
prop7a: 1,
119+
prop7b: 1
120+
})), (cnd[8] && {
121+
prop8a: 1,
122+
prop8b: 1
123+
})), (cnd[9] && {
124+
prop9a: 1,
125+
prop9b: 1
126+
})), (cnd[10] && {
127+
prop10a: 1,
128+
prop10b: 1
129+
})), (cnd[11] && {
130+
prop11a: 1,
131+
prop11b: 1
132+
})), (cnd[12] && {
133+
prop12a: 1,
134+
prop12b: 1
135+
})), (cnd[13] && {
136+
prop13a: 1,
137+
prop13b: 1
138+
})), (cnd[14] && {
139+
prop14a: 1,
140+
prop14b: 1
141+
})), (cnd[15] && {
142+
prop15a: 1,
143+
prop15b: 1
144+
})), (cnd[16] && {
145+
prop16a: 1,
146+
prop16b: 1
147+
})), (cnd[17] && {
148+
prop17a: 1,
149+
prop17b: 1
150+
})), (cnd[18] && {
151+
prop18a: 1,
152+
prop18b: 1
153+
})), (cnd[19] && {
154+
prop19a: 1,
155+
prop19b: 1
156+
})), (cnd[20] && {
157+
prop20a: 1,
158+
prop20b: 1
159+
}));
160+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
=== tests/cases/compiler/objectSpreadRepeatedComplexity.ts ===
2+
function f(cnd: Record<number, boolean>){
3+
>f : Symbol(f, Decl(objectSpreadRepeatedComplexity.ts, 0, 0))
4+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
5+
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
6+
7+
// Type is a union of 2^(n-1) members, where n is the number of spread objects
8+
return {
9+
// Without this one, it collapses to {} ?
10+
...(cnd[1] &&
11+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
12+
13+
cnd[2] && {
14+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
15+
16+
prop0: 0,
17+
>prop0 : Symbol(prop0, Decl(objectSpreadRepeatedComplexity.ts, 5, 23))
18+
19+
}),
20+
21+
// With one prop each, it collapses to a single object (#34853?)
22+
...(cnd[3] && {
23+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
24+
25+
prop3a: 1,
26+
>prop3a : Symbol(prop3a, Decl(objectSpreadRepeatedComplexity.ts, 10, 23))
27+
28+
prop3b: 1,
29+
>prop3b : Symbol(prop3b, Decl(objectSpreadRepeatedComplexity.ts, 11, 22))
30+
31+
}),
32+
...(cnd[4] && {
33+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
34+
35+
prop4a: 1,
36+
>prop4a : Symbol(prop4a, Decl(objectSpreadRepeatedComplexity.ts, 14, 23))
37+
38+
prop4b: 1,
39+
>prop4b : Symbol(prop4b, Decl(objectSpreadRepeatedComplexity.ts, 15, 22))
40+
41+
}),
42+
...(cnd[5] && {
43+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
44+
45+
prop5a: 1,
46+
>prop5a : Symbol(prop5a, Decl(objectSpreadRepeatedComplexity.ts, 18, 23))
47+
48+
prop5b: 1,
49+
>prop5b : Symbol(prop5b, Decl(objectSpreadRepeatedComplexity.ts, 19, 22))
50+
51+
}),
52+
...(cnd[6] && {
53+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
54+
55+
prop6a: 1,
56+
>prop6a : Symbol(prop6a, Decl(objectSpreadRepeatedComplexity.ts, 22, 23))
57+
58+
prop6b: 1,
59+
>prop6b : Symbol(prop6b, Decl(objectSpreadRepeatedComplexity.ts, 23, 22))
60+
61+
}),
62+
...(cnd[7] && {
63+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
64+
65+
prop7a: 1,
66+
>prop7a : Symbol(prop7a, Decl(objectSpreadRepeatedComplexity.ts, 26, 23))
67+
68+
prop7b: 1,
69+
>prop7b : Symbol(prop7b, Decl(objectSpreadRepeatedComplexity.ts, 27, 22))
70+
71+
}),
72+
...(cnd[8] && {
73+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
74+
75+
prop8a: 1,
76+
>prop8a : Symbol(prop8a, Decl(objectSpreadRepeatedComplexity.ts, 30, 23))
77+
78+
prop8b: 1,
79+
>prop8b : Symbol(prop8b, Decl(objectSpreadRepeatedComplexity.ts, 31, 22))
80+
81+
}),
82+
...(cnd[9] && {
83+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
84+
85+
prop9a: 1,
86+
>prop9a : Symbol(prop9a, Decl(objectSpreadRepeatedComplexity.ts, 34, 23))
87+
88+
prop9b: 1,
89+
>prop9b : Symbol(prop9b, Decl(objectSpreadRepeatedComplexity.ts, 35, 22))
90+
91+
}),
92+
...(cnd[10] && {
93+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
94+
95+
prop10a: 1,
96+
>prop10a : Symbol(prop10a, Decl(objectSpreadRepeatedComplexity.ts, 38, 24))
97+
98+
prop10b: 1,
99+
>prop10b : Symbol(prop10b, Decl(objectSpreadRepeatedComplexity.ts, 39, 23))
100+
101+
}),
102+
...(cnd[11] && {
103+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
104+
105+
prop11a: 1,
106+
>prop11a : Symbol(prop11a, Decl(objectSpreadRepeatedComplexity.ts, 42, 24))
107+
108+
prop11b: 1,
109+
>prop11b : Symbol(prop11b, Decl(objectSpreadRepeatedComplexity.ts, 43, 23))
110+
111+
}),
112+
...(cnd[12] && {
113+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
114+
115+
prop12a: 1,
116+
>prop12a : Symbol(prop12a, Decl(objectSpreadRepeatedComplexity.ts, 46, 24))
117+
118+
prop12b: 1,
119+
>prop12b : Symbol(prop12b, Decl(objectSpreadRepeatedComplexity.ts, 47, 23))
120+
121+
}),
122+
...(cnd[13] && {
123+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
124+
125+
prop13a: 1,
126+
>prop13a : Symbol(prop13a, Decl(objectSpreadRepeatedComplexity.ts, 50, 24))
127+
128+
prop13b: 1,
129+
>prop13b : Symbol(prop13b, Decl(objectSpreadRepeatedComplexity.ts, 51, 23))
130+
131+
}),
132+
...(cnd[14] && {
133+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
134+
135+
prop14a: 1,
136+
>prop14a : Symbol(prop14a, Decl(objectSpreadRepeatedComplexity.ts, 54, 24))
137+
138+
prop14b: 1,
139+
>prop14b : Symbol(prop14b, Decl(objectSpreadRepeatedComplexity.ts, 55, 23))
140+
141+
}),
142+
...(cnd[15] && {
143+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
144+
145+
prop15a: 1,
146+
>prop15a : Symbol(prop15a, Decl(objectSpreadRepeatedComplexity.ts, 58, 24))
147+
148+
prop15b: 1,
149+
>prop15b : Symbol(prop15b, Decl(objectSpreadRepeatedComplexity.ts, 59, 23))
150+
151+
}),
152+
...(cnd[16] && {
153+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
154+
155+
prop16a: 1,
156+
>prop16a : Symbol(prop16a, Decl(objectSpreadRepeatedComplexity.ts, 62, 24))
157+
158+
prop16b: 1,
159+
>prop16b : Symbol(prop16b, Decl(objectSpreadRepeatedComplexity.ts, 63, 23))
160+
161+
}),
162+
...(cnd[17] && {
163+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
164+
165+
prop17a: 1,
166+
>prop17a : Symbol(prop17a, Decl(objectSpreadRepeatedComplexity.ts, 66, 24))
167+
168+
prop17b: 1,
169+
>prop17b : Symbol(prop17b, Decl(objectSpreadRepeatedComplexity.ts, 67, 23))
170+
171+
}),
172+
...(cnd[18] && {
173+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
174+
175+
prop18a: 1,
176+
>prop18a : Symbol(prop18a, Decl(objectSpreadRepeatedComplexity.ts, 70, 24))
177+
178+
prop18b: 1,
179+
>prop18b : Symbol(prop18b, Decl(objectSpreadRepeatedComplexity.ts, 71, 23))
180+
181+
}),
182+
...(cnd[19] && {
183+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
184+
185+
prop19a: 1,
186+
>prop19a : Symbol(prop19a, Decl(objectSpreadRepeatedComplexity.ts, 74, 24))
187+
188+
prop19b: 1,
189+
>prop19b : Symbol(prop19b, Decl(objectSpreadRepeatedComplexity.ts, 75, 23))
190+
191+
}),
192+
...(cnd[20] && {
193+
>cnd : Symbol(cnd, Decl(objectSpreadRepeatedComplexity.ts, 0, 11))
194+
195+
prop20a: 1,
196+
>prop20a : Symbol(prop20a, Decl(objectSpreadRepeatedComplexity.ts, 78, 24))
197+
198+
prop20b: 1,
199+
>prop20b : Symbol(prop20b, Decl(objectSpreadRepeatedComplexity.ts, 79, 23))
200+
201+
}),
202+
};
203+
}

0 commit comments

Comments
 (0)