1 #include "test/jemalloc_test.h"
3 static unsigned test_count
= 0;
4 static test_status_t test_counts
[test_status_count
] = {0, 0, 0};
5 static test_status_t test_status
= test_status_pass
;
6 static const char * test_name
= "";
8 JEMALLOC_FORMAT_PRINTF(1, 2)
10 test_skip(const char *format
, ...)
15 malloc_vcprintf(NULL
, NULL
, format
, ap
);
18 test_status
= test_status_skip
;
21 JEMALLOC_FORMAT_PRINTF(1, 2)
23 test_fail(const char *format
, ...)
28 malloc_vcprintf(NULL
, NULL
, format
, ap
);
31 test_status
= test_status_fail
;
35 test_status_string(test_status_t test_status
)
38 switch (test_status
) {
39 case test_status_pass
: return "pass";
40 case test_status_skip
: return "skip";
41 case test_status_fail
: return "fail";
42 default: not_reached();
47 p_test_init(const char *name
)
51 test_status
= test_status_pass
;
59 test_counts
[test_status
]++;
60 malloc_printf("%s: %s\n", test_name
, test_status_string(test_status
));
64 p_test(test_t
*t
, ...)
70 * Make sure initialization occurs prior to running tests. Tests are
71 * special because they may use internal facilities prior to triggering
72 * initialization as a side effect of calling into the public API. This
73 * is a final safety that works even if jemalloc_constructor() doesn't
74 * run, as for MSVC builds.
76 if (nallocx(1, 0) == 0) {
77 malloc_printf("Initialization error");
78 return (test_status_fail
);
81 ret
= test_status_pass
;
83 for (; t
!= NULL
; t
= va_arg(ap
, test_t
*)) {
85 if (test_status
> ret
)
90 malloc_printf("--- %s: %u/%u, %s: %u/%u, %s: %u/%u ---\n",
91 test_status_string(test_status_pass
),
92 test_counts
[test_status_pass
], test_count
,
93 test_status_string(test_status_skip
),
94 test_counts
[test_status_skip
], test_count
,
95 test_status_string(test_status_fail
),
96 test_counts
[test_status_fail
], test_count
);
102 p_test_fail(const char *prefix
, const char *message
)
105 malloc_cprintf(NULL
, NULL
, "%s%s\n", prefix
, message
);
106 test_status
= test_status_fail
;