github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/cue/testdata/benchmarks/listdedup.txtar (about) 1 #Issue: 758 2 #Issue: 1044 3 4 -- in.cue -- 5 A: #Task 6 B: #steps: #Script & {mount: [A]} 7 C: #steps: #Script & {mount: [B]} 8 9 #Script: {mount: [...#Task]} 10 11 #Task: { 12 // Without the proper constructs, repeating the below results 13 // in exponential runtime. 14 #ref 15 #ref 16 _ | {} 17 _ | {} 18 #steps: #Script 19 ... 20 } 21 22 #ref: {a: 1} | {b: 2} 23 -- out/eval -- 24 (struct){ 25 A: (#struct){ |((#struct){ 26 #steps: (#struct){ 27 mount: (list){ 28 } 29 } 30 a: (int){ 1 } 31 }, (#struct){ 32 #steps: (#struct){ 33 mount: (list){ 34 } 35 } 36 a: (int){ 1 } 37 b: (int){ 2 } 38 }, (#struct){ 39 #steps: (#struct){ 40 mount: (list){ 41 } 42 } 43 b: (int){ 2 } 44 }) } 45 B: (struct){ 46 #steps: (#struct){ 47 mount: (#list){ 48 0: (#struct){ |((#struct){ 49 #steps: (#struct){ 50 mount: (list){ 51 } 52 } 53 a: (int){ 1 } 54 }, (#struct){ 55 #steps: (#struct){ 56 mount: (list){ 57 } 58 } 59 a: (int){ 1 } 60 b: (int){ 2 } 61 }, (#struct){ 62 #steps: (#struct){ 63 mount: (list){ 64 } 65 } 66 b: (int){ 2 } 67 }) } 68 } 69 } 70 } 71 C: (struct){ 72 #steps: (#struct){ 73 mount: (#list){ 74 0: (#struct){ |((#struct){ 75 #steps: (#struct){ 76 mount: (#list){ 77 0: (#struct){ |((#struct){ 78 #steps: (#struct){ 79 mount: (list){ 80 } 81 } 82 a: (int){ 1 } 83 }, (#struct){ 84 #steps: (#struct){ 85 mount: (list){ 86 } 87 } 88 a: (int){ 1 } 89 b: (int){ 2 } 90 }, (#struct){ 91 #steps: (#struct){ 92 mount: (list){ 93 } 94 } 95 b: (int){ 2 } 96 }) } 97 } 98 } 99 a: (int){ 1 } 100 }, (#struct){ 101 #steps: (#struct){ 102 mount: (#list){ 103 0: (#struct){ |((#struct){ 104 #steps: (#struct){ 105 mount: (list){ 106 } 107 } 108 a: (int){ 1 } 109 }, (#struct){ 110 #steps: (#struct){ 111 mount: (list){ 112 } 113 } 114 a: (int){ 1 } 115 b: (int){ 2 } 116 }, (#struct){ 117 #steps: (#struct){ 118 mount: (list){ 119 } 120 } 121 b: (int){ 2 } 122 }) } 123 } 124 } 125 a: (int){ 1 } 126 b: (int){ 2 } 127 }, (#struct){ 128 #steps: (#struct){ 129 mount: (#list){ 130 0: (#struct){ |((#struct){ 131 #steps: (#struct){ 132 mount: (list){ 133 } 134 } 135 a: (int){ 1 } 136 }, (#struct){ 137 #steps: (#struct){ 138 mount: (list){ 139 } 140 } 141 a: (int){ 1 } 142 b: (int){ 2 } 143 }, (#struct){ 144 #steps: (#struct){ 145 mount: (list){ 146 } 147 } 148 b: (int){ 2 } 149 }) } 150 } 151 } 152 b: (int){ 2 } 153 }) } 154 } 155 } 156 } 157 #Script: (#struct){ 158 mount: (list){ 159 } 160 } 161 #Task: (#struct){ |((#struct){ 162 #steps: (#struct){ 163 mount: (list){ 164 } 165 } 166 a: (int){ 1 } 167 }, (#struct){ 168 #steps: (#struct){ 169 mount: (list){ 170 } 171 } 172 a: (int){ 1 } 173 b: (int){ 2 } 174 }, (#struct){ 175 #steps: (#struct){ 176 mount: (list){ 177 } 178 } 179 b: (int){ 2 } 180 }) } 181 #ref: (#struct){ |((#struct){ 182 a: (int){ 1 } 183 }, (#struct){ 184 b: (int){ 2 } 185 }) } 186 } 187 -- out/compile -- 188 --- in.cue 189 { 190 A: 〈0;#Task〉 191 B: { 192 #steps: (〈1;#Script〉 & { 193 mount: [ 194 〈3;A〉, 195 ] 196 }) 197 } 198 C: { 199 #steps: (〈1;#Script〉 & { 200 mount: [ 201 〈3;B〉, 202 ] 203 }) 204 } 205 #Script: { 206 mount: [ 207 ...〈2;#Task〉, 208 ] 209 } 210 #Task: { 211 〈1;#ref〉 212 〈1;#ref〉 213 (_|{}) 214 (_|{}) 215 #steps: 〈1;#Script〉 216 ... 217 } 218 #ref: ({ 219 a: 1 220 }|{ 221 b: 2 222 }) 223 }