/ tests / tests / execution / various_storage_types.adl
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  }