Print this page
Commonize demangle test pieces; allow for running specific tests and test cases; use linker sets to simplify test definition
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/test/util-tests/tests/demangle/rust.c
+++ new/usr/src/test/util-tests/tests/demangle/rust.c
1 1 /*
2 2 * Copyright (c) 2014 Alex Crichton
3 3 *
4 4 * Permission is hereby granted, free of charge, to any
5 5 * person obtaining a copy of this software and associated
6 6 * documentation files (the "Software"), to deal in the
7 7 * Software without restriction, including without
8 8 * limitation the rights to use, copy, modify, merge,
9 9 * publish, distribute, sublicense, and/or sell copies of
10 10 * the Software, and to permit persons to whom the Software
11 11 * is furnished to do so, subject to the following
12 12 * conditions:
13 13 *
14 14 * The above copyright notice and this permission notice
15 15 * shall be included in all copies or substantial portions
16 16 * of the Software.
17 17 *
↓ open down ↓ |
17 lines elided |
↑ open up ↑ |
18 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
19 19 * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
20 20 * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
21 21 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
22 22 * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
23 23 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24 24 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
25 25 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26 26 * DEALINGS IN THE SOFTWARE.
27 27 */
28 +
28 29 /*
29 - * Copyright 2019, Joyent, Inc.
30 + * Copyright 2019 Joyent, Inc.
30 31 */
31 32
32 33 /*
33 34 * Test cases taken from rustc-demangle 0.1.9
34 35 */
35 -#include <errno.h>
36 -#include <stdio.h>
37 -#include <stdlib.h>
38 -#include <string.h>
39 -#include <sys/sysmacros.h>
40 -#include <demangle-sys.h>
41 36
42 -typedef struct rust_test_case {
43 - const char *mangled;
44 - const char *demangled;
45 -} rust_test_case_t;
46 -#define T(_m, _d) { .mangled = _m, .demangled = _d }
47 -#define T_ERR(_m) { .mangled = _m }
37 +#include "demangle_test.h"
48 38
49 -typedef struct rust_test_grp {
50 - const char *name;
51 - rust_test_case_t tests[];
52 -} rust_test_grp_t;
53 -#define GROUP(_n, ...) \
54 - static rust_test_grp_t _n = { \
55 - .name = #_n, \
56 - .tests = { \
57 - __VA_ARGS__, \
58 - { NULL, NULL } \
59 - } \
60 - }
39 +/* BEGIN CSTYLED */
61 40
62 -GROUP(demangle,
41 +GROUP(demangle, SYSDEM_LANG_RUST,
63 42 T_ERR("test"),
64 43 T("_ZN4testE", "test"),
65 44 T_ERR("_ZN4test"),
66 45 T("_ZN4test1a2bcE", "test::a::bc"));
67 46
68 -GROUP(demangle_dollars,
47 +GROUP(demangle_dollars, SYSDEM_LANG_RUST,
69 48 T("_ZN4$RP$E", ")"),
70 49 T("_ZN8$RF$testE", "&test"),
71 50 T("_ZN8$BP$test4foobE", "*test::foob"),
72 51 T("_ZN9$u20$test4foobE", " test::foob"),
73 52 T("_ZN35Bar$LT$$u5b$u32$u3b$$u20$4$u5d$$GT$E", "Bar<[u32; 4]>"));
74 53
75 -GROUP(demangle_many_dollars,
54 +GROUP(demangle_many_dollars, SYSDEM_LANG_RUST,
76 55 T("_ZN13test$u20$test4foobE", "test test::foob"),
77 56 T("_ZN12test$BP$test4foobE", "test*test::foob"));
78 57
79 -/* BEGIN CSTYLED */
80 -GROUP(demangle_osx,
58 +GROUP(demangle_osx, SYSDEM_LANG_RUST,
81 59 T("__ZN5alloc9allocator6Layout9for_value17h02a996811f781011E",
82 60 "alloc::allocator::Layout::for_value::h02a996811f781011"),
83 61 T("__ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap18_MSG_FILE_LINE_COL17haf7cb8d5824ee659E",
84 62 "<core::option::Option<T>>::unwrap::_MSG_FILE_LINE_COL::haf7cb8d5824ee659"),
85 63 T("__ZN4core5slice89_$LT$impl$u20$core..iter..traits..IntoIterator$u20$for$u20$$RF$$u27$a$u20$$u5b$T$u5d$$GT$9into_iter17h450e234d27262170E",
86 64 "core::slice::<impl core::iter::traits::IntoIterator for &'a [T]>::into_iter::h450e234d27262170"));
87 -/* END CSTYLED */
88 65
89 -GROUP(demangle_elements_beginning_with_underscore,
66 +GROUP(demangle_elements_beginning_with_underscore, SYSDEM_LANG_RUST,
90 67 T("_ZN13_$LT$test$GT$E", "<test>"),
91 68 T("_ZN28_$u7b$$u7b$closure$u7d$$u7d$E", "{{closure}}"),
92 69 T("_ZN15__STATIC_FMTSTRE", "__STATIC_FMTSTR"));
93 70
94 -/* BEGIN CSTYLED */
95 -GROUP(demangle_trait_impls,
71 +GROUP(demangle_trait_impls, SYSDEM_LANG_RUST,
96 72 T("_ZN71_$LT$Test$u20$$u2b$$u20$$u27$static$u20$as$u20$foo..Bar$LT$Test$GT$$GT$3barE",
97 73 "<Test + 'static as foo::Bar<Test>>::bar"));
98 -/* END CSTYLED */
99 74
100 -GROUP(invalid_no_chop, T_ERR("_ZNfooE"));
75 +GROUP(invalid_no_chop, SYSDEM_LANG_RUST, T_ERR("_ZNfooE"));
101 76
102 -/* BEGIN CSTYLED */
103 -GROUP(handle_assoc_types,
77 +GROUP(handle_assoc_types, SYSDEM_LANG_RUST,
104 78 T("_ZN151_$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$9call_once17h69e8f44b3723e1caE",
105 79 "<alloc::boxed::Box<alloc::boxed::FnBox<A, Output=R> + 'a> as core::ops::function::FnOnce<A>>::call_once::h69e8f44b3723e1ca"));
106 -/* END CSTYLED */
107 80
108 -static rust_test_grp_t *rust_tests[] = {
109 - &demangle,
110 - &demangle_dollars,
111 - &demangle_many_dollars,
112 - &demangle_osx,
113 - &demangle_elements_beginning_with_underscore,
114 - &demangle_trait_impls,
115 - &invalid_no_chop,
116 - &handle_assoc_types
117 -};
118 -
119 -static const size_t n_rust_tests = ARRAY_SIZE(rust_tests);
120 -
121 -static boolean_t
122 -check_failure(size_t i, rust_test_case_t *tc, const char *dem, boolean_t res)
123 -{
124 - int savederr = errno;
125 -
126 - if (dem == NULL && savederr == EINVAL)
127 - return (B_TRUE);
128 -
129 - if (res)
130 - (void) printf("FAILURE\n");
131 -
132 - if (dem != NULL) {
133 - (void) printf(" [%zu] Successfully demanged an invalid "
134 - "name\n", i);
135 - (void) printf(" Name: '%s'\n", tc->mangled);
136 - (void) printf(" Demangled: '%s'\n", dem);
137 - return (B_FALSE);
138 - }
139 -
140 - (void) printf(" [%zu] demangle() returned an unexpected error\n", i);
141 - (void) printf(" Errno: %d\n", savederr);
142 - return (B_FALSE);
143 -}
144 -
145 -static boolean_t
146 -check_success(size_t i, rust_test_case_t *tc, const char *dem, boolean_t res)
147 -{
148 - if (dem != NULL && strcmp(tc->demangled, dem) == 0)
149 - return (B_TRUE);
150 -
151 - if (res)
152 - (void) printf("FAILURE\n");
153 -
154 - if (dem == NULL) {
155 - (void) printf(" [%zu] Failed to demangle '%s'\n", i,
156 - tc->mangled);
157 - return (B_FALSE);
158 - }
159 -
160 - (void) printf(" [%zu] Demangled results do not match.\n", i);
161 - (void) printf(" Mangled: %s\n", tc->mangled);
162 - (void) printf(" Expected: %s\n", tc->demangled);
163 - (void) printf(" Actual: %s\n", dem);
164 - return (B_FALSE);
165 -}
166 -
167 -static boolean_t
168 -run_test(rust_test_grp_t *test)
169 -{
170 - boolean_t res = B_TRUE;
171 -
172 - (void) printf("Test %s: ", test->name);
173 -
174 - for (size_t i = 0; test->tests[i].mangled != NULL; i++) {
175 - char *dem;
176 -
177 - dem = sysdemangle(test->tests[i].mangled, SYSDEM_LANG_RUST,
178 - NULL);
179 - if (test->tests[i].demangled == NULL)
180 - res &= check_failure(i, &test->tests[i], dem, res);
181 - else
182 - res &= check_success(i, &test->tests[i], dem, res);
183 -
184 - free(dem);
185 - }
186 -
187 - if (res)
188 - (void) printf("SUCCESS\n");
189 -
190 - return (res);
191 -}
192 -
193 -int
194 -main(int argc, char **argv)
195 -{
196 - boolean_t ok = B_TRUE;
197 -
198 - for (size_t i = 0; i < n_rust_tests; i++)
199 - ok &= run_test(rust_tests[i]);
200 -
201 - return (ok ? 0 : 1);
202 -}
203 -
204 -const char *
205 -_umem_debug_init(void)
206 -{
207 - return ("default,verbose");
208 -}
209 -
210 -const char *
211 -_umem_logging_init(void)
212 -{
213 - return ("fail,contents");
214 -}
81 +/* END CSTYLED */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX