xref: /netbsd-src/external/bsd/jemalloc/dist/test/unit/zero_reallocs.c (revision f8cf1a9151c7af1cb0bd8b09c13c66bca599c027)
1 #include "test/jemalloc_test.h"
2 
3 static size_t
4 zero_reallocs() {
5 	if (!config_stats) {
6 		return 0;
7 	}
8 	size_t count = 12345;
9 	size_t sz = sizeof(count);
10 
11 	expect_d_eq(mallctl("stats.zero_reallocs", (void *)&count, &sz,
12 	    NULL, 0), 0, "Unexpected mallctl failure");
13 	return count;
14 }
15 
16 TEST_BEGIN(test_zero_reallocs) {
17 	test_skip_if(!config_stats);
18 
19 	for (size_t i = 0; i < 100; ++i) {
20 		void *ptr = mallocx(i * i + 1, 0);
21 		expect_ptr_not_null(ptr, "Unexpected mallocx error");
22 		size_t count = zero_reallocs();
23 		expect_zu_eq(i, count, "Incorrect zero realloc count");
24 		ptr = realloc(ptr, 0);
25 		expect_ptr_null(ptr, "Realloc didn't free");
26 		count = zero_reallocs();
27 		expect_zu_eq(i + 1, count, "Realloc didn't adjust count");
28 	}
29 }
30 TEST_END
31 
32 int
33 main(void) {
34 	/*
35 	 * We expect explicit counts; reentrant tests run multiple times, so
36 	 * counts leak across runs.
37 	 */
38 	return test_no_reentrancy(
39 	    test_zero_reallocs);
40 }
41