cuelang.org/go@v0.13.0/cue/testdata/choosedefault/002_associativity_of_defaults.txtar (about) 1 #name: associativity of defaults 2 #evalFull 3 -- in.cue -- 4 a: *"a" | ("b" | "c") 5 b: (*"a" | "b") | "c" 6 c: *"a" | (*"b" | "c") 7 x: a & b 8 y: b & c 9 10 s1: *1 | ((*2 | 3) & (2 | *3)) 11 s2: *1 | ((*2 | 3) & (*2 | 3)) 12 s3: *1 | ((*2 | 3) & 3) 13 s4: *1 | ((*2 | 3) & 2) 14 s5: *1 | *(*2 | 3) 15 16 e1: *(1&2) | (*"x" | string) 17 e2: (*"x" | string) | *(1&2) 18 19 -- complex.cue -- 20 // add some test cases suggested by an automated prover based on this pattern: 21 // 1. ValK = (ValA & ValB_ND) & ValC_D \neq _|_ (the element we track must exist). 22 // 2. ValC_D & (ValA & ValB_D) = _|_ (for Path 1 Cond(ValC_D, Disj_AB) to be true). 23 // 3. ValC_D & ValB_D \neq _|_ (for Path 2 Cond(ValC_D, Disj_B) to be false). 24 25 // Let's define these CUE values. The trick is that ValA must introduce a 26 // component that causes ValC_D to conflict with (ValA & ValB_D), 27 // but ValC_D must *not* conflict with ValB_D on its own. 28 t1: { 29 va: {a: 1, b: 2} 30 vb1: {c: 3} 31 vb2: {c: 4} 32 vc : {c: 4} 33 vd: string 34 35 A: va | vd 36 B: *vb1 | vb2 | vd 37 C: *vc | vd 38 39 p1: (A & B) & C 40 p2: A & (B & C) 41 } 42 t2: { 43 va: 0 | 1 | 2 44 vb1: 2 | 3 45 vb2: 0 | 1 | 4 46 vc: 0 | 3 | 4 47 vd: string 48 49 A: va | vd 50 B: *vb1 | vb2 | vd 51 C: *vc | vd 52 53 p1: (A & B) & C 54 p2: A & (B & C) 55 } 56 -- issue3908.cue -- 57 issue3908: reduced: p1: { 58 string | *null 59 string | *"str" 60 } 61 issue3908: reduced: p2: { 62 string | *"str" 63 string | *null 64 } 65 issue3908: full: { 66 out: #Schema & { field: string | *"dataDefault" } 67 #Schema: field: string | *null 68 } 69 -- out/def -- 70 x: a & b 71 y: b & c 72 a: *"a" | "b" | "c" 73 b: *"a" | "b" | "c" 74 c: *"a" | *"b" | "c" 75 -- out/legacy-debug -- 76 <0>{x: "a", y: (*"a" | *"b"), a: "a", b: "a", c: (*"a" | *"b")} 77 -- out/compile -- 78 --- complex.cue 79 { 80 t1: { 81 va: { 82 a: 1 83 b: 2 84 } 85 vb1: { 86 c: 3 87 } 88 vb2: { 89 c: 4 90 } 91 vc: { 92 c: 4 93 } 94 vd: string 95 A: (〈0;va〉|〈0;vd〉) 96 B: (*〈0;vb1〉|〈0;vb2〉|〈0;vd〉) 97 C: (*〈0;vc〉|〈0;vd〉) 98 p1: ((〈0;A〉 & 〈0;B〉) & 〈0;C〉) 99 p2: (〈0;A〉 & (〈0;B〉 & 〈0;C〉)) 100 } 101 t2: { 102 va: (0|1|2) 103 vb1: (2|3) 104 vb2: (0|1|4) 105 vc: (0|3|4) 106 vd: string 107 A: (〈0;va〉|〈0;vd〉) 108 B: (*〈0;vb1〉|〈0;vb2〉|〈0;vd〉) 109 C: (*〈0;vc〉|〈0;vd〉) 110 p1: ((〈0;A〉 & 〈0;B〉) & 〈0;C〉) 111 p2: (〈0;A〉 & (〈0;B〉 & 〈0;C〉)) 112 } 113 } 114 --- in.cue 115 { 116 a: (*"a"|("b"|"c")) 117 b: ((*"a"|"b")|"c") 118 c: (*"a"|(*"b"|"c")) 119 x: (〈0;a〉 & 〈0;b〉) 120 y: (〈0;b〉 & 〈0;c〉) 121 s1: (*1|((*2|3) & (2|*3))) 122 s2: (*1|((*2|3) & (*2|3))) 123 s3: (*1|((*2|3) & 3)) 124 s4: (*1|((*2|3) & 2)) 125 s5: (*1|*(*2|3)) 126 e1: (*(1 & 2)|(*"x"|string)) 127 e2: ((*"x"|string)|*(1 & 2)) 128 } 129 --- issue3908.cue 130 { 131 issue3908: { 132 reduced: { 133 p1: { 134 (string|*null) 135 (string|*"str") 136 } 137 } 138 } 139 issue3908: { 140 reduced: { 141 p2: { 142 (string|*"str") 143 (string|*null) 144 } 145 } 146 } 147 issue3908: { 148 full: { 149 out: (〈0;#Schema〉 & { 150 field: (string|*"dataDefault") 151 }) 152 #Schema: { 153 field: (string|*null) 154 } 155 } 156 } 157 } 158 -- out/eval/stats -- 159 Leaks: 0 160 Freed: 382 161 Reused: 370 162 Allocs: 12 163 Retain: 1 164 165 Unifications: 104 166 Conjuncts: 516 167 Disjuncts: 383 168 -- out/eval -- 169 (struct){ 170 t1: (struct){ 171 va: (struct){ 172 a: (int){ 1 } 173 b: (int){ 2 } 174 } 175 vb1: (struct){ 176 c: (int){ 3 } 177 } 178 vb2: (struct){ 179 c: (int){ 4 } 180 } 181 vc: (struct){ 182 c: (int){ 4 } 183 } 184 vd: (string){ string } 185 A: ((string|struct)){ |((struct){ 186 a: (int){ 1 } 187 b: (int){ 2 } 188 }, (string){ string }) } 189 B: ((string|struct)){ |(*(struct){ 190 c: (int){ 3 } 191 }, (struct){ 192 c: (int){ 4 } 193 }, (string){ string }) } 194 C: ((string|struct)){ |(*(struct){ 195 c: (int){ 4 } 196 }, (string){ string }) } 197 p1: ((string|struct)){ |(*(struct){ 198 a: (int){ 1 } 199 b: (int){ 2 } 200 c: (int){ 4 } 201 }, (string){ string }) } 202 p2: ((string|struct)){ |(*(struct){ 203 a: (int){ 1 } 204 b: (int){ 2 } 205 c: (int){ 4 } 206 }, (string){ string }) } 207 } 208 t2: (struct){ 209 va: (int){ |((int){ 0 }, (int){ 1 }, (int){ 2 }) } 210 vb1: (int){ |((int){ 2 }, (int){ 3 }) } 211 vb2: (int){ |((int){ 0 }, (int){ 1 }, (int){ 4 }) } 212 vc: (int){ |((int){ 0 }, (int){ 3 }, (int){ 4 }) } 213 vd: (string){ string } 214 A: ((int|string)){ |((int){ 0 }, (int){ 1 }, (int){ 2 }, (string){ string }) } 215 B: ((int|string)){ |(*(int){ 2 }, *(int){ 3 }, (int){ 0 }, (int){ 1 }, (int){ 4 }, (string){ string }) } 216 C: ((int|string)){ |(*(int){ 0 }, *(int){ 3 }, *(int){ 4 }, (string){ string }) } 217 p1: ((int|string)){ |(*(int){ 0 }, (string){ string }) } 218 p2: ((int|string)){ |(*(int){ 0 }, (string){ string }) } 219 } 220 a: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 221 b: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 222 c: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 223 x: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 224 y: (string){ |(*(string){ "a" }, (string){ "b" }, (string){ "c" }) } 225 s1: (int){ |(*(int){ 1 }, (int){ 2 }, (int){ 3 }) } 226 s2: (int){ |(*(int){ 1 }, (int){ 2 }, (int){ 3 }) } 227 s3: (int){ |(*(int){ 1 }, (int){ 3 }) } 228 s4: (int){ |(*(int){ 1 }, (int){ 2 }) } 229 s5: (int){ |(*(int){ 1 }, *(int){ 2 }, (int){ 3 }) } 230 e1: (string){ |((string){ "x" }, (string){ string }) } 231 e2: (string){ |((string){ "x" }, (string){ string }) } 232 issue3908: (struct){ 233 reduced: (struct){ 234 p1: (string){ |(*(string){ "str" }, (string){ string }) } 235 p2: (string){ |(*(string){ "str" }, (string){ string }) } 236 } 237 full: (struct){ 238 out: (#struct){ 239 field: (string){ |(*(string){ "dataDefault" }, (string){ string }) } 240 } 241 #Schema: (#struct){ 242 field: ((null|string)){ |(*(null){ null }, (string){ string }) } 243 } 244 } 245 } 246 }