/ tests / tests / execution / simple_vector.adl
simple_vector.adl
 1  /*
 2  seed = 987654321
 3  min_height = 16
 4  
 5  [case]
 6  program = "test.alpha"
 7  function = "test_vector_ops"
 8  input = []
 9  private_key = "APrivateKey1zkpH5Ne1Xfd79t61VhK7b6yaYz92yW5dbuVkiFheR7rwCDE"
10  */
11  
12  program test.alpha {
13      storage vec: [u32];
14  
15      async transition test_vector_ops() -> Future {
16          return async {
17              // Initialize: ensure empty
18              assert(vec.len() == 0);
19  
20              // Push elements
21              vec.push(10);
22              vec.push(20);
23              vec.push(30);
24              assert(vec.len() == 3);
25  
26              // Get element at index 1 (should be 20)
27              let val = vec.get(1).unwrap();
28              assert(val == 20);
29  
30              // Set index 1 to 25
31              vec.set(1, 25);
32              let updated_val = vec.get(1).unwrap();
33              assert(updated_val == 25);
34  
35              // Before: vec = [10, 25, 30]
36              // After:  vec = [30, 25] and removed = 10
37              let removed_non_last = vec.swap_remove(0);
38              assert(removed_non_last == 10);
39              assert(vec.len() == 2);
40  
41              // Verify that the last element (30) replaced index 0
42              let first_elem = vec.get(0).unwrap();
43              assert(first_elem == 30);
44              let second_elem = vec.get(1).unwrap();
45              assert(second_elem == 25);
46  
47              // Pop last element (should be 25 now)
48              let popped = vec.pop().unwrap();
49              assert(popped == 25);
50              assert(vec.len() == 1);
51  
52              // Clear
53              vec.clear();
54              assert(vec.len() == 0);
55  
56              // Pop an empty vector
57              assert(vec.pop() == none);
58  
59              vec.push(99);
60              assert(vec.len() == 1);
61  
62              // Single-element swap_remove(0)
63              // Should remove the only element, returning 99
64              let removed_single = vec.swap_remove(0);
65              assert(removed_single == 99);
66              assert(vec.len() == 0);
67          };
68      }
69  
70      @noupgrade
71      async constructor() {}
72  }