v4 / vlib / v3 / tests / gettid_libc_compat_codegen_test.v
47 lines · 42 sloc · 1.57 KB · 288feee4702b35beadb4037d02b96b5c8674156b
Raw
1import os
2
3const gettid_compat_vexe = @VEXE
4const gettid_compat_tests_dir = os.dir(@FILE)
5const gettid_compat_v3_dir = os.dir(gettid_compat_tests_dir)
6const gettid_compat_vlib_dir = os.dir(gettid_compat_v3_dir)
7const gettid_compat_v3_src = os.join_path(gettid_compat_v3_dir, 'v3.v')
8
9fn gettid_compat_build_v3() string {
10 v3_bin := os.join_path(os.temp_dir(), 'v3_gettid_compat_test_${os.getpid()}')
11 os.rm(v3_bin) or {}
12 build :=
13 os.execute('${gettid_compat_vexe} -gc none -path "${gettid_compat_vlib_dir}|@vlib|@vmodules" -o ${v3_bin} ${gettid_compat_v3_src}')
14 assert build.exit_code == 0, build.output
15 return v3_bin
16}
17
18fn test_v_gettid_uses_declared_libc_compat_helper() {
19 $if !linux {
20 return
21 }
22 v3_bin := gettid_compat_build_v3()
23 src := os.join_path(os.temp_dir(), 'v3_gettid_compat_${os.getpid()}.v')
24 bin := os.join_path(os.temp_dir(), 'v3_gettid_compat_${os.getpid()}')
25 os.write_file(src, 'module main
26
27#flag -Werror=implicit-function-declaration
28
29fn main() {
30 println(v_gettid().str())
31}
32') or {
33 panic(err)
34 }
35 os.rm(bin) or {}
36 os.rm(bin + '.c') or {}
37 compile := os.execute('${v3_bin} ${src} -b c -o ${bin}')
38 assert compile.exit_code == 0, compile.output
39 assert !compile.output.contains('implicit declaration'), compile.output
40 generated := os.read_file(bin + '.c') or { panic(err) }
41 assert generated.contains('static inline u32 v3_gettid(void)'), generated
42 assert generated.contains('syscall(SYS_gettid)'), generated
43 assert !generated.contains(' gettid('), generated
44 run := os.execute(bin)
45 assert run.exit_code == 0, run.output
46 assert run.output.trim_space().len > 0, run.output
47}
48