v2 / vlib / v / tests / aliases / nested_c_alias_structural_compatibility_test.c.v
45 lines · 36 sloc · 903 bytes · da7e85cbec7fd73d9d26db033850648c49120c9f
Raw
1// vtest build: windows
2type C.WCHAR = u16
3type C.PWSTR = &C.WCHAR
4type C.DWORD = u32
5
6struct WideAliasHolder {
7mut:
8 ptr C.PWSTR
9}
10
11struct ShareModeHolder {
12mut:
13 mode C.DWORD
14}
15
16fn accept_wide_ptr(ptr C.PWSTR) string {
17 return unsafe { string_from_wide(&u16(ptr)) }
18}
19
20fn accept_share_mode(mode C.DWORD) u32 {
21 return u32(mode)
22}
23
24fn test_nested_c_alias_types_are_structurally_compatible() {
25 wide := 'example.txt'.to_wide()
26 assert accept_wide_ptr(wide) == 'example.txt'
27
28 mut wide_holder := WideAliasHolder{
29 ptr: C.PWSTR(unsafe { nil })
30 }
31 wide_holder.ptr = wide
32 assert unsafe { string_from_wide(&u16(wide_holder.ptr)) } == 'example.txt'
33
34 mode := u32(0x40000000)
35 assert accept_share_mode(mode) == mode
36
37 mut mode_holder := ShareModeHolder{}
38 mode_holder.mode = mode
39 assert u32(mode_holder.mode) == mode
40
41 mode_holder = ShareModeHolder{
42 mode: mode
43 }
44 assert u32(mode_holder.mode) == mode
45}
46