various_storage_types.adl
1 /* 2 seed = 987654321 3 min_height = 16 4 5 [case] 6 program = "mixed_types.alpha" 7 function = "unsigned_integers" 8 input = [] 9 private_key = "APrivateKey1zkpH5Ne1Xfd79t61VhK7b6yaYz92yW5dbuVkiFheR7rwCDE" 10 11 [case] 12 program = "mixed_types.alpha" 13 function = "signed_integers" 14 input = [] 15 private_key = "APrivateKey1zkpH5Ne1Xfd79t61VhK7b6yaYz92yW5dbuVkiFheR7rwCDE" 16 17 [case] 18 program = "mixed_types.alpha" 19 function = "primitive_types" 20 input = [] 21 private_key = "APrivateKey1zkpH5Ne1Xfd79t61VhK7b6yaYz92yW5dbuVkiFheR7rwCDE" 22 23 [case] 24 program = "mixed_types.alpha" 25 function = "structs_and_arrays" 26 input = [] 27 private_key = "APrivateKey1zkpH5Ne1Xfd79t61VhK7b6yaYz92yW5dbuVkiFheR7rwCDE" 28 */ 29 30 program mixed_types.alpha { 31 // 32 // ──────────────────────────────────────────────────────────────── 33 // Storage declarations 34 // ──────────────────────────────────────────────────────────────── 35 // 36 storage counter_u32: u32; 37 storage counter_i32: i32; 38 storage flag: bool; 39 storage scalar_val: scalar; 40 storage field_val: field; 41 storage group_val: group; 42 storage address_val: address; 43 storage containers: [Container; 2]; 44 storage points_array: [Point; 3]; 45 46 struct Point { 47 x: field, 48 y: field, 49 } 50 51 struct Container { 52 points: [Point; 2], 53 label: u8, 54 } 55 56 // 57 // ──────────────────────────────────────────────────────────────── 58 // Unsigned integers test 59 // ──────────────────────────────────────────────────────────────── 60 // 61 async transition unsigned_integers() -> Future { 62 return async { 63 counter_u32 = 10; 64 assert(counter_u32.unwrap() == 10); 65 66 let new_val = counter_u32.unwrap_or(0) + 5; 67 counter_u32 = new_val; 68 assert(counter_u32.unwrap() == 15); 69 70 // Confirm unwrap_or fallback 71 let temp = counter_u32.unwrap_or(99); 72 assert(temp == 15); 73 }; 74 } 75 76 // 77 // ──────────────────────────────────────────────────────────────── 78 // Signed integers test 79 // ──────────────────────────────────────────────────────────────── 80 // 81 async transition signed_integers() -> Future { 82 return async { 83 counter_i32 = -5i32; 84 assert(counter_i32.unwrap() == -5i32); 85 86 let new_val = counter_i32.unwrap_or(0) - 3; 87 counter_i32 = new_val; 88 assert(counter_i32.unwrap() == -8i32); 89 90 // Check fallback 91 let fallback = counter_i32.unwrap_or(1); 92 assert(fallback == -8i32); 93 }; 94 } 95 96 // 97 // ──────────────────────────────────────────────────────────────── 98 // Primitive types test 99 // ──────────────────────────────────────────────────────────────── 100 // 101 async transition primitive_types() -> Future { 102 return async { 103 flag = true; 104 scalar_val = 2scalar; 105 field_val = 21field; 106 group_val = 0group; 107 address_val = aleo10qerras5799u6k7rjtc9y3hcwxuykr45qra7x7dp6jgnc0923czqm0lgta; 108 109 assert(flag.unwrap() == true); 110 assert(scalar_val.unwrap() == 2scalar); 111 assert(field_val.unwrap() == 21field); 112 assert(group_val.unwrap() == 0group); 113 assert(address_val.unwrap() == aleo10qerras5799u6k7rjtc9y3hcwxuykr45qra7x7dp6jgnc0923czqm0lgta); 114 115 // Flip and recheck 116 flag = !flag.unwrap(); 117 assert(flag.unwrap() == false); 118 119 // Ensure unwrap_or fallback doesn't modify behavior 120 assert(flag.unwrap_or(true) == false); 121 assert(field_val.unwrap_or(0field) == 21field); 122 }; 123 } 124 125 // 126 // ──────────────────────────────────────────────────────────────── 127 // Structs and arrays test (nested) 128 // ──────────────────────────────────────────────────────────────── 129 // 130 async transition structs_and_arrays() -> Future { 131 return async { 132 // Build nested data 133 let p0 = Point { x: 1field, y: 2field }; 134 let p1 = Point { x: 3field, y: 4field }; 135 let p2 = Point { x: 5field, y: 6field }; 136 137 let c0 = Container { points: [p0, p1], label: 10 }; 138 let c1 = Container { points: [p2, p0], label: 20 }; 139 140 containers = [c0, c1]; 141 points_array = [p0, p1, p2]; 142 143 // Validate values immediately 144 let c = containers.unwrap(); 145 assert(c[0].points[0].x == 1field); 146 assert(c[1].points[0].y == 6field); 147 assert(c[0].label == 10); 148 assert(c[1].label == 20); 149 150 // Mutate and check again 151 let c_mut = c; 152 c_mut[0].points[0].x = 9field; 153 containers = c_mut; 154 155 let c2 = containers.unwrap(); 156 assert(c2[0].points[0].x == 9field); 157 assert(c2[1].points[0].x == 5field); 158 159 // Check nested array of structs 160 let arr = points_array.unwrap(); 161 assert(arr[0].x == 1field); 162 assert(arr[2].y == 6field); 163 164 let arr2 = arr; 165 arr2[1].x = arr2[1].x + 10field; 166 points_array = arr2; 167 168 let arr3 = points_array.unwrap(); 169 assert(arr3[1].x == 13field); 170 }; 171 } 172 173 @noupgrade 174 async constructor() {} 175 }