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