v2 / vlib / v / tests / pointers / pointers_test.v
46 lines · 42 sloc · 734 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1fn test_pointer_arithmetic() {
2 arr := [1, 2, 3, 4]
3 unsafe {
4 mut parr := &int(arr.data)
5 assert 1 == *parr
6 parr++
7 assert 2 == *parr
8 parr++
9 assert 3 == *parr
10 parr_add_one := *(parr + 1)
11 assert parr_add_one == 4
12 assert *(parr + 1) == 4
13 }
14}
15
16struct User {
17mut:
18 name string
19}
20
21fn modify_ptr(mut user User) {
22 user.name = 'Bob'
23}
24
25fn test_mut_ptr() {
26 mut user := &User{'Peter'}
27 assert user.name == 'Peter'
28 modify_ptr(mut user)
29 assert user.name == 'Bob'
30 println(user)
31}
32
33/*
34fn test_multi_level_pointer_dereferencing() {
35 n := 100
36 pn := &n
37 ppn := &pn
38 unsafe {
39 mut pppn := &ppn
40 ***pppn = 300
41 pppa := ***int(pppn)
42 assert 300 == ***pppa
43 }
44 assert n == 300 // updated by the unsafe pointer manipulation
45}
46*/
47