1add_libc_testsuite(libc_string_unittests)
2
3add_subdirectory(memory_utils)
4
5add_libc_unittest(
6  memccpy_test
7  SUITE
8    libc_string_unittests
9  SRCS
10    memccpy_test.cpp
11  DEPENDS
12    libc.src.string.memccpy
13)
14
15add_libc_unittest(
16  mempcpy_test
17  SUITE
18    libc_string_unittests
19  SRCS
20    mempcpy_test.cpp
21  DEPENDS
22    libc.src.string.mempcpy
23)
24
25add_libc_unittest(
26  memchr_test
27  SUITE
28    libc_string_unittests
29  SRCS
30    memchr_test.cpp
31  DEPENDS
32    libc.src.string.memchr
33)
34
35add_libc_unittest(
36  memrchr_test
37  SUITE
38    libc_string_unittests
39  SRCS
40    memrchr_test.cpp
41  DEPENDS
42    libc.src.string.memrchr
43)
44
45add_libc_unittest(
46  stpcpy_test
47  SUITE
48    libc_string_unittests
49  SRCS
50    stpcpy_test.cpp
51  DEPENDS
52    libc.src.string.stpcpy
53)
54
55add_libc_unittest(
56  stpncpy_test
57  SUITE
58    libc_string_unittests
59  SRCS
60    stpncpy_test.cpp
61  DEPENDS
62    libc.src.string.stpncpy
63)
64
65add_libc_unittest(
66  strcat_test
67  SUITE
68    libc_string_unittests
69  SRCS
70    strcat_test.cpp
71  DEPENDS
72    libc.src.string.strcat
73)
74
75add_libc_unittest(
76  strchr_test
77  SUITE
78    libc_string_unittests
79  SRCS
80    strchr_test.cpp
81  DEPENDS
82    libc.src.string.strchr
83)
84
85add_libc_unittest(
86  strcmp_test
87  SUITE
88    libc_string_unittests
89  SRCS
90    strcmp_test.cpp
91  DEPENDS
92    libc.src.string.strcmp
93)
94
95add_libc_unittest(
96  strcpy_test
97  SUITE
98    libc_string_unittests
99  SRCS
100    strcpy_test.cpp
101  DEPENDS
102    libc.src.string.strcpy
103)
104
105add_libc_unittest(
106  strcspn_test
107  SUITE
108    libc_string_unittests
109  SRCS
110    strcspn_test.cpp
111  DEPENDS
112    libc.src.string.strcspn
113)
114
115add_libc_unittest(
116  strdup_test
117  SUITE
118    libc_string_unittests
119  SRCS
120    strdup_test.cpp
121  DEPENDS
122    libc.include.stdlib
123    libc.src.string.strdup
124)
125
126add_libc_unittest(
127  strlcat_test
128  SUITE
129    libc_string_unittests
130  SRCS
131    strlcat_test.cpp
132  DEPENDS
133    libc.src.string.strlcat
134)
135
136add_libc_unittest(
137  strlcpy_test
138  SUITE
139    libc_string_unittests
140  SRCS
141    strlcpy_test.cpp
142  DEPENDS
143    libc.src.string.strlcpy
144)
145
146add_libc_unittest(
147  strlen_test
148  SUITE
149    libc_string_unittests
150  SRCS
151    strlen_test.cpp
152  DEPENDS
153    libc.src.string.strlen
154)
155
156add_libc_unittest(
157  strncat_test
158  SUITE
159    libc_string_unittests
160  SRCS
161    strncat_test.cpp
162  DEPENDS
163    libc.src.string.strncat
164)
165
166add_libc_unittest(
167  strncmp_test
168  SUITE
169    libc_string_unittests
170  SRCS
171    strncmp_test.cpp
172  DEPENDS
173    libc.src.string.strncmp
174)
175
176add_libc_unittest(
177  strncpy_test
178  SUITE
179    libc_string_unittests
180  SRCS
181    strncpy_test.cpp
182  DEPENDS
183    libc.src.string.strncpy
184)
185
186add_libc_unittest(
187  strndup_test
188  SUITE
189    libc_string_unittests
190  SRCS
191    strndup_test.cpp
192  DEPENDS
193    libc.include.stdlib
194    libc.src.string.strndup
195)
196
197add_libc_unittest(
198  strnlen_test
199  SUITE
200    libc_string_unittests
201  SRCS
202    strnlen_test.cpp
203  DEPENDS
204    libc.src.string.strnlen
205)
206
207add_libc_unittest(
208  strpbrk_test
209  SUITE
210    libc_string_unittests
211  SRCS
212    strpbrk_test.cpp
213  DEPENDS
214    libc.src.string.strpbrk
215)
216
217add_libc_unittest(
218  strrchr_test
219  SUITE
220    libc_string_unittests
221  SRCS
222    strrchr_test.cpp
223  DEPENDS
224    libc.src.string.strrchr
225)
226
227add_libc_unittest(
228  strspn_test
229  SUITE
230    libc_string_unittests
231  SRCS
232    strspn_test.cpp
233  DEPENDS
234    libc.src.string.strspn
235)
236
237add_libc_unittest(
238  strstr_test
239  SUITE
240    libc_string_unittests
241  SRCS
242    strstr_test.cpp
243  DEPENDS
244    libc.src.string.strstr
245)
246
247add_libc_unittest(
248  strtok_test
249  SUITE
250    libc_string_unittests
251  SRCS
252    strtok_test.cpp
253  DEPENDS
254    libc.src.string.strtok
255)
256
257add_libc_unittest(
258  strtok_r_test
259  SUITE
260    libc_string_unittests
261  SRCS
262    strtok_r_test.cpp
263  DEPENDS
264    libc.src.string.strtok_r
265)
266
267# Tests all implementations that can run on the target CPU.
268function(add_libc_multi_impl_test name)
269  get_property(fq_implementations GLOBAL PROPERTY ${name}_implementations)
270  foreach(fq_config_name IN LISTS fq_implementations)
271    get_target_property(required_cpu_features ${fq_config_name} REQUIRE_CPU_FEATURES)
272    cpu_supports(can_run "${required_cpu_features}")
273    if(can_run)
274      add_libc_unittest(
275        ${fq_config_name}_test
276        SUITE
277          libc_string_unittests
278        COMPILE_OPTIONS
279          ${LIBC_COMPILE_OPTIONS_NATIVE}
280        LINK_LIBRARIES
281          LibcMemoryHelpers
282        ${ARGN}
283        DEPENDS
284          ${fq_config_name}
285      )
286      get_fq_target_name(${fq_config_name}_test fq_target_name)
287    else()
288      message(STATUS "Skipping test for '${fq_config_name}' insufficient host cpu features '${required_cpu_features}'")
289    endif()
290  endforeach()
291endfunction()
292
293add_libc_multi_impl_test(bcmp SRCS bcmp_test.cpp)
294add_libc_multi_impl_test(bzero SRCS bzero_test.cpp)
295add_libc_multi_impl_test(memcmp SRCS memcmp_test.cpp)
296add_libc_multi_impl_test(memcpy SRCS memcpy_test.cpp)
297add_libc_multi_impl_test(memmove SRCS memmove_test.cpp)
298add_libc_multi_impl_test(memset SRCS memset_test.cpp)
299