...
1
2Issue #1969
3
4-- in.cue --
5import "list"
6
7// All tests here should pass and the result of the okcN tests should be
8// identical to those of the okoN tests.
9
10xc: close({field: {}})
11xo: field: {}
12
13okc0: { if xc.undefined == _|_ {a: 1} }
14oko0: { if xo.undefined == _|_ {a: 1} }
15
16okc1: { if xc.undefined != _|_ {a: 1} }
17oko1: { if xo.undefined != _|_ {a: 1} }
18
19okc2: {
20 if ({} & {s: [for y in xc.undefined {}]}) != _|_ {a: 1}
21}
22
23oko2: {
24 if ({} & {s: [for y in xo.undefined {}]}) != _|_ {a: 1}
25}
26
27okc3: {
28 if ({s: [for y in xc.undefined {}]}) != _|_ {a: 1}
29}
30
31oko3: {
32 if ({s: [for y in xo.undefined {}]}) != _|_ {a: 1}
33}
34
35// Should Field s exist in okc or not? Depends on whether comparison to bottom
36// is recursive or not. It probably should not.
37// TODO: fix for new evaluator. But possibly address this with new builtins.
38issue1969: okc: {
39 let X = xc.undefined
40 let Y = {} & {s: [for y in list.Range(0, X, 1) {}]}
41
42 if Y != _|_ {Y}
43}
44
45issue1969: oko: {
46 let X = xo.undefined
47 let Y = {} & {s: [for y in list.Range(0, X, 1) {}]}
48
49 if Y != _|_ {Y}
50}
51-- issue2245.cue --
52yo: { f: int, g: f < 10 }
53okyo: { if yo != _|_ {a: 1} }
54okyog: { if yo.g != _|_ {a: 1} }
55
56-- incomplete.cue --
57// Comparing to string is not an error. But for legacy reasons we want to still
58// support this. We intend to have more clean and precise behavior with the
59// builtins isdefined, isvalid, and isconcrete.
60checkIncomplete: t1: {
61 f: [string]: {
62 if a != _|_ {
63 b: "d\(a)"
64 }
65 a: string
66 }
67 f: blah: {}
68}
69
70-- structs.cue --
71structs: {
72 bare: t1: ({y: 2} & {x: 3}) != _|_
73 bare: f2: ({y: 2} & {x: 3}) == _|_
74 bare: f3: ({x: 1, y: 2} & {x: 3}) != _|_
75 bare: t4: ({x: 1, y: 2} & {x: 3}) == _|_
76
77 select: t1: ({y: 2} & {x: 3}).y != _|_
78 select: f2: ({y: 2} & {x: 3}).y == _|_
79 select: f3: ({x: 1, y: 2} & {x: 3}).y != _|_
80 select: t4: ({x: 1, y: 2} & {x: 3}).y == _|_
81}
82
83-- out/eval/stats --
84Leaks: 11
85Freed: 89
86Reused: 85
87Allocs: 15
88Retain: 26
89
90Unifications: 100
91Conjuncts: 134
92Disjuncts: 105
93-- out/eval --
94(struct){
95 xc: (#struct){
96 field: (struct){
97 }
98 }
99 xo: (struct){
100 field: (struct){
101 }
102 }
103 okc0: (struct){
104 a: (int){ 1 }
105 }
106 oko0: (struct){
107 a: (int){ 1 }
108 }
109 okc1: (struct){
110 }
111 oko1: (struct){
112 }
113 okc2: (struct){
114 }
115 oko2: (struct){
116 a: (int){ 1 }
117 }
118 okc3: (struct){
119 }
120 oko3: (struct){
121 a: (int){ 1 }
122 }
123 issue1969: (struct){
124 okc: (struct){
125 let X#1 = (_|_){
126 // [eval] issue1969.okc.X: undefined field: undefined:
127 // ./in.cue:35:13
128 }
129 let Y#2 = (_|_){
130 // [eval]
131 s: (_|_){
132 // [eval] issue1969.okc.X: undefined field: undefined:
133 // ./in.cue:35:13
134 }
135 }
136 }
137 oko: (struct){
138 let X#3 = (_|_){
139 // [incomplete] issue1969.oko.X: undefined field: undefined:
140 // ./in.cue:42:13
141 }
142 let Y#4 = (struct){
143 s: (_|_){
144 // [incomplete] issue1969.oko.X: undefined field: undefined:
145 // ./in.cue:42:13
146 }
147 }
148 s: (_|_){
149 // [incomplete] issue1969.oko.X: undefined field: undefined:
150 // ./in.cue:42:13
151 }
152 }
153 }
154 checkIncomplete: (struct){
155 t1: (struct){
156 f: (struct){
157 blah: (struct){
158 a: (string){ string }
159 }
160 }
161 }
162 }
163 yo: (struct){
164 f: (int){ int }
165 g: (_|_){
166 // [incomplete] yo.g: non-concrete value int in operand to <:
167 // ./issue2245.cue:1:18
168 // ./issue2245.cue:1:10
169 }
170 }
171 okyo: (struct){
172 a: (int){ 1 }
173 }
174 okyog: (struct){
175 }
176 structs: (struct){
177 bare: (struct){
178 t1: (bool){ true }
179 f2: (bool){ false }
180 f3: (bool){ false }
181 t4: (bool){ true }
182 }
183 select: (struct){
184 t1: (bool){ true }
185 f2: (bool){ false }
186 f3: (bool){ false }
187 t4: (bool){ true }
188 }
189 }
190}
191-- out/compile --
192--- in.cue
193{
194 xc: close({
195 field: {}
196 })
197 xo: {
198 field: {}
199 }
200 okc0: {
201 if (〈1;xc〉.undefined == _|_(explicit error (_|_ literal) in source)) {
202 a: 1
203 }
204 }
205 oko0: {
206 if (〈1;xo〉.undefined == _|_(explicit error (_|_ literal) in source)) {
207 a: 1
208 }
209 }
210 okc1: {
211 if (〈1;xc〉.undefined != _|_(explicit error (_|_ literal) in source)) {
212 a: 1
213 }
214 }
215 oko1: {
216 if (〈1;xo〉.undefined != _|_(explicit error (_|_ literal) in source)) {
217 a: 1
218 }
219 }
220 okc2: {
221 if (({} & {
222 s: [
223 for _, y in 〈3;xc〉.undefined {},
224 ]
225 }) != _|_(explicit error (_|_ literal) in source)) {
226 a: 1
227 }
228 }
229 oko2: {
230 if (({} & {
231 s: [
232 for _, y in 〈3;xo〉.undefined {},
233 ]
234 }) != _|_(explicit error (_|_ literal) in source)) {
235 a: 1
236 }
237 }
238 okc3: {
239 if ({
240 s: [
241 for _, y in 〈3;xc〉.undefined {},
242 ]
243 } != _|_(explicit error (_|_ literal) in source)) {
244 a: 1
245 }
246 }
247 oko3: {
248 if ({
249 s: [
250 for _, y in 〈3;xo〉.undefined {},
251 ]
252 } != _|_(explicit error (_|_ literal) in source)) {
253 a: 1
254 }
255 }
256 issue1969: {
257 okc: {
258 let X#1 = 〈2;xc〉.undefined
259 let Y#2 = ({} & {
260 s: [
261 for _, y in 〈import;list〉.Range(0, 〈2;let X#1〉, 1) {},
262 ]
263 })
264 if (〈0;let Y#2〉 != _|_(explicit error (_|_ literal) in source)) {
265 〈1;let Y#2〉
266 }
267 }
268 }
269 issue1969: {
270 oko: {
271 let X#3 = 〈2;xo〉.undefined
272 let Y#4 = ({} & {
273 s: [
274 for _, y in 〈import;list〉.Range(0, 〈2;let X#3〉, 1) {},
275 ]
276 })
277 if (〈0;let Y#4〉 != _|_(explicit error (_|_ literal) in source)) {
278 〈1;let Y#4〉
279 }
280 }
281 }
282}
283--- incomplete.cue
284{
285 checkIncomplete: {
286 t1: {
287 f: {
288 [string]: {
289 if (〈0;a〉 != _|_(explicit error (_|_ literal) in source)) {
290 b: "d\(〈1;a〉)"
291 }
292 a: string
293 }
294 }
295 f: {
296 blah: {}
297 }
298 }
299 }
300}
301--- issue2245.cue
302{
303 yo: {
304 f: int
305 g: (〈0;f〉 < 10)
306 }
307 okyo: {
308 if (〈1;yo〉 != _|_(explicit error (_|_ literal) in source)) {
309 a: 1
310 }
311 }
312 okyog: {
313 if (〈1;yo〉.g != _|_(explicit error (_|_ literal) in source)) {
314 a: 1
315 }
316 }
317}
318--- structs.cue
319{
320 structs: {
321 bare: {
322 t1: (({
323 y: 2
324 } & {
325 x: 3
326 }) != _|_(explicit error (_|_ literal) in source))
327 }
328 bare: {
329 f2: (({
330 y: 2
331 } & {
332 x: 3
333 }) == _|_(explicit error (_|_ literal) in source))
334 }
335 bare: {
336 f3: (({
337 x: 1
338 y: 2
339 } & {
340 x: 3
341 }) != _|_(explicit error (_|_ literal) in source))
342 }
343 bare: {
344 t4: (({
345 x: 1
346 y: 2
347 } & {
348 x: 3
349 }) == _|_(explicit error (_|_ literal) in source))
350 }
351 select: {
352 t1: (({
353 y: 2
354 } & {
355 x: 3
356 }).y != _|_(explicit error (_|_ literal) in source))
357 }
358 select: {
359 f2: (({
360 y: 2
361 } & {
362 x: 3
363 }).y == _|_(explicit error (_|_ literal) in source))
364 }
365 select: {
366 f3: (({
367 x: 1
368 y: 2
369 } & {
370 x: 3
371 }).y != _|_(explicit error (_|_ literal) in source))
372 }
373 select: {
374 t4: (({
375 x: 1
376 y: 2
377 } & {
378 x: 3
379 }).y == _|_(explicit error (_|_ literal) in source))
380 }
381 }
382}
View as plain text