Skip to content

Commit 31896af

Browse files
committed
internal/core/eval: add more tests for embedding
Note that in order to use structs as embeddings, one has to embed the return type (or _). Change-Id: I2e74109be6269b47cc8fbd69fafa78b195432148 Reviewed-on: https://cue-review.googlesource.com/c/cue/+/7902 Reviewed-by: Marcel van Lohuizen <[email protected]>
1 parent fac5d2e commit 31896af

File tree

1 file changed

+214
-89
lines changed

1 file changed

+214
-89
lines changed

cue/testdata/scalars/embed.txtar

Lines changed: 214 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,125 +1,250 @@
11
-- in.cue --
22
import "strings"
33

4-
a1: {
5-
2
4+
intEmbed: {
5+
a1: {
6+
2
7+
}
8+
a2: {
9+
v: {
10+
3
11+
#foo: a2.v + 1
12+
}
13+
w: v
14+
x: v.#foo
15+
}
16+
a3: a1 + a2.v
617
}
7-
a2: {
8-
v: {
9-
3
10-
#foo: a2.v + 1
18+
19+
listEmbed: {
20+
a1: {
21+
2
22+
}
23+
b3: {
24+
[1, 2]
25+
#foo: 1
1126
}
12-
w: v
13-
x: v.#foo
27+
b4: b3 + b3
28+
b5: b3[1]
29+
b6: b3[5]
30+
b7: b4[a1] // 1
1431
}
15-
a3: a1 + a2.v
1632

17-
b3: {
18-
[1, 2]
19-
#foo: 1
33+
stringEmbed: {
34+
s1: {
35+
"foo"
36+
#bar: "bar"
37+
}
38+
s2: [ s1, { s1.#bar, #baz: 4 } ]
39+
s3: strings.Join(s2, "--")
2040
}
21-
b4: b3 + b3
22-
b5: b3[1]
23-
b6: b3[5]
24-
b7: b4[a1] // 1
2541

26-
s1: {
27-
"foo"
28-
#bar: "bar"
42+
43+
outPattern: {
44+
sum: {
45+
out: #a + #b
46+
#a: int
47+
#b: int
48+
}
49+
used: sum&{#a: 1, #b: 3}
50+
}
51+
52+
arithmetic: {
53+
sum: {
54+
#a + #b
55+
#a: int
56+
#b: int
57+
}
58+
a1: (sum&{_, #a: 1, #b: 3}) + 2
59+
a2: 2 + (sum&{_, #a: 1, #b: 3})
60+
a3: 2 + (2 + (sum&{_, #a: 1, #b: 3}))
61+
}
62+
63+
defCheck: {
64+
a: {
65+
#def: 1
66+
}
67+
b: a.#def
2968
}
30-
s2: [ s1, { s1.#bar, #baz: 4 } ]
31-
s3: strings.Join(s2, "--")
3269

3370
-- out/eval --
3471
Errors:
35-
b6: invalid list index 5 (out of bounds):
36-
./in.cue:22:8
72+
listEmbed.b6: invalid list index 5 (out of bounds):
73+
./in.cue:28:12
3774

3875
Result:
3976
(_|_){
4077
// [eval]
41-
a1: (int){ 2 }
42-
a2: (struct){
43-
v: (int){
44-
3
45-
#foo: (int){ 4 }
46-
}
47-
w: (int){
48-
3
49-
#foo: (int){ 4 }
78+
intEmbed: (struct){
79+
a1: (int){ 2 }
80+
a2: (struct){
81+
v: (int){
82+
3
83+
#foo: (int){ 4 }
84+
}
85+
w: (int){
86+
3
87+
#foo: (int){ 4 }
88+
}
89+
x: (int){ 4 }
5090
}
51-
x: (int){ 4 }
52-
}
53-
a3: (int){ 5 }
54-
b3: (#list){
55-
#foo: (int){ 1 }
56-
0: (int){ 1 }
57-
1: (int){ 2 }
58-
}
59-
b4: (#list){
60-
0: (int){ 1 }
61-
1: (int){ 2 }
62-
2: (int){ 1 }
63-
3: (int){ 2 }
91+
a3: (int){ 5 }
6492
}
65-
b5: (int){ 2 }
66-
b6: (_|_){
67-
// [eval] b6: invalid list index 5 (out of bounds):
68-
// ./in.cue:22:8
69-
}
70-
b7: (int){ 1 }
71-
s1: (string){
72-
"foo"
73-
#bar: (string){ "bar" }
93+
listEmbed: (_|_){
94+
// [eval]
95+
a1: (int){ 2 }
96+
b3: (#list){
97+
#foo: (int){ 1 }
98+
0: (int){ 1 }
99+
1: (int){ 2 }
100+
}
101+
b4: (#list){
102+
0: (int){ 1 }
103+
1: (int){ 2 }
104+
2: (int){ 1 }
105+
3: (int){ 2 }
106+
}
107+
b5: (int){ 2 }
108+
b6: (_|_){
109+
// [eval] listEmbed.b6: invalid list index 5 (out of bounds):
110+
// ./in.cue:28:12
111+
}
112+
b7: (int){ 1 }
74113
}
75-
s2: (#list){
76-
0: (string){
114+
stringEmbed: (struct){
115+
s1: (string){
77116
"foo"
78117
#bar: (string){ "bar" }
79118
}
80-
1: (string){
81-
"bar"
82-
#baz: (int){ 4 }
119+
s2: (#list){
120+
0: (string){
121+
"foo"
122+
#bar: (string){ "bar" }
123+
}
124+
1: (string){
125+
"bar"
126+
#baz: (int){ 4 }
127+
}
128+
}
129+
s3: (string){ "foo--bar" }
130+
}
131+
outPattern: (struct){
132+
sum: (struct){
133+
out: (_|_){
134+
// [incomplete] outPattern.sum.out: non-concrete value int in operand to +:
135+
// ./in.cue:44:14
136+
}
137+
#a: (int){ int }
138+
#b: (int){ int }
139+
}
140+
used: (struct){
141+
out: (int){ 4 }
142+
#a: (int){ 1 }
143+
#b: (int){ 3 }
83144
}
84145
}
85-
s3: (string){ "foo--bar" }
146+
arithmetic: (struct){
147+
sum: (_|_){
148+
// [incomplete] arithmetic.sum: non-concrete value int in operand to +:
149+
// ./in.cue:53:9
150+
#a: (int){ int }
151+
#b: (int){ int }
152+
}
153+
a1: (int){ 6 }
154+
a2: (int){ 6 }
155+
a3: (int){ 8 }
156+
}
157+
defCheck: (struct){
158+
a: (struct){
159+
#def: (int){ 1 }
160+
}
161+
b: (int){ 1 }
162+
}
86163
}
87164
-- out/compile --
88165
--- in.cue
89166
{
90-
a1: {
91-
2
167+
intEmbed: {
168+
a1: {
169+
2
170+
}
171+
a2: {
172+
v: {
173+
3
174+
#foo: (〈2;a2〉.v + 1)
175+
}
176+
w: 〈0;v〉
177+
x: 〈0;v〉.#foo
178+
}
179+
a3: (〈0;a1〉 + 〈0;a2〉.v)
92180
}
93-
a2: {
94-
v: {
95-
3
96-
#foo: (〈2;a2〉.v + 1)
181+
listEmbed: {
182+
a1: {
183+
2
184+
}
185+
b3: {
186+
[
187+
1,
188+
2,
189+
]
190+
#foo: 1
97191
}
98-
w: 〈0;v〉
99-
x: 〈0;v〉.#foo
192+
b4: (〈0;b3〉 + 〈0;b3〉)
193+
b5: 〈0;b3〉[1]
194+
b6: 〈0;b3〉[5]
195+
b7: 〈0;b4〉[〈0;a1〉]
100196
}
101-
a3: (〈0;a1〉 + 〈0;a2〉.v)
102-
b3: {
103-
[
104-
1,
105-
2,
197+
stringEmbed: {
198+
s1: {
199+
"foo"
200+
#bar: "bar"
201+
}
202+
s2: [
203+
〈0;s1〉,
204+
{
205+
〈1;s1〉.#bar
206+
#baz: 4
207+
},
106208
]
107-
#foo: 1
209+
s3: 〈import;strings〉.Join(〈0;s2〉, "--")
108210
}
109-
b4: (〈0;b3〉 + 〈0;b3〉)
110-
b5: 〈0;b3〉[1]
111-
b6: 〈0;b3〉[5]
112-
b7: 〈0;b4〉[〈0;a1〉]
113-
s1: {
114-
"foo"
115-
#bar: "bar"
211+
outPattern: {
212+
sum: {
213+
out: (〈0;#a〉 + 〈0;#b〉)
214+
#a: int
215+
#b: int
216+
}
217+
used: (〈0;sum〉 & {
218+
#a: 1
219+
#b: 3
220+
})
221+
}
222+
arithmetic: {
223+
sum: {
224+
(〈0;#a〉 + 〈0;#b〉)
225+
#a: int
226+
#b: int
227+
}
228+
a1: ((〈0;sum〉 & {
229+
_
230+
#a: 1
231+
#b: 3
232+
}) + 2)
233+
a2: (2 + (〈0;sum〉 & {
234+
_
235+
#a: 1
236+
#b: 3
237+
}))
238+
a3: (2 + (2 + (〈0;sum〉 & {
239+
_
240+
#a: 1
241+
#b: 3
242+
})))
243+
}
244+
defCheck: {
245+
a: {
246+
#def: 1
247+
}
248+
b: 〈0;a〉.#def
116249
}
117-
s2: [
118-
〈0;s1〉,
119-
{
120-
〈1;s1〉.#bar
121-
#baz: 4
122-
},
123-
]
124-
s3: 〈import;strings〉.Join(〈0;s2〉, "--")
125250
}

0 commit comments

Comments
 (0)