xref: /netbsd-src/external/bsd/jemalloc/dist/test/unit/peak.c (revision 7bdf38e5b7a28439665f2fdeff81e36913eef7dd)
1 #include "test/jemalloc_test.h"
2 
3 #include "jemalloc/internal/peak.h"
4 
5 TEST_BEGIN(test_peak) {
6 	peak_t peak = PEAK_INITIALIZER;
7 	expect_u64_eq(0, peak_max(&peak),
8 	    "Peak should be zero at initialization");
9 	peak_update(&peak, 100, 50);
10 	expect_u64_eq(50, peak_max(&peak),
11 	    "Missed update");
12 	peak_update(&peak, 100, 100);
13 	expect_u64_eq(50, peak_max(&peak), "Dallocs shouldn't change peak");
14 	peak_update(&peak, 100, 200);
15 	expect_u64_eq(50, peak_max(&peak), "Dallocs shouldn't change peak");
16 	peak_update(&peak, 200, 200);
17 	expect_u64_eq(50, peak_max(&peak), "Haven't reached peak again");
18 	peak_update(&peak, 300, 200);
19 	expect_u64_eq(100, peak_max(&peak), "Missed an update.");
20 	peak_set_zero(&peak, 300, 200);
21 	expect_u64_eq(0, peak_max(&peak), "No effect from zeroing");
22 	peak_update(&peak, 300, 300);
23 	expect_u64_eq(0, peak_max(&peak), "Dalloc shouldn't change peak");
24 	peak_update(&peak, 400, 300);
25 	expect_u64_eq(0, peak_max(&peak), "Should still be net negative");
26 	peak_update(&peak, 500, 300);
27 	expect_u64_eq(100, peak_max(&peak), "Missed an update.");
28 	/*
29 	 * Above, we set to zero while a net allocator; let's try as a
30 	 * net-deallocator.
31 	 */
32 	peak_set_zero(&peak, 600, 700);
33 	expect_u64_eq(0, peak_max(&peak), "No effect from zeroing.");
34 	peak_update(&peak, 600, 800);
35 	expect_u64_eq(0, peak_max(&peak), "Dalloc shouldn't change peak.");
36 	peak_update(&peak, 700, 800);
37 	expect_u64_eq(0, peak_max(&peak), "Should still be net negative.");
38 	peak_update(&peak, 800, 800);
39 	expect_u64_eq(100, peak_max(&peak), "Missed an update.");
40 }
41 TEST_END
42 
43 int
44 main(void) {
45 	return test_no_reentrancy(
46 	    test_peak);
47 }
48