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