v2 / vlib / v / tests / builtin_arrays / array_delete_last_test.v
55 lines · 46 sloc · 842 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct ArrayList[T] {
2mut:
3 size usize
4 items []&T
5}
6
7fn new_array_list[T]() ArrayList[T] {
8 return ArrayList[T]{}
9}
10
11fn (li ArrayList[T]) is_empty() bool {
12 return li.size == 0
13}
14
15fn (mut li ArrayList[T]) add(item &T) {
16 li.items << item
17 li.size += 1
18}
19
20fn (mut li ArrayList[T]) pop() ?&T {
21 if li.is_empty() {
22 return none
23 } else {
24 item := li.items.last()
25 li.items.delete_last()
26 li.size -= 1
27 return item
28 }
29}
30
31struct Student {
32 name string
33mut:
34 age u8
35}
36
37fn (mut s Student) grow() {
38 s.age += 1
39}
40
41fn test_main() {
42 mut list := new_array_list[Student]()
43 assert list.is_empty() && list.size == 0
44
45 mut stu := Student{'Tom', 16}
46 list.add(&stu)
47 assert !list.is_empty() && list.size == 1
48 stu.grow()
49 assert stu.age == 17
50
51 tom := list.pop()?
52 assert list.is_empty() && list.size == 0
53 assert tom == stu
54 assert tom.age == 17
55}
56