]>
git.saurik.com Git - apple/libc.git/blob - tests/open_memstream.c
4 #include <darwintest.h>
5 #include <darwintest_perf.h>
8 perf_fixed_size(size_t size_per_write
)
10 dt_stat_time_t latency
= dt_stat_time_create("write_latency",
11 "adding %zu bytes to a memstream", size_per_write
);
12 dt_stat_set_variable_d(latency
, "bytes", (double)size_per_write
);
13 char *src
= calloc(1, size_per_write
);
14 T_QUIET
; T_ASSERT_NOTNULL(src
, "allocated source buffer");
16 while (!dt_stat_stable(latency
)) {
20 FILE *victim
= open_memstream(&buf
, &size
);
21 T_QUIET
; T_WITH_ERRNO
; T_ASSERT_NOTNULL(victim
, "opened memstream");
23 T_STAT_MEASURE_BATCH(latency
) {
24 (void)fwrite(src
, size_per_write
, 1, victim
);
28 T_QUIET
; T_ASSERT_NOTNULL(buf
, "buffer was set by open_memstream");
29 T_QUIET
; T_ASSERT_GE(size
, size_per_write
,
30 "memstream added non-zero bytes");
36 dt_stat_finalize(latency
);
39 T_DECL(perf_open_memstream
, "measure the performance of open_memstream")
41 size_t sizes
[] = { 1, 8, 16, 64, 1024, 2048, 4096, 16 * 1024 };
42 for (size_t i
= 0; i
< sizeof(sizes
) / sizeof(sizes
[0]); i
++) {
43 perf_fixed_size(sizes
[i
]);