Skip to content

Commit 4154968

Browse files
committed
cue/testdata: add regression tests for issue 2337
All three reproducers are resolved by evalv3. Closes #2337. Signed-off-by: Daniel Martí <[email protected]> Change-Id: I48c580390e916eba92e6e562609748bcf7d59cf8 Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/1214398 TryBot-Result: CUEcueckoo <[email protected]> Unity-Result: CUE porcuepine <[email protected]> Reviewed-by: Matthew Sackman <[email protected]>
1 parent b0a5318 commit 4154968

File tree

1 file changed

+194
-0
lines changed

1 file changed

+194
-0
lines changed

cue/testdata/eval/issue2337.txtar

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
-- in.cue --
2+
// evalv2 failed with the confusing error "x: was already used"
3+
// rather than a friendlier "conflicting values" error.
4+
simple: {
5+
x: "x"
6+
(x): "foo"
7+
}
8+
9+
// Worked on CUE v0.5.0, broke on v0.6.0 with "was already used".
10+
// Should succeed, as the comprehension does not change env2.
11+
issue2473: one: {
12+
c: {
13+
env: "prod"
14+
env: "dev" | "prod"
15+
env2: env
16+
}
17+
18+
if c.env2 == "prod" {
19+
{
20+
c: env2: string
21+
example: c.env2
22+
}
23+
}
24+
}
25+
// A variant of the above which failed on v0.5.0 as well.
26+
issue2473: two: {
27+
env: "prod"
28+
env: "dev" | "prod"
29+
env2: env
30+
31+
if env2 == "prod" {
32+
{
33+
env2: string
34+
example: env2
35+
}
36+
}
37+
}
38+
-- out/compile --
39+
--- in.cue
40+
{
41+
simple: {
42+
x: "x"
43+
〈0;x〉: "foo"
44+
}
45+
issue2473: {
46+
one: {
47+
c: {
48+
env: "prod"
49+
env: ("dev"|"prod")
50+
env2: 〈0;env〉
51+
}
52+
if (〈0;c〉.env2 == "prod") {
53+
{
54+
c: {
55+
env2: string
56+
}
57+
example: 〈0;c〉.env2
58+
}
59+
}
60+
}
61+
}
62+
issue2473: {
63+
two: {
64+
env: "prod"
65+
env: ("dev"|"prod")
66+
env2: 〈0;env〉
67+
if (〈0;env2〉 == "prod") {
68+
{
69+
env2: string
70+
example: 〈0;env2〉
71+
}
72+
}
73+
}
74+
}
75+
}
76+
-- out/eval/stats --
77+
Leaks: 2
78+
Freed: 19
79+
Reused: 13
80+
Allocs: 8
81+
Retain: 10
82+
83+
Unifications: 13
84+
Conjuncts: 37
85+
Disjuncts: 21
86+
-- out/evalalpha --
87+
Errors:
88+
simple.x: conflicting values "foo" and "x":
89+
./in.cue:4:7
90+
./in.cue:5:7
91+
92+
Result:
93+
(_|_){
94+
// [eval]
95+
simple: (_|_){
96+
// [eval]
97+
x: (_|_){
98+
// [eval] simple.x: conflicting values "foo" and "x":
99+
// ./in.cue:4:7
100+
// ./in.cue:5:7
101+
}
102+
}
103+
issue2473: (struct){
104+
one: (struct){
105+
c: (struct){
106+
env: (string){ "prod" }
107+
env2: (string){ "prod" }
108+
}
109+
example: (string){ "prod" }
110+
}
111+
two: (struct){
112+
env: (string){ "prod" }
113+
env2: (string){ "prod" }
114+
example: (string){ "prod" }
115+
}
116+
}
117+
}
118+
-- diff/-out/evalalpha<==>+out/eval --
119+
diff old new
120+
--- old
121+
+++ new
122+
@@ -1,25 +1,28 @@
123+
-(struct){
124+
+Errors:
125+
+simple.x: conflicting values "foo" and "x":
126+
+ ./in.cue:4:7
127+
+ ./in.cue:5:7
128+
+
129+
+Result:
130+
+(_|_){
131+
+ // [eval]
132+
simple: (_|_){
133+
- // [incomplete] simple: cannot add field x: was already used:
134+
- // ./in.cue:5:2
135+
- x: (string){ "x" }
136+
+ // [eval]
137+
+ x: (_|_){
138+
+ // [eval] simple.x: conflicting values "foo" and "x":
139+
+ // ./in.cue:4:7
140+
+ // ./in.cue:5:7
141+
+ }
142+
}
143+
issue2473: (struct){
144+
one: (struct){
145+
- c: (_|_){
146+
- // [incomplete] issue2473.one: cannot add field env2: was already used:
147+
- // ./in.cue:19:7
148+
+ c: (struct){
149+
env: (string){ "prod" }
150+
env2: (string){ "prod" }
151+
}
152+
- example: (_|_){
153+
- // [incomplete] issue2473.one: cannot add field env2: was already used:
154+
- // ./in.cue:19:7
155+
- }
156+
- }
157+
- two: (_|_){
158+
- // [incomplete] issue2473.two: cannot add field env2: was already used:
159+
- // ./in.cue:32:4
160+
+ example: (string){ "prod" }
161+
+ }
162+
+ two: (struct){
163+
env: (string){ "prod" }
164+
env2: (string){ "prod" }
165+
example: (string){ "prod" }
166+
-- out/eval --
167+
(struct){
168+
simple: (_|_){
169+
// [incomplete] simple: cannot add field x: was already used:
170+
// ./in.cue:5:2
171+
x: (string){ "x" }
172+
}
173+
issue2473: (struct){
174+
one: (struct){
175+
c: (_|_){
176+
// [incomplete] issue2473.one: cannot add field env2: was already used:
177+
// ./in.cue:19:7
178+
env: (string){ "prod" }
179+
env2: (string){ "prod" }
180+
}
181+
example: (_|_){
182+
// [incomplete] issue2473.one: cannot add field env2: was already used:
183+
// ./in.cue:19:7
184+
}
185+
}
186+
two: (_|_){
187+
// [incomplete] issue2473.two: cannot add field env2: was already used:
188+
// ./in.cue:32:4
189+
env: (string){ "prod" }
190+
env2: (string){ "prod" }
191+
example: (string){ "prod" }
192+
}
193+
}
194+
}

0 commit comments

Comments
 (0)