v / vlib / v2 / transformer / generated_fn_module_from_flat_test.v
102 lines · 91 sloc · 3.44 KB · f3c5760b8838272e4789c38a1be9e03f9ceac351
Raw
1// Copyright (c) 2026 Alexander Medvednikov. All rights reserved.
2// Use of this source code is governed by an MIT license
3// that can be found in the LICENSE file.
4// vtest build: macos
5//
6// Bit-equality pin for s164: `generated_fn_module_from_flat` (FlatAst input)
7// must produce the same string as `generated_fn_module` (legacy []ast.File
8// input) across the routing prefixes: __sort_cmp_, Array_, generic
9// module-prefixed names, and the non-module fallback set.
10module transformer
11
12import v2.ast
13
14fn make_files_for_routing_test() []ast.File {
15 return [
16 ast.File{
17 name: 'main.v'
18 mod: 'main'
19 },
20 ast.File{
21 name: 'time_lib.v'
22 mod: 'time'
23 },
24 ast.File{
25 name: 'os_lib.v'
26 mod: 'os'
27 },
28 ]
29}
30
31fn make_flat_for_routing_test() ast.FlatAst {
32 return ast.flatten_files(make_files_for_routing_test())
33}
34
35fn test_generated_fn_module_from_flat_matches_legacy_sort_cmp_module() {
36 files := make_files_for_routing_test()
37 flat := make_flat_for_routing_test()
38 name := '__sort_cmp_time__FormatDate'
39 assert generated_fn_module(name, files) == 'time'
40 assert generated_fn_module_from_flat(name, &flat) == 'time'
41}
42
43fn test_generated_fn_module_from_flat_matches_legacy_sort_cmp_unknown() {
44 files := make_files_for_routing_test()
45 flat := make_flat_for_routing_test()
46 // 'somethingelse' is not a registered file mod — both paths return ''
47 name := '__sort_cmp_somethingelse__Frob'
48 assert generated_fn_module(name, files) == ''
49 assert generated_fn_module_from_flat(name, &flat) == ''
50}
51
52fn test_generated_fn_module_from_flat_matches_legacy_array_prefix_module() {
53 files := make_files_for_routing_test()
54 flat := make_flat_for_routing_test()
55 name := 'Array_os__File_str'
56 assert generated_fn_module(name, files) == 'os'
57 assert generated_fn_module_from_flat(name, &flat) == 'os'
58}
59
60fn test_generated_fn_module_from_flat_matches_legacy_module_prefixed() {
61 files := make_files_for_routing_test()
62 flat := make_flat_for_routing_test()
63 name := 'time__FormatDate__str'
64 assert generated_fn_module(name, files) == 'time'
65 assert generated_fn_module_from_flat(name, &flat) == 'time'
66}
67
68fn test_generated_fn_module_from_flat_matches_legacy_no_module_prefix() {
69 files := make_files_for_routing_test()
70 flat := make_flat_for_routing_test()
71 // fn name with no __ separator falls through to ''
72 name := 'plainname'
73 assert generated_fn_module(name, files) == ''
74 assert generated_fn_module_from_flat(name, &flat) == ''
75}
76
77fn test_generated_fn_module_from_flat_matches_legacy_filtered_prefix() {
78 files := make_files_for_routing_test()
79 flat := make_flat_for_routing_test()
80 // 'int' is in the filtered prefix set — both paths skip and return ''
81 name := 'int__custom_helper'
82 assert generated_fn_module(name, files) == ''
83 assert generated_fn_module_from_flat(name, &flat) == ''
84}
85
86fn test_generated_fn_module_from_flat_matches_legacy_main_excluded() {
87 files := make_files_for_routing_test()
88 flat := make_flat_for_routing_test()
89 // 'main' is excluded from prefix module routing — both paths return ''
90 name := 'main__Helper__str'
91 assert generated_fn_module(name, files) == ''
92 assert generated_fn_module_from_flat(name, &flat) == ''
93}
94
95fn test_generated_fn_module_from_flat_matches_legacy_unknown_module() {
96 files := make_files_for_routing_test()
97 flat := make_flat_for_routing_test()
98 // 'nonexistent' isn't a registered file mod — both paths return ''
99 name := 'nonexistent__Type__str'
100 assert generated_fn_module(name, files) == ''
101 assert generated_fn_module_from_flat(name, &flat) == ''
102}
103