mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
75 lines
1010 B
V
75 lines
1010 B
V
fn test_ptr_assign() {
|
|
v := [int(5), 6, 77, 1]
|
|
unsafe {
|
|
mut p := &v[0]
|
|
(*p)++
|
|
p++ // p now points to v[1]
|
|
(*p) += 2
|
|
p += 2 // p now points to v[3]
|
|
*p = 31
|
|
}
|
|
assert v[0] == 6
|
|
assert v[1] == 8
|
|
assert v[2] == 77
|
|
assert v[3] == 31
|
|
}
|
|
|
|
fn test_double_ptr() {
|
|
i := 5
|
|
j := 7
|
|
unsafe {
|
|
mut x := &i
|
|
mut p := &x
|
|
(*p) = &j
|
|
assert x == &j
|
|
}
|
|
// ///////
|
|
mut x := &int(0)
|
|
unsafe {
|
|
mut p := &x
|
|
(*p) = &int(1)
|
|
}
|
|
assert ptr_str(x) == ptr_str(&int(1))
|
|
}
|
|
|
|
fn test_ptr_infix() {
|
|
v := 4
|
|
mut q := unsafe {&v - 1}
|
|
q = unsafe {q + 3}
|
|
assert q == unsafe {&v + 2}
|
|
}
|
|
|
|
struct S1 {
|
|
}
|
|
|
|
[unsafe]
|
|
fn (s S1) f() {
|
|
}
|
|
|
|
fn test_funcs() {
|
|
s := S1{}
|
|
unsafe {s.f()}
|
|
_ = C.strerror(0) // [trusted] function prototype in builtin/cfns.c.v
|
|
}
|
|
|
|
fn test_if_expr_unsafe() {
|
|
i := 4
|
|
p := if true { unsafe {&i} } else { unsafe {&i} }
|
|
assert *p == 4
|
|
}
|
|
|
|
fn unsafe_if_stmt() int {
|
|
i := 4
|
|
unsafe {
|
|
if true {
|
|
return (&i)[0]
|
|
}
|
|
}
|
|
return i
|
|
}
|
|
|
|
fn test_unsafe_if_stmt() {
|
|
x := unsafe_if_stmt()
|
|
assert x == 4
|
|
}
|