blob: b8279b636978bd89a660fe9c8fc4386b8e65b092 [file] [log] [blame]
Anders Lewisa7b0f882017-07-24 20:01:13 -07001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <fcntl.h>
18#include <stdio.h>
19#include <sys/types.h>
20#include <sys/wait.h>
21#include <unistd.h>
22
23#include <regex>
24#include <string>
25#include <vector>
26
Anders Lewis4b26f712017-08-11 15:56:18 -070027#include <android-base/file.h>
Anders Lewisa7b0f882017-07-24 20:01:13 -070028#include <gtest/gtest.h>
29
30class SystemTests : public ::testing::Test {
31 protected:
32 void SetUp() override {
33 raw_output_ = "";
34 sanitized_output_ = "";
35 exitcode_ = 0;
36 }
37
38 void SanitizeOutput();
39
40 void Exec(std::vector<const char*> args);
Anders Lewisa7b0f882017-07-24 20:01:13 -070041 void RunTest(std::vector<const char*> extra_args = {});
42 void Verify(const std::string& expected_output, int expected_exitcode,
Christopher Ferrisd9d39be2017-08-23 18:03:51 -070043 std::vector<const char*> extra_args = {}, bool sanitize = true);
Anders Lewisa7b0f882017-07-24 20:01:13 -070044
45 std::string raw_output_;
46 std::string sanitized_output_;
47 int exitcode_;
48 pid_t pid_;
49 int fd_;
50};
51
Anders Lewis4b26f712017-08-11 15:56:18 -070052static std::string GetBionicXmlArg(const char* xml_file) {
Christopher Ferrisd9d39be2017-08-23 18:03:51 -070053 return "--bionic_xml=" + android::base::GetExecutableDirectory() + "/test_suites/" + xml_file;
Anders Lewis4b26f712017-08-11 15:56:18 -070054}
55
Anders Lewisa7b0f882017-07-24 20:01:13 -070056void SystemTests::SanitizeOutput() {
57 // Cut off anything after the arguments, since that varies with time.
58 sanitized_output_ = std::regex_replace(raw_output_, std::regex(".+(BM_\\S+) +.+"), "$1");
59
60 // Remove everything before the header.
61 sanitized_output_.erase(0, sanitized_output_.find("------------------------------------------------"));
62
63 // Remove the header.
64 sanitized_output_.erase(0, sanitized_output_.find("BM_"));
65
66 // Remove any hanging output.
67 sanitized_output_.erase(sanitized_output_.find_last_of("BM_\\S+\n") + 1);
68}
69
70static void GetExe(std::string* exe_name) {
71 char path[PATH_MAX];
72 ssize_t path_len = readlink("/proc/self/exe", path, sizeof(path));
73 ASSERT_TRUE(path_len >= 0);
74 *exe_name = std::string(std::regex_replace(path, std::regex("-tests"), ""));
75}
76
77void SystemTests::Exec(std::vector<const char*> args) {
78 int fds[2];
79 ASSERT_NE(-1, pipe(fds));
80 ASSERT_NE(-1, fcntl(fds[0], F_SETFL, O_NONBLOCK));
81
82 if ((pid_ = fork()) == 0) {
83 // Run the test.
84 close(fds[0]);
85 close(STDIN_FILENO);
86 close(STDOUT_FILENO);
87 close(STDERR_FILENO);
88 ASSERT_NE(0, dup2(fds[1], STDOUT_FILENO));
89 ASSERT_NE(0, dup2(fds[1], STDERR_FILENO));
90 close(fds[1]);
91
92 std::string exe_name;
93 GetExe(&exe_name);
94 args.insert(args.begin(), exe_name.c_str());
95 args.push_back(nullptr);
96 execv(args[0], reinterpret_cast<char* const*>(const_cast<char**>(args.data())));
97 exit(1);
98 }
99 ASSERT_NE(-1, pid_);
100
101 close(fds[1]);
102 fd_ = fds[0];
103}
104
105void SystemTests::Verify(const std::string& expected_output,
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700106 int expected_exitcode, std::vector<const char*> extra_args, bool sanitize) {
Anders Lewisa7b0f882017-07-24 20:01:13 -0700107 std::vector<const char*> args;
108 for (const auto& arg : extra_args) {
109 args.push_back(arg);
110 }
111
112 Exec(args);
113
114 raw_output_ = "";
115 while (true) {
116 char buffer[4097];
117 ssize_t bytes = TEMP_FAILURE_RETRY(read(fd_, buffer, sizeof(buffer) - 1));
118 if (bytes == -1 && errno == EAGAIN) {
119 continue;
120 }
121 ASSERT_NE(-1, bytes);
122 if (bytes == 0) {
123 break;
124 }
125 buffer[bytes] = '\0';
126 raw_output_ += buffer;
127 }
128 close(fd_);
129
130 int status;
131 ASSERT_EQ(pid_, TEMP_FAILURE_RETRY(waitpid(pid_, &status, 0))) << "Test output:\n" << raw_output_;
132 exitcode_ = WEXITSTATUS(status);
Anders Lewisa7b0f882017-07-24 20:01:13 -0700133 ASSERT_EQ(expected_exitcode, exitcode_) << "Test output:\n" << raw_output_;
Anders Lewisa7b0f882017-07-24 20:01:13 -0700134
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700135 if (sanitize) {
136 SanitizeOutput();
137 ASSERT_EQ(expected_output, sanitized_output_);
138 } else {
139 ASSERT_EQ(expected_output, raw_output_);
140 }
141}
142
143TEST_F(SystemTests, help) {
144 std::string expected =
145 "Usage:\n"
146 "bionic_benchmarks [--bionic_cpu=<cpu_to_isolate>]\n"
147 " [--bionic_xml=<path_to_xml>]\n"
148 " [--bionic_iterations=<num_iter>]\n"
149 " [--bionic_extra=\"<fn_name> <arg1> <arg 2> ...\"]\n"
150 " [<Google benchmark flags>]\n"
151 "Google benchmark flags:\n"
152 "benchmark [--benchmark_list_tests={true|false}]\n"
153 " [--benchmark_filter=<regex>]\n"
154 " [--benchmark_min_time=<min_time>]\n"
155 " [--benchmark_repetitions=<num_repetitions>]\n"
156 " [--benchmark_report_aggregates_only={true|false}\n"
157 " [--benchmark_format=<console|json|csv>]\n"
158 " [--benchmark_out=<filename>]\n"
159 " [--benchmark_out_format=<json|console|csv>]\n"
160 " [--benchmark_color={auto|true|false}]\n"
161 " [--benchmark_counters_tabular={true|false}]\n"
162 " [--v=<verbosity>]\n";
163 Verify(expected, 0, std::vector<const char*>{"--help"}, false);
Anders Lewisa7b0f882017-07-24 20:01:13 -0700164}
165
166TEST_F(SystemTests, full_suite) {
167 std::string expected =
168 "BM_empty/iterations:1\n"
169 "BM_load_relaxed/iterations:1\n"
170 "BM_load_acquire/iterations:1\n"
171 "BM_store_release/iterations:1\n"
172 "BM_store_seq_cst/iterations:1\n"
173 "BM_fetch_add_relaxed/iterations:1\n"
174 "BM_fetch_add_seq_cst/iterations:1\n"
175 "BM_acquire_fence/iterations:1\n"
176 "BM_seq_cst_fence/iterations:1\n"
177 "BM_fetch_add_cs/iterations:1\n"
178 "BM_math_sqrt/iterations:1\n"
179 "BM_math_log10/iterations:1\n"
180 "BM_math_logb/iterations:1\n"
181 "BM_math_isfinite_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700182 "BM_math_isfinite_macro/1/iterations:1\n"
183 "BM_math_isfinite_macro/2/iterations:1\n"
184 "BM_math_isfinite_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700185 "BM_math_isfinite/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700186 "BM_math_isfinite/1/iterations:1\n"
187 "BM_math_isfinite/2/iterations:1\n"
188 "BM_math_isfinite/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700189 "BM_math_isinf_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700190 "BM_math_isinf_macro/1/iterations:1\n"
191 "BM_math_isinf_macro/2/iterations:1\n"
192 "BM_math_isinf_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700193 "BM_math_isinf/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700194 "BM_math_isinf/1/iterations:1\n"
195 "BM_math_isinf/2/iterations:1\n"
196 "BM_math_isinf/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700197 "BM_math_isnan_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700198 "BM_math_isnan_macro/1/iterations:1\n"
199 "BM_math_isnan_macro/2/iterations:1\n"
200 "BM_math_isnan_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700201 "BM_math_isnan/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700202 "BM_math_isnan/1/iterations:1\n"
203 "BM_math_isnan/2/iterations:1\n"
204 "BM_math_isnan/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700205 "BM_math_isnormal_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700206 "BM_math_isnormal_macro/1/iterations:1\n"
207 "BM_math_isnormal_macro/2/iterations:1\n"
208 "BM_math_isnormal_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700209 "BM_math_isnormal/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700210 "BM_math_isnormal/1/iterations:1\n"
211 "BM_math_isnormal/2/iterations:1\n"
212 "BM_math_isnormal/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700213 "BM_math_sin_fast/iterations:1\n"
214 "BM_math_sin_feupdateenv/iterations:1\n"
215 "BM_math_sin_fesetenv/iterations:1\n"
216 "BM_math_fpclassify/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700217 "BM_math_fpclassify/1/iterations:1\n"
218 "BM_math_fpclassify/2/iterations:1\n"
219 "BM_math_fpclassify/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700220 "BM_math_signbit_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700221 "BM_math_signbit_macro/1/iterations:1\n"
222 "BM_math_signbit_macro/2/iterations:1\n"
223 "BM_math_signbit_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700224 "BM_math_signbit/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700225 "BM_math_signbit/1/iterations:1\n"
226 "BM_math_signbit/2/iterations:1\n"
227 "BM_math_signbit/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700228 "BM_math_fabs_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700229 "BM_math_fabs_macro/1/iterations:1\n"
230 "BM_math_fabs_macro/2/iterations:1\n"
231 "BM_math_fabs_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700232 "BM_math_fabs/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700233 "BM_math_fabs/1/iterations:1\n"
234 "BM_math_fabs/2/iterations:1\n"
235 "BM_math_fabs/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700236 "BM_pthread_self/iterations:1\n"
237 "BM_pthread_getspecific/iterations:1\n"
238 "BM_pthread_setspecific/iterations:1\n"
239 "BM_pthread_once/iterations:1\n"
240 "BM_pthread_mutex_lock/iterations:1\n"
241 "BM_pthread_mutex_lock_ERRORCHECK/iterations:1\n"
242 "BM_pthread_mutex_lock_RECURSIVE/iterations:1\n"
243 "BM_pthread_rwlock_read/iterations:1\n"
244 "BM_pthread_rwlock_write/iterations:1\n"
245 "BM_pthread_create/iterations:1\n"
246 "BM_pthread_create_and_run/iterations:1\n"
247 "BM_pthread_exit_and_join/iterations:1\n"
248 "BM_pthread_key_create/iterations:1\n"
249 "BM_pthread_key_delete/iterations:1\n"
250 "BM_semaphore_sem_getvalue/iterations:1\n"
251 "BM_semaphore_sem_wait_sem_post/iterations:1\n"
252 "BM_stdio_fread/8/iterations:1\n"
253 "BM_stdio_fread/64/iterations:1\n"
254 "BM_stdio_fread/512/iterations:1\n"
255 "BM_stdio_fread/1024/iterations:1\n"
256 "BM_stdio_fread/8192/iterations:1\n"
257 "BM_stdio_fread/16384/iterations:1\n"
258 "BM_stdio_fread/32768/iterations:1\n"
259 "BM_stdio_fread/65536/iterations:1\n"
260 "BM_stdio_fwrite/8/iterations:1\n"
261 "BM_stdio_fwrite/64/iterations:1\n"
262 "BM_stdio_fwrite/512/iterations:1\n"
263 "BM_stdio_fwrite/1024/iterations:1\n"
264 "BM_stdio_fwrite/8192/iterations:1\n"
265 "BM_stdio_fwrite/16384/iterations:1\n"
266 "BM_stdio_fwrite/32768/iterations:1\n"
267 "BM_stdio_fwrite/65536/iterations:1\n"
268 "BM_stdio_fread_unbuffered/8/iterations:1\n"
269 "BM_stdio_fread_unbuffered/64/iterations:1\n"
270 "BM_stdio_fread_unbuffered/512/iterations:1\n"
271 "BM_stdio_fread_unbuffered/1024/iterations:1\n"
272 "BM_stdio_fread_unbuffered/8192/iterations:1\n"
273 "BM_stdio_fread_unbuffered/16384/iterations:1\n"
274 "BM_stdio_fread_unbuffered/32768/iterations:1\n"
275 "BM_stdio_fread_unbuffered/65536/iterations:1\n"
276 "BM_stdio_fwrite_unbuffered/8/iterations:1\n"
277 "BM_stdio_fwrite_unbuffered/64/iterations:1\n"
278 "BM_stdio_fwrite_unbuffered/512/iterations:1\n"
279 "BM_stdio_fwrite_unbuffered/1024/iterations:1\n"
280 "BM_stdio_fwrite_unbuffered/8192/iterations:1\n"
281 "BM_stdio_fwrite_unbuffered/16384/iterations:1\n"
282 "BM_stdio_fwrite_unbuffered/32768/iterations:1\n"
283 "BM_stdio_fwrite_unbuffered/65536/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700284 "BM_stdio_fopen_fgetln_fclose_locking/iterations:1\n"
285 "BM_stdio_fopen_fgetln_fclose_no_locking/iterations:1\n"
286 "BM_stdio_fopen_fgets_fclose_locking/iterations:1\n"
287 "BM_stdio_fopen_fgets_fclose_no_locking/iterations:1\n"
Anders Lewisac4f4b42017-08-08 18:29:51 -0700288 "BM_stdio_fopen_fgetc_fclose_locking/1024/iterations:1\n"
289 "BM_stdio_fopen_fgetc_fclose_no_locking/1024/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700290 "BM_stdio_fopen_getline_fclose_locking/iterations:1\n"
291 "BM_stdio_fopen_getline_fclose_no_locking/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700292 "BM_string_memcmp/8/0/0/iterations:1\n"
293 "BM_string_memcmp/64/0/0/iterations:1\n"
294 "BM_string_memcmp/512/0/0/iterations:1\n"
295 "BM_string_memcmp/1024/0/0/iterations:1\n"
296 "BM_string_memcmp/8192/0/0/iterations:1\n"
297 "BM_string_memcmp/16384/0/0/iterations:1\n"
298 "BM_string_memcmp/32768/0/0/iterations:1\n"
299 "BM_string_memcmp/65536/0/0/iterations:1\n"
300 "BM_string_memcpy/8/0/0/iterations:1\n"
301 "BM_string_memcpy/64/0/0/iterations:1\n"
302 "BM_string_memcpy/512/0/0/iterations:1\n"
303 "BM_string_memcpy/1024/0/0/iterations:1\n"
304 "BM_string_memcpy/8192/0/0/iterations:1\n"
305 "BM_string_memcpy/16384/0/0/iterations:1\n"
306 "BM_string_memcpy/32768/0/0/iterations:1\n"
307 "BM_string_memcpy/65536/0/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700308 "BM_string_memmove_non_overlapping/8/0/0/iterations:1\n"
309 "BM_string_memmove_non_overlapping/64/0/0/iterations:1\n"
310 "BM_string_memmove_non_overlapping/512/0/0/iterations:1\n"
311 "BM_string_memmove_non_overlapping/1024/0/0/iterations:1\n"
312 "BM_string_memmove_non_overlapping/8192/0/0/iterations:1\n"
313 "BM_string_memmove_non_overlapping/16384/0/0/iterations:1\n"
314 "BM_string_memmove_non_overlapping/32768/0/0/iterations:1\n"
315 "BM_string_memmove_non_overlapping/65536/0/0/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700316 "BM_string_memmove_overlap_dst_before_src/8/0/iterations:1\n"
317 "BM_string_memmove_overlap_dst_before_src/64/0/iterations:1\n"
318 "BM_string_memmove_overlap_dst_before_src/512/0/iterations:1\n"
319 "BM_string_memmove_overlap_dst_before_src/1024/0/iterations:1\n"
320 "BM_string_memmove_overlap_dst_before_src/8192/0/iterations:1\n"
321 "BM_string_memmove_overlap_dst_before_src/16384/0/iterations:1\n"
322 "BM_string_memmove_overlap_dst_before_src/32768/0/iterations:1\n"
323 "BM_string_memmove_overlap_dst_before_src/65536/0/iterations:1\n"
324 "BM_string_memmove_overlap_src_before_dst/8/0/iterations:1\n"
325 "BM_string_memmove_overlap_src_before_dst/64/0/iterations:1\n"
326 "BM_string_memmove_overlap_src_before_dst/512/0/iterations:1\n"
327 "BM_string_memmove_overlap_src_before_dst/1024/0/iterations:1\n"
328 "BM_string_memmove_overlap_src_before_dst/8192/0/iterations:1\n"
329 "BM_string_memmove_overlap_src_before_dst/16384/0/iterations:1\n"
330 "BM_string_memmove_overlap_src_before_dst/32768/0/iterations:1\n"
331 "BM_string_memmove_overlap_src_before_dst/65536/0/iterations:1\n"
332 "BM_string_memset/8/0/iterations:1\n"
333 "BM_string_memset/64/0/iterations:1\n"
334 "BM_string_memset/512/0/iterations:1\n"
335 "BM_string_memset/1024/0/iterations:1\n"
336 "BM_string_memset/8192/0/iterations:1\n"
337 "BM_string_memset/16384/0/iterations:1\n"
338 "BM_string_memset/32768/0/iterations:1\n"
339 "BM_string_memset/65536/0/iterations:1\n"
340 "BM_string_strlen/8/0/iterations:1\n"
341 "BM_string_strlen/64/0/iterations:1\n"
342 "BM_string_strlen/512/0/iterations:1\n"
343 "BM_string_strlen/1024/0/iterations:1\n"
344 "BM_string_strlen/8192/0/iterations:1\n"
345 "BM_string_strlen/16384/0/iterations:1\n"
346 "BM_string_strlen/32768/0/iterations:1\n"
347 "BM_string_strlen/65536/0/iterations:1\n"
348 "BM_string_strcat_copy_only/8/0/0/iterations:1\n"
349 "BM_string_strcat_copy_only/64/0/0/iterations:1\n"
350 "BM_string_strcat_copy_only/512/0/0/iterations:1\n"
351 "BM_string_strcat_copy_only/1024/0/0/iterations:1\n"
352 "BM_string_strcat_copy_only/8192/0/0/iterations:1\n"
353 "BM_string_strcat_copy_only/16384/0/0/iterations:1\n"
354 "BM_string_strcat_copy_only/32768/0/0/iterations:1\n"
355 "BM_string_strcat_copy_only/65536/0/0/iterations:1\n"
356 "BM_string_strcat_seek_only/8/0/0/iterations:1\n"
357 "BM_string_strcat_seek_only/64/0/0/iterations:1\n"
358 "BM_string_strcat_seek_only/512/0/0/iterations:1\n"
359 "BM_string_strcat_seek_only/1024/0/0/iterations:1\n"
360 "BM_string_strcat_seek_only/8192/0/0/iterations:1\n"
361 "BM_string_strcat_seek_only/16384/0/0/iterations:1\n"
362 "BM_string_strcat_seek_only/32768/0/0/iterations:1\n"
363 "BM_string_strcat_seek_only/65536/0/0/iterations:1\n"
364 "BM_string_strcat_half_copy_half_seek/8/0/0/iterations:1\n"
365 "BM_string_strcat_half_copy_half_seek/64/0/0/iterations:1\n"
366 "BM_string_strcat_half_copy_half_seek/512/0/0/iterations:1\n"
367 "BM_string_strcat_half_copy_half_seek/1024/0/0/iterations:1\n"
368 "BM_string_strcat_half_copy_half_seek/8192/0/0/iterations:1\n"
369 "BM_string_strcat_half_copy_half_seek/16384/0/0/iterations:1\n"
370 "BM_string_strcat_half_copy_half_seek/32768/0/0/iterations:1\n"
371 "BM_string_strcat_half_copy_half_seek/65536/0/0/iterations:1\n"
372 "BM_string_strcpy/8/0/0/iterations:1\n"
373 "BM_string_strcpy/64/0/0/iterations:1\n"
374 "BM_string_strcpy/512/0/0/iterations:1\n"
375 "BM_string_strcpy/1024/0/0/iterations:1\n"
376 "BM_string_strcpy/8192/0/0/iterations:1\n"
377 "BM_string_strcpy/16384/0/0/iterations:1\n"
378 "BM_string_strcpy/32768/0/0/iterations:1\n"
379 "BM_string_strcpy/65536/0/0/iterations:1\n"
380 "BM_string_strcmp/8/0/0/iterations:1\n"
381 "BM_string_strcmp/64/0/0/iterations:1\n"
382 "BM_string_strcmp/512/0/0/iterations:1\n"
383 "BM_string_strcmp/1024/0/0/iterations:1\n"
384 "BM_string_strcmp/8192/0/0/iterations:1\n"
385 "BM_string_strcmp/16384/0/0/iterations:1\n"
386 "BM_string_strcmp/32768/0/0/iterations:1\n"
387 "BM_string_strcmp/65536/0/0/iterations:1\n"
Anders Lewisac4f4b42017-08-08 18:29:51 -0700388 "BM_string_strstr/8/0/0/iterations:1\n"
389 "BM_string_strstr/64/0/0/iterations:1\n"
390 "BM_string_strstr/512/0/0/iterations:1\n"
391 "BM_string_strstr/1024/0/0/iterations:1\n"
392 "BM_string_strstr/8192/0/0/iterations:1\n"
393 "BM_string_strstr/16384/0/0/iterations:1\n"
394 "BM_string_strstr/32768/0/0/iterations:1\n"
395 "BM_string_strstr/65536/0/0/iterations:1\n"
396 "BM_string_strchr/8/0/iterations:1\n"
397 "BM_string_strchr/64/0/iterations:1\n"
398 "BM_string_strchr/512/0/iterations:1\n"
399 "BM_string_strchr/1024/0/iterations:1\n"
400 "BM_string_strchr/8192/0/iterations:1\n"
401 "BM_string_strchr/16384/0/iterations:1\n"
402 "BM_string_strchr/32768/0/iterations:1\n"
403 "BM_string_strchr/65536/0/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700404 "BM_time_clock_gettime/iterations:1\n"
405 "BM_time_clock_gettime_syscall/iterations:1\n"
406 "BM_time_gettimeofday/iterations:1\n"
407 "BM_time_gettimeofday_syscall/iterations:1\n"
408 "BM_time_time/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700409 "BM_time_localtime/iterations:1\n"
410 "BM_time_localtime_r/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700411 "BM_unistd_getpid/iterations:1\n"
412 "BM_unistd_getpid_syscall/iterations:1\n"
413 "BM_unistd_gettid/iterations:1\n"
Anders Lewisac4f4b42017-08-08 18:29:51 -0700414 "BM_unistd_gettid_syscall/iterations:1\n"
415 "BM_stdlib_malloc_free/8/0/iterations:1\n"
416 "BM_stdlib_malloc_free/64/0/iterations:1\n"
417 "BM_stdlib_malloc_free/512/0/iterations:1\n"
418 "BM_stdlib_malloc_free/1024/0/iterations:1\n"
419 "BM_stdlib_malloc_free/8192/0/iterations:1\n"
420 "BM_stdlib_malloc_free/16384/0/iterations:1\n"
421 "BM_stdlib_malloc_free/32768/0/iterations:1\n"
422 "BM_stdlib_malloc_free/65536/0/iterations:1\n"
423 "BM_stdlib_mbstowcs/0/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700424 "BM_stdlib_mbrtowc/0/iterations:1\n"
425 "BM_property_get/1/iterations:1\n"
426 "BM_property_get/4/iterations:1\n"
427 "BM_property_get/16/iterations:1\n"
428 "BM_property_get/64/iterations:1\n"
429 "BM_property_get/128/iterations:1\n"
430 "BM_property_get/256/iterations:1\n"
431 "BM_property_get/512/iterations:1\n"
432 "BM_property_find/1/iterations:1\n"
433 "BM_property_find/4/iterations:1\n"
434 "BM_property_find/16/iterations:1\n"
435 "BM_property_find/64/iterations:1\n"
436 "BM_property_find/128/iterations:1\n"
437 "BM_property_find/256/iterations:1\n"
438 "BM_property_find/512/iterations:1\n"
439 "BM_property_read/1/iterations:1\n"
440 "BM_property_read/4/iterations:1\n"
441 "BM_property_read/16/iterations:1\n"
442 "BM_property_read/64/iterations:1\n"
443 "BM_property_read/128/iterations:1\n"
444 "BM_property_read/256/iterations:1\n"
445 "BM_property_read/512/iterations:1\n"
446 "BM_property_serial/1/iterations:1\n"
447 "BM_property_serial/4/iterations:1\n"
448 "BM_property_serial/16/iterations:1\n"
449 "BM_property_serial/64/iterations:1\n"
450 "BM_property_serial/128/iterations:1\n"
451 "BM_property_serial/256/iterations:1\n"
452 "BM_property_serial/512/iterations:1\n";
453 Verify(expected, 0, std::vector<const char*>{"--bionic_iterations=1"});
454
455 // Make sure that the test suite can be found in the suites directory.
456 Verify(expected, 0, std::vector<const char*>{"--bionic_iterations=1", "--bionic_xml=full.xml"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700457}
458
459TEST_F(SystemTests, small) {
460 std::string expected =
Anders Lewis4b26f712017-08-11 15:56:18 -0700461 "BM_string_memcmp/8/8/8/iterations:1\n"
462 "BM_math_sqrt/iterations:1\n"
463 "BM_property_get/1/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700464 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_small.xml").c_str(),
465 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700466}
467
468TEST_F(SystemTests, medium) {
469 std::string expected =
470 "BM_string_memcmp/8/0/0/iterations:1\n"
471 "BM_string_memcmp/64/0/0/iterations:1\n"
472 "BM_string_memcmp/512/0/0/iterations:1\n"
473 "BM_string_memcmp/1024/0/0/iterations:1\n"
474 "BM_string_memcmp/8192/0/0/iterations:1\n"
475 "BM_string_memcmp/16384/0/0/iterations:1\n"
476 "BM_string_memcmp/32768/0/0/iterations:1\n"
477 "BM_string_memcmp/65536/0/0/iterations:1\n"
478 "BM_math_sqrt/iterations:1\n"
479 "BM_string_memcpy/512/4/4/iterations:25\n"
480 "BM_property_get/1/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700481 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_medium.xml").c_str(),
482 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700483}
484
485TEST_F(SystemTests, from_each) {
486 std::string expected =
487 "BM_empty/iterations:1\n"
488 "BM_math_sqrt/iterations:1\n"
489 "BM_property_get/1/iterations:1\n"
490 "BM_pthread_self/iterations:1\n"
491 "BM_semaphore_sem_getvalue/iterations:1\n"
492 "BM_stdio_fread/64/iterations:1\n"
493 "BM_string_memcpy/512/4/4/iterations:1\n"
494 "BM_time_clock_gettime/iterations:1\n"
495 "BM_unistd_getpid/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700496 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_from_each.xml").c_str(),
497 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700498}
499
500TEST_F(SystemTests, cmd_args) {
501 std::string expected =
502 "BM_string_memcpy/8/8/8/iterations:1\n"
503 "BM_math_log10/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700504 Verify(expected, 0, std::vector<const char*>{"--bionic_extra=BM_string_memcpy 8 8 8",
505 "--bionic_extra=BM_math_log10",
506 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700507}
508
509TEST_F(SystemTests, cmd_args_no_iter) {
510 std::string expected =
511 "BM_string_memcpy/8/8/8\n"
512 "BM_math_log10\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700513 Verify(expected, 0, std::vector<const char*>{"--bionic_extra=BM_string_memcpy 8 8 8",
514 "--bionic_extra=BM_math_log10"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700515}
516
517TEST_F(SystemTests, xml_and_args) {
518 std::string expected =
519 "BM_string_memcmp/8/0/0/iterations:1\n"
520 "BM_string_memcmp/64/0/0/iterations:1\n"
521 "BM_string_memcmp/512/0/0/iterations:1\n"
522 "BM_string_memcmp/1024/0/0/iterations:1\n"
523 "BM_string_memcmp/8192/0/0/iterations:1\n"
524 "BM_string_memcmp/16384/0/0/iterations:1\n"
525 "BM_string_memcmp/32768/0/0/iterations:1\n"
526 "BM_string_memcmp/65536/0/0/iterations:1\n"
527 "BM_math_sqrt/iterations:1\n"
528 "BM_string_memcpy/512/4/4/iterations:25\n"
529 "BM_property_get/1/iterations:1\n"
530 "BM_string_memcpy/8/0/0/iterations:1\n"
531 "BM_string_memcpy/64/0/0/iterations:1\n"
532 "BM_string_memcpy/512/0/0/iterations:1\n"
533 "BM_string_memcpy/1024/0/0/iterations:1\n"
534 "BM_string_memcpy/8192/0/0/iterations:1\n"
535 "BM_string_memcpy/16384/0/0/iterations:1\n"
536 "BM_string_memcpy/32768/0/0/iterations:1\n"
537 "BM_string_memcpy/65536/0/0/iterations:1\n"
538 "BM_math_log10/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700539 Verify(expected, 0, std::vector<const char*>{"--bionic_extra=BM_string_memcpy AT_ALIGNED_TWOBUF",
540 "--bionic_extra=BM_math_log10",
541 "--bionic_cpu=0",
542 GetBionicXmlArg("test_medium.xml").c_str(),
543 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700544}
545
546TEST_F(SystemTests, alignment) {
547 std::string expected =
548 "BM_string_memcmp/8/2/2/iterations:1\n"
549 "BM_string_memcmp/64/2/2/iterations:1\n"
550 "BM_string_memcmp/512/2/2/iterations:1\n"
551 "BM_string_memcmp/1024/2/2/iterations:1\n"
552 "BM_string_memcmp/8192/2/2/iterations:1\n"
553 "BM_string_memcmp/16384/2/2/iterations:1\n"
554 "BM_string_memcmp/32768/2/2/iterations:1\n"
555 "BM_string_memcmp/65536/2/2/iterations:1\n"
556 "BM_string_memcmp/8/4/4/iterations:1\n"
557 "BM_string_memcmp/64/4/4/iterations:1\n"
558 "BM_string_memcmp/512/4/4/iterations:1\n"
559 "BM_string_memcmp/1024/4/4/iterations:1\n"
560 "BM_string_memcmp/8192/4/4/iterations:1\n"
561 "BM_string_memcmp/16384/4/4/iterations:1\n"
562 "BM_string_memcmp/32768/4/4/iterations:1\n"
563 "BM_string_memcmp/65536/4/4/iterations:1\n"
564 "BM_string_memcmp/8/16/16/iterations:1\n"
565 "BM_string_memcmp/64/16/16/iterations:1\n"
566 "BM_string_memcmp/512/16/16/iterations:1\n"
567 "BM_string_memcmp/1024/16/16/iterations:1\n"
568 "BM_string_memcmp/8192/16/16/iterations:1\n"
569 "BM_string_memcmp/16384/16/16/iterations:1\n"
570 "BM_string_memcmp/32768/16/16/iterations:1\n"
571 "BM_string_memcmp/65536/16/16/iterations:1\n"
572 "BM_string_memcmp/8/512/512/iterations:1\n"
573 "BM_string_memcmp/64/512/512/iterations:1\n"
574 "BM_string_memcmp/512/512/512/iterations:1\n"
575 "BM_string_memcmp/1024/512/512/iterations:1\n"
576 "BM_string_memcmp/8192/512/512/iterations:1\n"
577 "BM_string_memcmp/16384/512/512/iterations:1\n"
578 "BM_string_memcmp/32768/512/512/iterations:1\n"
579 "BM_string_memcmp/65536/512/512/iterations:1\n"
580 "BM_string_memcmp/8/2048/2048/iterations:1\n"
581 "BM_string_memcmp/64/2048/2048/iterations:1\n"
582 "BM_string_memcmp/512/2048/2048/iterations:1\n"
583 "BM_string_memcmp/1024/2048/2048/iterations:1\n"
584 "BM_string_memcmp/8192/2048/2048/iterations:1\n"
585 "BM_string_memcmp/16384/2048/2048/iterations:1\n"
586 "BM_string_memcmp/32768/2048/2048/iterations:1\n"
587 "BM_string_memcmp/65536/2048/2048/iterations:1\n"
588 "BM_string_strlen/8/2/iterations:1\n"
589 "BM_string_strlen/64/2/iterations:1\n"
590 "BM_string_strlen/512/2/iterations:1\n"
591 "BM_string_strlen/1024/2/iterations:1\n"
592 "BM_string_strlen/8192/2/iterations:1\n"
593 "BM_string_strlen/16384/2/iterations:1\n"
594 "BM_string_strlen/32768/2/iterations:1\n"
595 "BM_string_strlen/65536/2/iterations:1\n"
596 "BM_string_strlen/8/4/iterations:1\n"
597 "BM_string_strlen/64/4/iterations:1\n"
598 "BM_string_strlen/512/4/iterations:1\n"
599 "BM_string_strlen/1024/4/iterations:1\n"
600 "BM_string_strlen/8192/4/iterations:1\n"
601 "BM_string_strlen/16384/4/iterations:1\n"
602 "BM_string_strlen/32768/4/iterations:1\n"
603 "BM_string_strlen/65536/4/iterations:1\n"
604 "BM_string_strlen/8/16/iterations:1\n"
605 "BM_string_strlen/64/16/iterations:1\n"
606 "BM_string_strlen/512/16/iterations:1\n"
607 "BM_string_strlen/1024/16/iterations:1\n"
608 "BM_string_strlen/8192/16/iterations:1\n"
609 "BM_string_strlen/16384/16/iterations:1\n"
610 "BM_string_strlen/32768/16/iterations:1\n"
611 "BM_string_strlen/65536/16/iterations:1\n"
612 "BM_string_strlen/8/512/iterations:1\n"
613 "BM_string_strlen/64/512/iterations:1\n"
614 "BM_string_strlen/512/512/iterations:1\n"
615 "BM_string_strlen/1024/512/iterations:1\n"
616 "BM_string_strlen/8192/512/iterations:1\n"
617 "BM_string_strlen/16384/512/iterations:1\n"
618 "BM_string_strlen/32768/512/iterations:1\n"
619 "BM_string_strlen/65536/512/iterations:1\n"
620 "BM_string_strlen/8/2048/iterations:1\n"
621 "BM_string_strlen/64/2048/iterations:1\n"
622 "BM_string_strlen/512/2048/iterations:1\n"
623 "BM_string_strlen/1024/2048/iterations:1\n"
624 "BM_string_strlen/8192/2048/iterations:1\n"
625 "BM_string_strlen/16384/2048/iterations:1\n"
626 "BM_string_strlen/32768/2048/iterations:1\n"
627 "BM_string_strlen/65536/2048/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700628 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_alignment.xml").c_str(),
629 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700630}