blob: 6987320225f2a7bd8011234b76d26ede18ba6c84 [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);
Christopher Ferrisad057302017-11-07 15:18:33 -080074 *exe_name = std::string(std::regex_replace(path, std::regex("nativetest"), "benchmarktest"));
75 *exe_name = std::regex_replace(*exe_name, std::regex("-tests"), "");
Anders Lewisa7b0f882017-07-24 20:01:13 -070076}
77
78void SystemTests::Exec(std::vector<const char*> args) {
79 int fds[2];
80 ASSERT_NE(-1, pipe(fds));
81 ASSERT_NE(-1, fcntl(fds[0], F_SETFL, O_NONBLOCK));
82
83 if ((pid_ = fork()) == 0) {
84 // Run the test.
85 close(fds[0]);
86 close(STDIN_FILENO);
87 close(STDOUT_FILENO);
88 close(STDERR_FILENO);
89 ASSERT_NE(0, dup2(fds[1], STDOUT_FILENO));
90 ASSERT_NE(0, dup2(fds[1], STDERR_FILENO));
91 close(fds[1]);
92
93 std::string exe_name;
94 GetExe(&exe_name);
95 args.insert(args.begin(), exe_name.c_str());
96 args.push_back(nullptr);
97 execv(args[0], reinterpret_cast<char* const*>(const_cast<char**>(args.data())));
98 exit(1);
99 }
100 ASSERT_NE(-1, pid_);
101
102 close(fds[1]);
103 fd_ = fds[0];
104}
105
106void SystemTests::Verify(const std::string& expected_output,
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700107 int expected_exitcode, std::vector<const char*> extra_args, bool sanitize) {
Anders Lewisa7b0f882017-07-24 20:01:13 -0700108 std::vector<const char*> args;
109 for (const auto& arg : extra_args) {
110 args.push_back(arg);
111 }
112
113 Exec(args);
114
115 raw_output_ = "";
116 while (true) {
117 char buffer[4097];
118 ssize_t bytes = TEMP_FAILURE_RETRY(read(fd_, buffer, sizeof(buffer) - 1));
119 if (bytes == -1 && errno == EAGAIN) {
120 continue;
121 }
122 ASSERT_NE(-1, bytes);
123 if (bytes == 0) {
124 break;
125 }
126 buffer[bytes] = '\0';
127 raw_output_ += buffer;
128 }
129 close(fd_);
130
131 int status;
132 ASSERT_EQ(pid_, TEMP_FAILURE_RETRY(waitpid(pid_, &status, 0))) << "Test output:\n" << raw_output_;
133 exitcode_ = WEXITSTATUS(status);
Anders Lewisa7b0f882017-07-24 20:01:13 -0700134 ASSERT_EQ(expected_exitcode, exitcode_) << "Test output:\n" << raw_output_;
Anders Lewisa7b0f882017-07-24 20:01:13 -0700135
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700136 if (sanitize) {
137 SanitizeOutput();
138 ASSERT_EQ(expected_output, sanitized_output_);
139 } else {
140 ASSERT_EQ(expected_output, raw_output_);
141 }
142}
143
144TEST_F(SystemTests, help) {
145 std::string expected =
146 "Usage:\n"
147 "bionic_benchmarks [--bionic_cpu=<cpu_to_isolate>]\n"
148 " [--bionic_xml=<path_to_xml>]\n"
149 " [--bionic_iterations=<num_iter>]\n"
150 " [--bionic_extra=\"<fn_name> <arg1> <arg 2> ...\"]\n"
151 " [<Google benchmark flags>]\n"
152 "Google benchmark flags:\n"
153 "benchmark [--benchmark_list_tests={true|false}]\n"
154 " [--benchmark_filter=<regex>]\n"
155 " [--benchmark_min_time=<min_time>]\n"
156 " [--benchmark_repetitions=<num_repetitions>]\n"
157 " [--benchmark_report_aggregates_only={true|false}\n"
158 " [--benchmark_format=<console|json|csv>]\n"
159 " [--benchmark_out=<filename>]\n"
160 " [--benchmark_out_format=<json|console|csv>]\n"
161 " [--benchmark_color={auto|true|false}]\n"
162 " [--benchmark_counters_tabular={true|false}]\n"
163 " [--v=<verbosity>]\n";
164 Verify(expected, 0, std::vector<const char*>{"--help"}, false);
Anders Lewisa7b0f882017-07-24 20:01:13 -0700165}
166
167TEST_F(SystemTests, full_suite) {
168 std::string expected =
169 "BM_empty/iterations:1\n"
170 "BM_load_relaxed/iterations:1\n"
171 "BM_load_acquire/iterations:1\n"
172 "BM_store_release/iterations:1\n"
173 "BM_store_seq_cst/iterations:1\n"
174 "BM_fetch_add_relaxed/iterations:1\n"
175 "BM_fetch_add_seq_cst/iterations:1\n"
176 "BM_acquire_fence/iterations:1\n"
177 "BM_seq_cst_fence/iterations:1\n"
178 "BM_fetch_add_cs/iterations:1\n"
179 "BM_math_sqrt/iterations:1\n"
180 "BM_math_log10/iterations:1\n"
181 "BM_math_logb/iterations:1\n"
182 "BM_math_isfinite_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700183 "BM_math_isfinite_macro/1/iterations:1\n"
184 "BM_math_isfinite_macro/2/iterations:1\n"
185 "BM_math_isfinite_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700186 "BM_math_isfinite/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700187 "BM_math_isfinite/1/iterations:1\n"
188 "BM_math_isfinite/2/iterations:1\n"
189 "BM_math_isfinite/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700190 "BM_math_isinf_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700191 "BM_math_isinf_macro/1/iterations:1\n"
192 "BM_math_isinf_macro/2/iterations:1\n"
193 "BM_math_isinf_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700194 "BM_math_isinf/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700195 "BM_math_isinf/1/iterations:1\n"
196 "BM_math_isinf/2/iterations:1\n"
197 "BM_math_isinf/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700198 "BM_math_isnan_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700199 "BM_math_isnan_macro/1/iterations:1\n"
200 "BM_math_isnan_macro/2/iterations:1\n"
201 "BM_math_isnan_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700202 "BM_math_isnan/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700203 "BM_math_isnan/1/iterations:1\n"
204 "BM_math_isnan/2/iterations:1\n"
205 "BM_math_isnan/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700206 "BM_math_isnormal_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700207 "BM_math_isnormal_macro/1/iterations:1\n"
208 "BM_math_isnormal_macro/2/iterations:1\n"
209 "BM_math_isnormal_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700210 "BM_math_isnormal/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700211 "BM_math_isnormal/1/iterations:1\n"
212 "BM_math_isnormal/2/iterations:1\n"
213 "BM_math_isnormal/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700214 "BM_math_sin_fast/iterations:1\n"
215 "BM_math_sin_feupdateenv/iterations:1\n"
216 "BM_math_sin_fesetenv/iterations:1\n"
217 "BM_math_fpclassify/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700218 "BM_math_fpclassify/1/iterations:1\n"
219 "BM_math_fpclassify/2/iterations:1\n"
220 "BM_math_fpclassify/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700221 "BM_math_signbit_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700222 "BM_math_signbit_macro/1/iterations:1\n"
223 "BM_math_signbit_macro/2/iterations:1\n"
224 "BM_math_signbit_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700225 "BM_math_signbit/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700226 "BM_math_signbit/1/iterations:1\n"
227 "BM_math_signbit/2/iterations:1\n"
228 "BM_math_signbit/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700229 "BM_math_fabs_macro/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700230 "BM_math_fabs_macro/1/iterations:1\n"
231 "BM_math_fabs_macro/2/iterations:1\n"
232 "BM_math_fabs_macro/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700233 "BM_math_fabs/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700234 "BM_math_fabs/1/iterations:1\n"
235 "BM_math_fabs/2/iterations:1\n"
236 "BM_math_fabs/3/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700237 "BM_pthread_self/iterations:1\n"
238 "BM_pthread_getspecific/iterations:1\n"
239 "BM_pthread_setspecific/iterations:1\n"
240 "BM_pthread_once/iterations:1\n"
241 "BM_pthread_mutex_lock/iterations:1\n"
242 "BM_pthread_mutex_lock_ERRORCHECK/iterations:1\n"
243 "BM_pthread_mutex_lock_RECURSIVE/iterations:1\n"
244 "BM_pthread_rwlock_read/iterations:1\n"
245 "BM_pthread_rwlock_write/iterations:1\n"
246 "BM_pthread_create/iterations:1\n"
247 "BM_pthread_create_and_run/iterations:1\n"
248 "BM_pthread_exit_and_join/iterations:1\n"
249 "BM_pthread_key_create/iterations:1\n"
250 "BM_pthread_key_delete/iterations:1\n"
251 "BM_semaphore_sem_getvalue/iterations:1\n"
252 "BM_semaphore_sem_wait_sem_post/iterations:1\n"
253 "BM_stdio_fread/8/iterations:1\n"
254 "BM_stdio_fread/64/iterations:1\n"
255 "BM_stdio_fread/512/iterations:1\n"
256 "BM_stdio_fread/1024/iterations:1\n"
257 "BM_stdio_fread/8192/iterations:1\n"
258 "BM_stdio_fread/16384/iterations:1\n"
259 "BM_stdio_fread/32768/iterations:1\n"
260 "BM_stdio_fread/65536/iterations:1\n"
261 "BM_stdio_fwrite/8/iterations:1\n"
262 "BM_stdio_fwrite/64/iterations:1\n"
263 "BM_stdio_fwrite/512/iterations:1\n"
264 "BM_stdio_fwrite/1024/iterations:1\n"
265 "BM_stdio_fwrite/8192/iterations:1\n"
266 "BM_stdio_fwrite/16384/iterations:1\n"
267 "BM_stdio_fwrite/32768/iterations:1\n"
268 "BM_stdio_fwrite/65536/iterations:1\n"
269 "BM_stdio_fread_unbuffered/8/iterations:1\n"
270 "BM_stdio_fread_unbuffered/64/iterations:1\n"
271 "BM_stdio_fread_unbuffered/512/iterations:1\n"
272 "BM_stdio_fread_unbuffered/1024/iterations:1\n"
273 "BM_stdio_fread_unbuffered/8192/iterations:1\n"
274 "BM_stdio_fread_unbuffered/16384/iterations:1\n"
275 "BM_stdio_fread_unbuffered/32768/iterations:1\n"
276 "BM_stdio_fread_unbuffered/65536/iterations:1\n"
277 "BM_stdio_fwrite_unbuffered/8/iterations:1\n"
278 "BM_stdio_fwrite_unbuffered/64/iterations:1\n"
279 "BM_stdio_fwrite_unbuffered/512/iterations:1\n"
280 "BM_stdio_fwrite_unbuffered/1024/iterations:1\n"
281 "BM_stdio_fwrite_unbuffered/8192/iterations:1\n"
282 "BM_stdio_fwrite_unbuffered/16384/iterations:1\n"
283 "BM_stdio_fwrite_unbuffered/32768/iterations:1\n"
284 "BM_stdio_fwrite_unbuffered/65536/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700285 "BM_stdio_fopen_fgetln_fclose_locking/iterations:1\n"
286 "BM_stdio_fopen_fgetln_fclose_no_locking/iterations:1\n"
287 "BM_stdio_fopen_fgets_fclose_locking/iterations:1\n"
288 "BM_stdio_fopen_fgets_fclose_no_locking/iterations:1\n"
Anders Lewisac4f4b42017-08-08 18:29:51 -0700289 "BM_stdio_fopen_fgetc_fclose_locking/1024/iterations:1\n"
290 "BM_stdio_fopen_fgetc_fclose_no_locking/1024/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700291 "BM_stdio_fopen_getline_fclose_locking/iterations:1\n"
292 "BM_stdio_fopen_getline_fclose_no_locking/iterations:1\n"
Christopher Ferrisad057302017-11-07 15:18:33 -0800293 "BM_stdio_printf_literal/iterations:1\n"
294 "BM_stdio_printf_s/iterations:1\n"
295 "BM_stdio_printf_d/iterations:1\n"
296 "BM_stdio_printf_1$s/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700297 "BM_string_memcmp/8/0/0/iterations:1\n"
298 "BM_string_memcmp/64/0/0/iterations:1\n"
299 "BM_string_memcmp/512/0/0/iterations:1\n"
300 "BM_string_memcmp/1024/0/0/iterations:1\n"
301 "BM_string_memcmp/8192/0/0/iterations:1\n"
302 "BM_string_memcmp/16384/0/0/iterations:1\n"
303 "BM_string_memcmp/32768/0/0/iterations:1\n"
304 "BM_string_memcmp/65536/0/0/iterations:1\n"
305 "BM_string_memcpy/8/0/0/iterations:1\n"
306 "BM_string_memcpy/64/0/0/iterations:1\n"
307 "BM_string_memcpy/512/0/0/iterations:1\n"
308 "BM_string_memcpy/1024/0/0/iterations:1\n"
309 "BM_string_memcpy/8192/0/0/iterations:1\n"
310 "BM_string_memcpy/16384/0/0/iterations:1\n"
311 "BM_string_memcpy/32768/0/0/iterations:1\n"
312 "BM_string_memcpy/65536/0/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700313 "BM_string_memmove_non_overlapping/8/0/0/iterations:1\n"
314 "BM_string_memmove_non_overlapping/64/0/0/iterations:1\n"
315 "BM_string_memmove_non_overlapping/512/0/0/iterations:1\n"
316 "BM_string_memmove_non_overlapping/1024/0/0/iterations:1\n"
317 "BM_string_memmove_non_overlapping/8192/0/0/iterations:1\n"
318 "BM_string_memmove_non_overlapping/16384/0/0/iterations:1\n"
319 "BM_string_memmove_non_overlapping/32768/0/0/iterations:1\n"
320 "BM_string_memmove_non_overlapping/65536/0/0/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700321 "BM_string_memmove_overlap_dst_before_src/8/0/iterations:1\n"
322 "BM_string_memmove_overlap_dst_before_src/64/0/iterations:1\n"
323 "BM_string_memmove_overlap_dst_before_src/512/0/iterations:1\n"
324 "BM_string_memmove_overlap_dst_before_src/1024/0/iterations:1\n"
325 "BM_string_memmove_overlap_dst_before_src/8192/0/iterations:1\n"
326 "BM_string_memmove_overlap_dst_before_src/16384/0/iterations:1\n"
327 "BM_string_memmove_overlap_dst_before_src/32768/0/iterations:1\n"
328 "BM_string_memmove_overlap_dst_before_src/65536/0/iterations:1\n"
329 "BM_string_memmove_overlap_src_before_dst/8/0/iterations:1\n"
330 "BM_string_memmove_overlap_src_before_dst/64/0/iterations:1\n"
331 "BM_string_memmove_overlap_src_before_dst/512/0/iterations:1\n"
332 "BM_string_memmove_overlap_src_before_dst/1024/0/iterations:1\n"
333 "BM_string_memmove_overlap_src_before_dst/8192/0/iterations:1\n"
334 "BM_string_memmove_overlap_src_before_dst/16384/0/iterations:1\n"
335 "BM_string_memmove_overlap_src_before_dst/32768/0/iterations:1\n"
336 "BM_string_memmove_overlap_src_before_dst/65536/0/iterations:1\n"
337 "BM_string_memset/8/0/iterations:1\n"
338 "BM_string_memset/64/0/iterations:1\n"
339 "BM_string_memset/512/0/iterations:1\n"
340 "BM_string_memset/1024/0/iterations:1\n"
341 "BM_string_memset/8192/0/iterations:1\n"
342 "BM_string_memset/16384/0/iterations:1\n"
343 "BM_string_memset/32768/0/iterations:1\n"
344 "BM_string_memset/65536/0/iterations:1\n"
345 "BM_string_strlen/8/0/iterations:1\n"
346 "BM_string_strlen/64/0/iterations:1\n"
347 "BM_string_strlen/512/0/iterations:1\n"
348 "BM_string_strlen/1024/0/iterations:1\n"
349 "BM_string_strlen/8192/0/iterations:1\n"
350 "BM_string_strlen/16384/0/iterations:1\n"
351 "BM_string_strlen/32768/0/iterations:1\n"
352 "BM_string_strlen/65536/0/iterations:1\n"
353 "BM_string_strcat_copy_only/8/0/0/iterations:1\n"
354 "BM_string_strcat_copy_only/64/0/0/iterations:1\n"
355 "BM_string_strcat_copy_only/512/0/0/iterations:1\n"
356 "BM_string_strcat_copy_only/1024/0/0/iterations:1\n"
357 "BM_string_strcat_copy_only/8192/0/0/iterations:1\n"
358 "BM_string_strcat_copy_only/16384/0/0/iterations:1\n"
359 "BM_string_strcat_copy_only/32768/0/0/iterations:1\n"
360 "BM_string_strcat_copy_only/65536/0/0/iterations:1\n"
361 "BM_string_strcat_seek_only/8/0/0/iterations:1\n"
362 "BM_string_strcat_seek_only/64/0/0/iterations:1\n"
363 "BM_string_strcat_seek_only/512/0/0/iterations:1\n"
364 "BM_string_strcat_seek_only/1024/0/0/iterations:1\n"
365 "BM_string_strcat_seek_only/8192/0/0/iterations:1\n"
366 "BM_string_strcat_seek_only/16384/0/0/iterations:1\n"
367 "BM_string_strcat_seek_only/32768/0/0/iterations:1\n"
368 "BM_string_strcat_seek_only/65536/0/0/iterations:1\n"
369 "BM_string_strcat_half_copy_half_seek/8/0/0/iterations:1\n"
370 "BM_string_strcat_half_copy_half_seek/64/0/0/iterations:1\n"
371 "BM_string_strcat_half_copy_half_seek/512/0/0/iterations:1\n"
372 "BM_string_strcat_half_copy_half_seek/1024/0/0/iterations:1\n"
373 "BM_string_strcat_half_copy_half_seek/8192/0/0/iterations:1\n"
374 "BM_string_strcat_half_copy_half_seek/16384/0/0/iterations:1\n"
375 "BM_string_strcat_half_copy_half_seek/32768/0/0/iterations:1\n"
376 "BM_string_strcat_half_copy_half_seek/65536/0/0/iterations:1\n"
377 "BM_string_strcpy/8/0/0/iterations:1\n"
378 "BM_string_strcpy/64/0/0/iterations:1\n"
379 "BM_string_strcpy/512/0/0/iterations:1\n"
380 "BM_string_strcpy/1024/0/0/iterations:1\n"
381 "BM_string_strcpy/8192/0/0/iterations:1\n"
382 "BM_string_strcpy/16384/0/0/iterations:1\n"
383 "BM_string_strcpy/32768/0/0/iterations:1\n"
384 "BM_string_strcpy/65536/0/0/iterations:1\n"
385 "BM_string_strcmp/8/0/0/iterations:1\n"
386 "BM_string_strcmp/64/0/0/iterations:1\n"
387 "BM_string_strcmp/512/0/0/iterations:1\n"
388 "BM_string_strcmp/1024/0/0/iterations:1\n"
389 "BM_string_strcmp/8192/0/0/iterations:1\n"
390 "BM_string_strcmp/16384/0/0/iterations:1\n"
391 "BM_string_strcmp/32768/0/0/iterations:1\n"
392 "BM_string_strcmp/65536/0/0/iterations:1\n"
Anders Lewisac4f4b42017-08-08 18:29:51 -0700393 "BM_string_strstr/8/0/0/iterations:1\n"
394 "BM_string_strstr/64/0/0/iterations:1\n"
395 "BM_string_strstr/512/0/0/iterations:1\n"
396 "BM_string_strstr/1024/0/0/iterations:1\n"
397 "BM_string_strstr/8192/0/0/iterations:1\n"
398 "BM_string_strstr/16384/0/0/iterations:1\n"
399 "BM_string_strstr/32768/0/0/iterations:1\n"
400 "BM_string_strstr/65536/0/0/iterations:1\n"
401 "BM_string_strchr/8/0/iterations:1\n"
402 "BM_string_strchr/64/0/iterations:1\n"
403 "BM_string_strchr/512/0/iterations:1\n"
404 "BM_string_strchr/1024/0/iterations:1\n"
405 "BM_string_strchr/8192/0/iterations:1\n"
406 "BM_string_strchr/16384/0/iterations:1\n"
407 "BM_string_strchr/32768/0/iterations:1\n"
408 "BM_string_strchr/65536/0/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700409 "BM_time_clock_gettime/iterations:1\n"
410 "BM_time_clock_gettime_syscall/iterations:1\n"
411 "BM_time_gettimeofday/iterations:1\n"
412 "BM_time_gettimeofday_syscall/iterations:1\n"
413 "BM_time_time/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700414 "BM_time_localtime/iterations:1\n"
415 "BM_time_localtime_r/iterations:1\n"
Anders Lewisa7b0f882017-07-24 20:01:13 -0700416 "BM_unistd_getpid/iterations:1\n"
417 "BM_unistd_getpid_syscall/iterations:1\n"
418 "BM_unistd_gettid/iterations:1\n"
Anders Lewisac4f4b42017-08-08 18:29:51 -0700419 "BM_unistd_gettid_syscall/iterations:1\n"
420 "BM_stdlib_malloc_free/8/0/iterations:1\n"
421 "BM_stdlib_malloc_free/64/0/iterations:1\n"
422 "BM_stdlib_malloc_free/512/0/iterations:1\n"
423 "BM_stdlib_malloc_free/1024/0/iterations:1\n"
424 "BM_stdlib_malloc_free/8192/0/iterations:1\n"
425 "BM_stdlib_malloc_free/16384/0/iterations:1\n"
426 "BM_stdlib_malloc_free/32768/0/iterations:1\n"
427 "BM_stdlib_malloc_free/65536/0/iterations:1\n"
428 "BM_stdlib_mbstowcs/0/0/iterations:1\n"
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700429 "BM_stdlib_mbrtowc/0/iterations:1\n"
430 "BM_property_get/1/iterations:1\n"
431 "BM_property_get/4/iterations:1\n"
432 "BM_property_get/16/iterations:1\n"
433 "BM_property_get/64/iterations:1\n"
434 "BM_property_get/128/iterations:1\n"
435 "BM_property_get/256/iterations:1\n"
436 "BM_property_get/512/iterations:1\n"
437 "BM_property_find/1/iterations:1\n"
438 "BM_property_find/4/iterations:1\n"
439 "BM_property_find/16/iterations:1\n"
440 "BM_property_find/64/iterations:1\n"
441 "BM_property_find/128/iterations:1\n"
442 "BM_property_find/256/iterations:1\n"
443 "BM_property_find/512/iterations:1\n"
444 "BM_property_read/1/iterations:1\n"
445 "BM_property_read/4/iterations:1\n"
446 "BM_property_read/16/iterations:1\n"
447 "BM_property_read/64/iterations:1\n"
448 "BM_property_read/128/iterations:1\n"
449 "BM_property_read/256/iterations:1\n"
450 "BM_property_read/512/iterations:1\n"
451 "BM_property_serial/1/iterations:1\n"
452 "BM_property_serial/4/iterations:1\n"
453 "BM_property_serial/16/iterations:1\n"
454 "BM_property_serial/64/iterations:1\n"
455 "BM_property_serial/128/iterations:1\n"
456 "BM_property_serial/256/iterations:1\n"
457 "BM_property_serial/512/iterations:1\n";
458 Verify(expected, 0, std::vector<const char*>{"--bionic_iterations=1"});
459
460 // Make sure that the test suite can be found in the suites directory.
461 Verify(expected, 0, std::vector<const char*>{"--bionic_iterations=1", "--bionic_xml=full.xml"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700462}
463
464TEST_F(SystemTests, small) {
465 std::string expected =
Anders Lewis4b26f712017-08-11 15:56:18 -0700466 "BM_string_memcmp/8/8/8/iterations:1\n"
467 "BM_math_sqrt/iterations:1\n"
468 "BM_property_get/1/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700469 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_small.xml").c_str(),
470 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700471}
472
473TEST_F(SystemTests, medium) {
474 std::string expected =
475 "BM_string_memcmp/8/0/0/iterations:1\n"
476 "BM_string_memcmp/64/0/0/iterations:1\n"
477 "BM_string_memcmp/512/0/0/iterations:1\n"
478 "BM_string_memcmp/1024/0/0/iterations:1\n"
479 "BM_string_memcmp/8192/0/0/iterations:1\n"
480 "BM_string_memcmp/16384/0/0/iterations:1\n"
481 "BM_string_memcmp/32768/0/0/iterations:1\n"
482 "BM_string_memcmp/65536/0/0/iterations:1\n"
483 "BM_math_sqrt/iterations:1\n"
484 "BM_string_memcpy/512/4/4/iterations:25\n"
485 "BM_property_get/1/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700486 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_medium.xml").c_str(),
487 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700488}
489
490TEST_F(SystemTests, from_each) {
491 std::string expected =
492 "BM_empty/iterations:1\n"
493 "BM_math_sqrt/iterations:1\n"
494 "BM_property_get/1/iterations:1\n"
495 "BM_pthread_self/iterations:1\n"
496 "BM_semaphore_sem_getvalue/iterations:1\n"
497 "BM_stdio_fread/64/iterations:1\n"
498 "BM_string_memcpy/512/4/4/iterations:1\n"
499 "BM_time_clock_gettime/iterations:1\n"
500 "BM_unistd_getpid/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700501 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_from_each.xml").c_str(),
502 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700503}
504
505TEST_F(SystemTests, cmd_args) {
506 std::string expected =
507 "BM_string_memcpy/8/8/8/iterations:1\n"
508 "BM_math_log10/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700509 Verify(expected, 0, std::vector<const char*>{"--bionic_extra=BM_string_memcpy 8 8 8",
510 "--bionic_extra=BM_math_log10",
511 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700512}
513
514TEST_F(SystemTests, cmd_args_no_iter) {
515 std::string expected =
516 "BM_string_memcpy/8/8/8\n"
517 "BM_math_log10\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700518 Verify(expected, 0, std::vector<const char*>{"--bionic_extra=BM_string_memcpy 8 8 8",
519 "--bionic_extra=BM_math_log10"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700520}
521
522TEST_F(SystemTests, xml_and_args) {
523 std::string expected =
524 "BM_string_memcmp/8/0/0/iterations:1\n"
525 "BM_string_memcmp/64/0/0/iterations:1\n"
526 "BM_string_memcmp/512/0/0/iterations:1\n"
527 "BM_string_memcmp/1024/0/0/iterations:1\n"
528 "BM_string_memcmp/8192/0/0/iterations:1\n"
529 "BM_string_memcmp/16384/0/0/iterations:1\n"
530 "BM_string_memcmp/32768/0/0/iterations:1\n"
531 "BM_string_memcmp/65536/0/0/iterations:1\n"
532 "BM_math_sqrt/iterations:1\n"
533 "BM_string_memcpy/512/4/4/iterations:25\n"
534 "BM_property_get/1/iterations:1\n"
535 "BM_string_memcpy/8/0/0/iterations:1\n"
536 "BM_string_memcpy/64/0/0/iterations:1\n"
537 "BM_string_memcpy/512/0/0/iterations:1\n"
538 "BM_string_memcpy/1024/0/0/iterations:1\n"
539 "BM_string_memcpy/8192/0/0/iterations:1\n"
540 "BM_string_memcpy/16384/0/0/iterations:1\n"
541 "BM_string_memcpy/32768/0/0/iterations:1\n"
542 "BM_string_memcpy/65536/0/0/iterations:1\n"
543 "BM_math_log10/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700544 Verify(expected, 0, std::vector<const char*>{"--bionic_extra=BM_string_memcpy AT_ALIGNED_TWOBUF",
545 "--bionic_extra=BM_math_log10",
546 "--bionic_cpu=0",
547 GetBionicXmlArg("test_medium.xml").c_str(),
548 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700549}
550
551TEST_F(SystemTests, alignment) {
552 std::string expected =
553 "BM_string_memcmp/8/2/2/iterations:1\n"
554 "BM_string_memcmp/64/2/2/iterations:1\n"
555 "BM_string_memcmp/512/2/2/iterations:1\n"
556 "BM_string_memcmp/1024/2/2/iterations:1\n"
557 "BM_string_memcmp/8192/2/2/iterations:1\n"
558 "BM_string_memcmp/16384/2/2/iterations:1\n"
559 "BM_string_memcmp/32768/2/2/iterations:1\n"
560 "BM_string_memcmp/65536/2/2/iterations:1\n"
561 "BM_string_memcmp/8/4/4/iterations:1\n"
562 "BM_string_memcmp/64/4/4/iterations:1\n"
563 "BM_string_memcmp/512/4/4/iterations:1\n"
564 "BM_string_memcmp/1024/4/4/iterations:1\n"
565 "BM_string_memcmp/8192/4/4/iterations:1\n"
566 "BM_string_memcmp/16384/4/4/iterations:1\n"
567 "BM_string_memcmp/32768/4/4/iterations:1\n"
568 "BM_string_memcmp/65536/4/4/iterations:1\n"
569 "BM_string_memcmp/8/16/16/iterations:1\n"
570 "BM_string_memcmp/64/16/16/iterations:1\n"
571 "BM_string_memcmp/512/16/16/iterations:1\n"
572 "BM_string_memcmp/1024/16/16/iterations:1\n"
573 "BM_string_memcmp/8192/16/16/iterations:1\n"
574 "BM_string_memcmp/16384/16/16/iterations:1\n"
575 "BM_string_memcmp/32768/16/16/iterations:1\n"
576 "BM_string_memcmp/65536/16/16/iterations:1\n"
577 "BM_string_memcmp/8/512/512/iterations:1\n"
578 "BM_string_memcmp/64/512/512/iterations:1\n"
579 "BM_string_memcmp/512/512/512/iterations:1\n"
580 "BM_string_memcmp/1024/512/512/iterations:1\n"
581 "BM_string_memcmp/8192/512/512/iterations:1\n"
582 "BM_string_memcmp/16384/512/512/iterations:1\n"
583 "BM_string_memcmp/32768/512/512/iterations:1\n"
584 "BM_string_memcmp/65536/512/512/iterations:1\n"
585 "BM_string_memcmp/8/2048/2048/iterations:1\n"
586 "BM_string_memcmp/64/2048/2048/iterations:1\n"
587 "BM_string_memcmp/512/2048/2048/iterations:1\n"
588 "BM_string_memcmp/1024/2048/2048/iterations:1\n"
589 "BM_string_memcmp/8192/2048/2048/iterations:1\n"
590 "BM_string_memcmp/16384/2048/2048/iterations:1\n"
591 "BM_string_memcmp/32768/2048/2048/iterations:1\n"
592 "BM_string_memcmp/65536/2048/2048/iterations:1\n"
593 "BM_string_strlen/8/2/iterations:1\n"
594 "BM_string_strlen/64/2/iterations:1\n"
595 "BM_string_strlen/512/2/iterations:1\n"
596 "BM_string_strlen/1024/2/iterations:1\n"
597 "BM_string_strlen/8192/2/iterations:1\n"
598 "BM_string_strlen/16384/2/iterations:1\n"
599 "BM_string_strlen/32768/2/iterations:1\n"
600 "BM_string_strlen/65536/2/iterations:1\n"
601 "BM_string_strlen/8/4/iterations:1\n"
602 "BM_string_strlen/64/4/iterations:1\n"
603 "BM_string_strlen/512/4/iterations:1\n"
604 "BM_string_strlen/1024/4/iterations:1\n"
605 "BM_string_strlen/8192/4/iterations:1\n"
606 "BM_string_strlen/16384/4/iterations:1\n"
607 "BM_string_strlen/32768/4/iterations:1\n"
608 "BM_string_strlen/65536/4/iterations:1\n"
609 "BM_string_strlen/8/16/iterations:1\n"
610 "BM_string_strlen/64/16/iterations:1\n"
611 "BM_string_strlen/512/16/iterations:1\n"
612 "BM_string_strlen/1024/16/iterations:1\n"
613 "BM_string_strlen/8192/16/iterations:1\n"
614 "BM_string_strlen/16384/16/iterations:1\n"
615 "BM_string_strlen/32768/16/iterations:1\n"
616 "BM_string_strlen/65536/16/iterations:1\n"
617 "BM_string_strlen/8/512/iterations:1\n"
618 "BM_string_strlen/64/512/iterations:1\n"
619 "BM_string_strlen/512/512/iterations:1\n"
620 "BM_string_strlen/1024/512/iterations:1\n"
621 "BM_string_strlen/8192/512/iterations:1\n"
622 "BM_string_strlen/16384/512/iterations:1\n"
623 "BM_string_strlen/32768/512/iterations:1\n"
624 "BM_string_strlen/65536/512/iterations:1\n"
625 "BM_string_strlen/8/2048/iterations:1\n"
626 "BM_string_strlen/64/2048/iterations:1\n"
627 "BM_string_strlen/512/2048/iterations:1\n"
628 "BM_string_strlen/1024/2048/iterations:1\n"
629 "BM_string_strlen/8192/2048/iterations:1\n"
630 "BM_string_strlen/16384/2048/iterations:1\n"
631 "BM_string_strlen/32768/2048/iterations:1\n"
632 "BM_string_strlen/65536/2048/iterations:1\n";
Christopher Ferrisd9d39be2017-08-23 18:03:51 -0700633 Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_alignment.xml").c_str(),
634 "--bionic_iterations=1"});
Anders Lewisa7b0f882017-07-24 20:01:13 -0700635}