v / vlib / v2 / gen / cleanc / parallel_cache_init_test.v
51 lines · 48 sloc · 1.52 KB · e7738c112c787d477501fa4a87edd0e1d72159bd
Raw
1// vtest build: !linux && !windows
2module cleanc
3
4import os
5import v2.markused
6import v2.parser
7import v2.pref as vpref
8import v2.token
9import v2.transformer
10import v2.types
11
12fn generate_parallel_worker_c_with_cached_init_for_test(code string, cached_init_calls []string) string {
13 tmp_file := os.join_path(os.temp_dir(), 'v2_parallel_cache_init_test_${os.getpid()}.v')
14 os.write_file(tmp_file, code) or { panic('failed to write temp file') }
15 defer {
16 os.rm(tmp_file) or {}
17 }
18 prefs := &vpref.Preferences{
19 backend: .cleanc
20 no_parallel: false
21 }
22 mut file_set := token.FileSet.new()
23 mut par := parser.Parser.new(prefs)
24 files := par.parse_files([tmp_file], mut file_set)
25 env := types.Environment.new()
26 mut checker := types.Checker.new(prefs, file_set, env)
27 checker.check_files(files)
28 mut trans := transformer.Transformer.new_with_pref(env, prefs)
29 gen_files := trans.transform_files(files)
30 used := markused.mark_used(gen_files, env)
31 mut gen := Gen.new_with_env_and_pref(gen_files, env, prefs)
32 gen.set_used_fn_keys(used)
33 gen.set_cached_init_calls(cached_init_calls)
34 gen.gen_passes_1_to_4()
35 emit_indices := gen.gen_pass5_pre()
36 mut worker := gen.new_pass5_worker(emit_indices, 0)
37 worker.gen_pass5_files(emit_indices)
38 gen.merge_pass5_worker(worker)
39 gen.gen_pass5_post()
40 return gen.gen_finalize()
41}
42
43fn test_parallel_worker_preserves_cached_init_calls_in_main() {
44 csrc := generate_parallel_worker_c_with_cached_init_for_test('
45fn main() {
46}
47', [
48 '__v2_cached_init_imports',
49 ])
50 assert csrc.contains('__v2_cached_init_imports();')
51}
52