v2 / vlib / v / tests / create_dll / create_win_dll_test.v
61 lines · 57 sloc · 1.18 KB · 793487fd6d0f720414466d137684027394aea4b3
Raw
1import dl
2import os
3
4type Func = fn () int
5
6fn run_test(cc_used string) {
7 cc_flag := match cc_used {
8 'tcc64' { '-cc tcc' }
9 'gcc64' { '-cc gcc' }
10 'clang64' { '-cc clang' }
11 'msvc64' { '-cc msvc' }
12 'tcc32' { '-cc tcc -m32 -d no_backtrace' }
13 'gcc32' { '-cc gcc -m32' }
14 'clang32' { '-cc clang -m32' }
15 'msvc32' { '-cc msvc -m32' }
16 else { '' }
17 }
18
19 assert os.system('${os.quoted_path(@VEXE)} ${cc_flag} -o create_win_${cc_used}.dll -shared create_win_dll.c.v') == 0
20 assert os.exists('create_win_${cc_used}.dll')
21 handle := dl.open('create_win_${cc_used}.dll', 0)
22 assert handle != 0
23 test := Func(dl.sym(handle, 'Tatltuae'))
24 assert test() == 42
25 assert test() != 666
26 // dl.close(handle) // works for gcc, clang and msvc but crashes with tcc
27}
28
29fn test_create_and_dllmain() {
30 os.chdir(os.dir(@FILE)) or {}
31 $if windows {
32 $if x64 {
33 $if tinyc {
34 run_test('tcc64')
35 }
36 $if gcc {
37 run_test('gcc64')
38 }
39 $if clang {
40 run_test('clang64')
41 }
42 $if msvc {
43 run_test('msvc64')
44 }
45 }
46 $if x32 {
47 $if tinyc {
48 run_test('tcc32')
49 }
50 $if gcc {
51 run_test('gcc32')
52 }
53 $if clang {
54 run_test('clang32')
55 }
56 $if msvc {
57 run_test('msvc32')
58 }
59 }
60 }
61}
62