/ tests / expectations / execution / complex_vector.out
complex_vector.out
  1  program vector_structs.alpha;
  2  
  3  struct Point:
  4      x as field;
  5      y as field;
  6  
  7  struct Container:
  8      id as u32;
  9      points as [Point; 2u32];
 10  
 11  struct Optional__EsDmm5O6sv6:
 12      is_some as boolean;
 13      val as u32;
 14  
 15  struct Optional__6Uxqmb23WYh:
 16      is_some as boolean;
 17      val as Point;
 18  
 19  struct Optional__Iw7fQz4CKJ0:
 20      is_some as boolean;
 21      val as Container;
 22  
 23  mapping ids__:
 24      key as u32.public;
 25      value as u32.public;
 26  
 27  mapping ids__len__:
 28      key as boolean.public;
 29      value as u32.public;
 30  
 31  mapping points__:
 32      key as u32.public;
 33      value as Point.public;
 34  
 35  mapping points__len__:
 36      key as boolean.public;
 37      value as u32.public;
 38  
 39  mapping containers__:
 40      key as u32.public;
 41      value as Container.public;
 42  
 43  mapping containers__len__:
 44      key as boolean.public;
 45      value as u32.public;
 46  
 47  function test_vector_primitives_behavior:
 48      input r0 as u32.private;
 49      input r1 as u32.private;
 50      async test_vector_primitives_behavior r0 r1 into r2;
 51      output r2 as vector_structs.alpha/test_vector_primitives_behavior.future;
 52  
 53  finalize test_vector_primitives_behavior:
 54      input r0 as u32.public;
 55      input r1 as u32.public;
 56      set 0u32 into ids__len__[false];
 57      get.or_use ids__len__[false] 0u32 into r2;
 58      is.eq r2 0u32 into r3;
 59      assert.eq r3 true;
 60      get.or_use ids__len__[false] 0u32 into r4;
 61      add r4 1u32 into r5;
 62      set r5 into ids__len__[false];
 63      set 10u32 into ids__[r4];
 64      get.or_use ids__len__[false] 0u32 into r6;
 65      add r6 1u32 into r7;
 66      set r7 into ids__len__[false];
 67      set 20u32 into ids__[r6];
 68      get.or_use ids__len__[false] 0u32 into r8;
 69      add r8 1u32 into r9;
 70      set r9 into ids__len__[false];
 71      set 30u32 into ids__[r8];
 72      get.or_use ids__len__[false] 0u32 into r10;
 73      is.eq r10 3u32 into r11;
 74      assert.eq r11 true;
 75      get.or_use ids__len__[false] 0u32 into r12;
 76      lt r0 r12 into r13;
 77      get.or_use ids__[r0] 0u32 into r14;
 78      cast true r14 into r15 as Optional__EsDmm5O6sv6;
 79      cast false 0u32 into r16 as Optional__EsDmm5O6sv6;
 80      ternary r13 r15.is_some r16.is_some into r17;
 81      ternary r13 r15.val r16.val into r18;
 82      cast r17 r18 into r19 as Optional__EsDmm5O6sv6;
 83      assert.eq r19.is_some true;
 84      is.eq r19.val 20u32 into r20;
 85      assert.eq r20 true;
 86      assert.eq r19.is_some true;
 87      is.eq r19.val 20u32 into r21;
 88      assert.eq r21 true;
 89      get.or_use ids__len__[false] 0u32 into r22;
 90      lt r0 r22 into r23;
 91      assert.eq r23 true;
 92      set r1 into ids__[r0];
 93      get.or_use ids__len__[false] 0u32 into r24;
 94      lt r0 r24 into r25;
 95      get.or_use ids__[r0] 0u32 into r26;
 96      cast true r26 into r27 as Optional__EsDmm5O6sv6;
 97      cast false 0u32 into r28 as Optional__EsDmm5O6sv6;
 98      ternary r25 r27.is_some r28.is_some into r29;
 99      ternary r25 r27.val r28.val into r30;
100      cast r29 r30 into r31 as Optional__EsDmm5O6sv6;
101      assert.eq r31.is_some true;
102      get.or_use ids__[r0] 0u32 into r32;
103      cast true r32 into r33 as Optional__EsDmm5O6sv6;
104      cast false 0u32 into r34 as Optional__EsDmm5O6sv6;
105      ternary r25 r33.is_some r34.is_some into r35;
106      ternary r25 r33.val r34.val into r36;
107      cast r35 r36 into r37 as Optional__EsDmm5O6sv6;
108      is.eq r37.val r1 into r38;
109      assert.eq r38 true;
110      get.or_use ids__len__[false] 0u32 into r39;
111      lt 2u32 r39 into r40;
112      assert.eq r40 true;
113      get ids__[2u32] into r41;
114      sub r39 1u32 into r42;
115      get ids__[r42] into r43;
116      set r43 into ids__[2u32];
117      set r42 into ids__len__[false];
118      is.eq r41 30u32 into r44;
119      assert.eq r44 true;
120      get.or_use ids__len__[false] 0u32 into r45;
121      is.eq r45 2u32 into r46;
122      assert.eq r46 true;
123      get.or_use ids__len__[false] 0u32 into r47;
124      gt r47 0u32 into r48;
125      sub.w r47 1u32 into r49;
126      ternary r48 r49 r47 into r50;
127      set r50 into ids__len__[false];
128      get.or_use ids__[r49] 0u32 into r51;
129      cast true r51 into r52 as Optional__EsDmm5O6sv6;
130      cast false 0u32 into r53 as Optional__EsDmm5O6sv6;
131      ternary r48 r52.is_some r53.is_some into r54;
132      ternary r48 r52.val r53.val into r55;
133      cast r54 r55 into r56 as Optional__EsDmm5O6sv6;
134      assert.eq r56.is_some true;
135      get.or_use ids__[r49] 0u32 into r57;
136      cast true r57 into r58 as Optional__EsDmm5O6sv6;
137      cast false 0u32 into r59 as Optional__EsDmm5O6sv6;
138      ternary r48 r58.is_some r59.is_some into r60;
139      ternary r48 r58.val r59.val into r61;
140      cast r60 r61 into r62 as Optional__EsDmm5O6sv6;
141      is.eq r62.val r1 into r63;
142      assert.eq r63 true;
143      get.or_use ids__len__[false] 0u32 into r64;
144      is.eq r64 1u32 into r65;
145      assert.eq r65 true;
146      set 0u32 into ids__len__[false];
147      get.or_use ids__len__[false] 0u32 into r66;
148      is.eq r66 0u32 into r67;
149      assert.eq r67 true;
150  
151  function test_vector_structs_behavior:
152      input r0 as u32.private;
153      async test_vector_structs_behavior r0 into r1;
154      output r1 as vector_structs.alpha/test_vector_structs_behavior.future;
155  
156  finalize test_vector_structs_behavior:
157      input r0 as u32.public;
158      get.or_use points__len__[false] 0u32 into r1;
159      is.eq r1 0u32 into r2;
160      assert.eq r2 true;
161      get.or_use points__len__[false] 0u32 into r3;
162      add r3 1u32 into r4;
163      set r4 into points__len__[false];
164      cast 1field 2field into r5 as Point;
165      set r5 into points__[r3];
166      get.or_use points__len__[false] 0u32 into r6;
167      add r6 1u32 into r7;
168      set r7 into points__len__[false];
169      cast 3field 4field into r8 as Point;
170      set r8 into points__[r6];
171      get.or_use points__len__[false] 0u32 into r9;
172      is.eq r9 2u32 into r10;
173      assert.eq r10 true;
174      get.or_use points__len__[false] 0u32 into r11;
175      lt r0 r11 into r12;
176      cast 0field 0field into r13 as Point;
177      get.or_use points__[r0] r13 into r14;
178      cast true r14 into r15 as Optional__6Uxqmb23WYh;
179      cast 0field 0field into r16 as Point;
180      cast false r16 into r17 as Optional__6Uxqmb23WYh;
181      ternary r12 r15.val.x r17.val.x into r18;
182      ternary r12 r15.val.y r17.val.y into r19;
183      cast r18 r19 into r20 as Point;
184      ternary r12 r15.is_some r17.is_some into r21;
185      cast r21 r20 into r22 as Optional__6Uxqmb23WYh;
186      assert.eq r22.is_some true;
187      cast 0field 0field into r23 as Point;
188      get.or_use points__[r0] r23 into r24;
189      cast true r24 into r25 as Optional__6Uxqmb23WYh;
190      cast 0field 0field into r26 as Point;
191      cast false r26 into r27 as Optional__6Uxqmb23WYh;
192      ternary r12 r25.val.x r27.val.x into r28;
193      ternary r12 r25.val.y r27.val.y into r29;
194      cast r28 r29 into r30 as Point;
195      ternary r12 r25.is_some r27.is_some into r31;
196      cast r31 r30 into r32 as Optional__6Uxqmb23WYh;
197      add r32.val.x r32.val.y into r33;
198      is.eq r33 3field into r34;
199      add r32.val.x r32.val.y into r35;
200      is.eq r35 7field into r36;
201      or r34 r36 into r37;
202      assert.eq r37 true;
203      get.or_use points__len__[false] 0u32 into r38;
204      lt r0 r38 into r39;
205      assert.eq r39 true;
206      cast 9field 9field into r40 as Point;
207      set r40 into points__[r0];
208      get.or_use points__len__[false] 0u32 into r41;
209      lt r0 r41 into r42;
210      cast 0field 0field into r43 as Point;
211      get.or_use points__[r0] r43 into r44;
212      cast true r44 into r45 as Optional__6Uxqmb23WYh;
213      cast 0field 0field into r46 as Point;
214      cast false r46 into r47 as Optional__6Uxqmb23WYh;
215      ternary r42 r45.val.x r47.val.x into r48;
216      ternary r42 r45.val.y r47.val.y into r49;
217      cast r48 r49 into r50 as Point;
218      ternary r42 r45.is_some r47.is_some into r51;
219      cast r51 r50 into r52 as Optional__6Uxqmb23WYh;
220      assert.eq r52.is_some true;
221      cast 0field 0field into r53 as Point;
222      get.or_use points__[r0] r53 into r54;
223      cast true r54 into r55 as Optional__6Uxqmb23WYh;
224      cast 0field 0field into r56 as Point;
225      cast false r56 into r57 as Optional__6Uxqmb23WYh;
226      ternary r42 r55.val.x r57.val.x into r58;
227      ternary r42 r55.val.y r57.val.y into r59;
228      cast r58 r59 into r60 as Point;
229      ternary r42 r55.is_some r57.is_some into r61;
230      cast r61 r60 into r62 as Optional__6Uxqmb23WYh;
231      is.eq r62.val.x 9field into r63;
232      assert.eq r63 true;
233      is.eq r62.val.y 9field into r64;
234      assert.eq r64 true;
235      set 0u32 into points__len__[false];
236      get.or_use points__len__[false] 0u32 into r65;
237      is.eq r65 0u32 into r66;
238      assert.eq r66 true;
239  
240  function test_vector_containers_behavior:
241      input r0 as u32.private;
242      async test_vector_containers_behavior r0 into r1;
243      output r1 as vector_structs.alpha/test_vector_containers_behavior.future;
244  
245  finalize test_vector_containers_behavior:
246      input r0 as u32.public;
247      get.or_use containers__len__[false] 0u32 into r1;
248      is.eq r1 0u32 into r2;
249      assert.eq r2 true;
250      cast 11field 22field into r3 as Point;
251      cast 33field 44field into r4 as Point;
252      cast r3 r4 into r5 as [Point; 2u32];
253      cast 1u32 r5 into r6 as Container;
254      cast 55field 66field into r7 as Point;
255      cast 77field 88field into r8 as Point;
256      cast r7 r8 into r9 as [Point; 2u32];
257      cast 2u32 r9 into r10 as Container;
258      get.or_use containers__len__[false] 0u32 into r11;
259      add r11 1u32 into r12;
260      set r12 into containers__len__[false];
261      set r6 into containers__[r11];
262      get.or_use containers__len__[false] 0u32 into r13;
263      add r13 1u32 into r14;
264      set r14 into containers__len__[false];
265      set r10 into containers__[r13];
266      get.or_use containers__len__[false] 0u32 into r15;
267      is.eq r15 2u32 into r16;
268      assert.eq r16 true;
269      get.or_use containers__len__[false] 0u32 into r17;
270      lt r0 r17 into r18;
271      cast 0field 0field into r19 as Point;
272      cast r19 r19 into r20 as [Point; 2u32];
273      cast 0u32 r20 into r21 as Container;
274      get.or_use containers__[r0] r21 into r22;
275      cast true r22 into r23 as Optional__Iw7fQz4CKJ0;
276      cast 0field 0field into r24 as Point;
277      cast r24 r24 into r25 as [Point; 2u32];
278      cast 0u32 r25 into r26 as Container;
279      cast false r26 into r27 as Optional__Iw7fQz4CKJ0;
280      ternary r18 r23.val.points[0u32].x r27.val.points[0u32].x into r28;
281      ternary r18 r23.val.points[0u32].y r27.val.points[0u32].y into r29;
282      cast r28 r29 into r30 as Point;
283      ternary r18 r23.val.points[1u32].x r27.val.points[1u32].x into r31;
284      ternary r18 r23.val.points[1u32].y r27.val.points[1u32].y into r32;
285      cast r31 r32 into r33 as Point;
286      cast r30 r33 into r34 as [Point; 2u32];
287      ternary r18 r23.val.id r27.val.id into r35;
288      cast r35 r34 into r36 as Container;
289      ternary r18 r23.is_some r27.is_some into r37;
290      cast r37 r36 into r38 as Optional__Iw7fQz4CKJ0;
291      assert.eq r38.is_some true;
292      cast 0field 0field into r39 as Point;
293      cast r39 r39 into r40 as [Point; 2u32];
294      cast 0u32 r40 into r41 as Container;
295      get.or_use containers__[r0] r41 into r42;
296      cast true r42 into r43 as Optional__Iw7fQz4CKJ0;
297      cast 0field 0field into r44 as Point;
298      cast r44 r44 into r45 as [Point; 2u32];
299      cast 0u32 r45 into r46 as Container;
300      cast false r46 into r47 as Optional__Iw7fQz4CKJ0;
301      ternary r18 r43.val.points[0u32].x r47.val.points[0u32].x into r48;
302      ternary r18 r43.val.points[0u32].y r47.val.points[0u32].y into r49;
303      cast r48 r49 into r50 as Point;
304      ternary r18 r43.val.points[1u32].x r47.val.points[1u32].x into r51;
305      ternary r18 r43.val.points[1u32].y r47.val.points[1u32].y into r52;
306      cast r51 r52 into r53 as Point;
307      cast r50 r53 into r54 as [Point; 2u32];
308      ternary r18 r43.val.id r47.val.id into r55;
309      cast r55 r54 into r56 as Container;
310      ternary r18 r43.is_some r47.is_some into r57;
311      cast r57 r56 into r58 as Optional__Iw7fQz4CKJ0;
312      is.eq r58.val.id 1u32 into r59;
313      is.eq r58.val.id 2u32 into r60;
314      or r59 r60 into r61;
315      assert.eq r61 true;
316      get.or_use containers__len__[false] 0u32 into r62;
317      lt r0 r62 into r63;
318      assert.eq r63 true;
319      cast 999field 999field into r64 as Point;
320      cast 33field 33field into r65 as Point;
321      cast r64 r65 into r66 as [Point; 2u32];
322      cast 99u32 r66 into r67 as Container;
323      set r67 into containers__[r0];
324      get.or_use containers__len__[false] 0u32 into r68;
325      lt r0 r68 into r69;
326      cast 0field 0field into r70 as Point;
327      cast r70 r70 into r71 as [Point; 2u32];
328      cast 0u32 r71 into r72 as Container;
329      get.or_use containers__[r0] r72 into r73;
330      cast true r73 into r74 as Optional__Iw7fQz4CKJ0;
331      cast 0field 0field into r75 as Point;
332      cast r75 r75 into r76 as [Point; 2u32];
333      cast 0u32 r76 into r77 as Container;
334      cast false r77 into r78 as Optional__Iw7fQz4CKJ0;
335      ternary r69 r74.val.points[0u32].x r78.val.points[0u32].x into r79;
336      ternary r69 r74.val.points[0u32].y r78.val.points[0u32].y into r80;
337      cast r79 r80 into r81 as Point;
338      ternary r69 r74.val.points[1u32].x r78.val.points[1u32].x into r82;
339      ternary r69 r74.val.points[1u32].y r78.val.points[1u32].y into r83;
340      cast r82 r83 into r84 as Point;
341      cast r81 r84 into r85 as [Point; 2u32];
342      ternary r69 r74.val.id r78.val.id into r86;
343      cast r86 r85 into r87 as Container;
344      ternary r69 r74.is_some r78.is_some into r88;
345      cast r88 r87 into r89 as Optional__Iw7fQz4CKJ0;
346      assert.eq r89.is_some true;
347      cast 0field 0field into r90 as Point;
348      cast r90 r90 into r91 as [Point; 2u32];
349      cast 0u32 r91 into r92 as Container;
350      get.or_use containers__[r0] r92 into r93;
351      cast true r93 into r94 as Optional__Iw7fQz4CKJ0;
352      cast 0field 0field into r95 as Point;
353      cast r95 r95 into r96 as [Point; 2u32];
354      cast 0u32 r96 into r97 as Container;
355      cast false r97 into r98 as Optional__Iw7fQz4CKJ0;
356      ternary r69 r94.val.points[0u32].x r98.val.points[0u32].x into r99;
357      ternary r69 r94.val.points[0u32].y r98.val.points[0u32].y into r100;
358      cast r99 r100 into r101 as Point;
359      ternary r69 r94.val.points[1u32].x r98.val.points[1u32].x into r102;
360      ternary r69 r94.val.points[1u32].y r98.val.points[1u32].y into r103;
361      cast r102 r103 into r104 as Point;
362      cast r101 r104 into r105 as [Point; 2u32];
363      ternary r69 r94.val.id r98.val.id into r106;
364      cast r106 r105 into r107 as Container;
365      ternary r69 r94.is_some r98.is_some into r108;
366      cast r108 r107 into r109 as Optional__Iw7fQz4CKJ0;
367      is.eq r109.val.id 99u32 into r110;
368      assert.eq r110 true;
369      is.eq r109.val.points[0u32].x 999field into r111;
370      assert.eq r111 true;
371      set 0u32 into containers__len__[false];
372      get.or_use containers__len__[false] 0u32 into r112;
373      is.eq r112 0u32 into r113;
374      assert.eq r113 true;
375  
376  constructor:
377      assert.eq edition 0u16;
378  verified: true
379  status: accepted
380  {
381    "transitions": [
382      {
383        "id": "au1trjq5kpxmazrjxlyegtl3ppt9qgtcfzh3m946gxnh58hyyfqjgpqzrmww9",
384        "program": "vector_structs.alpha",
385        "function": "test_vector_primitives_behavior",
386        "inputs": [
387          {
388            "type": "private",
389            "id": "2872858198295054679010964662015798115237494890849567206519582377601599113830field",
390            "value": "ciphertext1qyqxcafp995cwacaz95g94fknwlutj5x35h58gfxw3vq26g7n98rvps08zhxt"
391          },
392          {
393            "type": "private",
394            "id": "2702710938507374829138324520925823963002297806243819055651277541859971153590field",
395            "value": "ciphertext1qyqwlna3hxv3hut08rt98a3qkwnl6pstzfyt8eepg6tp8j9d0amj6pqmaue28"
396          }
397        ],
398        "outputs": [
399          {
400            "type": "future",
401            "id": "7397517254279241212599494381914463372334958939760146873023844196783581569957field",
402            "value": "{\n  program_id: vector_structs.alpha,\n  function_name: test_vector_primitives_behavior,\n  arguments: [\n    1u32,\n    25u32\n  ]\n}"
403          }
404        ],
405        "tpk": "1089465132806857055666925932741168426680032210185089090946582998238875937545group",
406        "tcm": "5048366293531218121282484352453660844297563175023906260732432518741373547651field",
407        "scm": "7233206248230409010373179920276423065250248653915667352739856899589375480598field"
408      }
409    ],
410    "global_state_root": "sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu"
411  }
412  
413  verified: true
414  status: accepted
415  {
416    "transitions": [
417      {
418        "id": "au1akt50xfz7zkjp2vw9m72amsyh59py2663hs7ueqew2n664pnv5qqvphw5d",
419        "program": "vector_structs.alpha",
420        "function": "test_vector_structs_behavior",
421        "inputs": [
422          {
423            "type": "private",
424            "id": "6646789499296738386608485901124650591633616124564205171925161861208204709447field",
425            "value": "ciphertext1qyqxd32977va8lrdt24ejr3c4twl4gdphulr0ac4nwhuz8475mr5yqgu6xw92"
426          }
427        ],
428        "outputs": [
429          {
430            "type": "future",
431            "id": "6490668780907192160623645589225067745142421768413517632918355105646106585910field",
432            "value": "{\n  program_id: vector_structs.alpha,\n  function_name: test_vector_structs_behavior,\n  arguments: [\n    0u32\n  ]\n}"
433          }
434        ],
435        "tpk": "2318132272222563822888482429551924754260464284044523158365566933549316198672group",
436        "tcm": "2226883441790104099647521281025877837144456033641979976733890123979148404549field",
437        "scm": "146406619540950284275564834906079829653654148198218676624058761044769224084field"
438      }
439    ],
440    "global_state_root": "sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu"
441  }
442  
443  verified: true
444  status: accepted
445  {
446    "transitions": [
447      {
448        "id": "au1zws5pfkp7qteuf9394hrfl6jwzh3qvmxkf5sj2upqjjyk98x2uzqq4uc9n",
449        "program": "vector_structs.alpha",
450        "function": "test_vector_containers_behavior",
451        "inputs": [
452          {
453            "type": "private",
454            "id": "7695494318500568005174531872359266794157994398733196537771499765335189398293field",
455            "value": "ciphertext1qyqvm7y4yjm9m6cr3fmdewj69hvkydcscqnmmz23lvxkc05gnca6zqqal7csc"
456          }
457        ],
458        "outputs": [
459          {
460            "type": "future",
461            "id": "5974128139234547275175733361815913245530549394065923926939540630865608443622field",
462            "value": "{\n  program_id: vector_structs.alpha,\n  function_name: test_vector_containers_behavior,\n  arguments: [\n    1u32\n  ]\n}"
463          }
464        ],
465        "tpk": "4708461349010197128139529746135301506531622937349344239746858554334999852505group",
466        "tcm": "1966431095609933492794026233707451435024960849077663502916557699132856217926field",
467        "scm": "790000807995628590722815538301513419586007163763998843554762043512984451296field"
468      }
469    ],
470    "global_state_root": "sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu"
471  }
472