test.c revision e3f27cfced57ac9c3b5306947d37411479a68c2e
1#include "test/jemalloc_test.h"
2
3static unsigned		test_count = 0;
4static test_status_t	test_counts[test_status_count] = {0, 0, 0};
5static test_status_t	test_status = test_status_pass;
6static const char *	test_name = "";
7
8JEMALLOC_ATTR(format(printf, 1, 2))
9void
10test_skip(const char *format, ...)
11{
12	va_list ap;
13
14	va_start(ap, format);
15	malloc_vcprintf(NULL, NULL, format, ap);
16	va_end(ap);
17	malloc_printf("\n");
18	test_status = test_status_skip;
19}
20
21JEMALLOC_ATTR(format(printf, 1, 2))
22void
23test_fail(const char *format, ...)
24{
25	va_list ap;
26
27	va_start(ap, format);
28	malloc_vcprintf(NULL, NULL, format, ap);
29	va_end(ap);
30	malloc_printf("\n");
31	test_status = test_status_fail;
32}
33
34static const char *
35test_status_string(test_status_t test_status)
36{
37
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();
43	}
44}
45
46void
47p_test_init(const char *name)
48{
49
50	test_count++;
51	test_status = test_status_pass;
52	test_name = name;
53}
54
55void
56p_test_fini(void)
57{
58
59	test_counts[test_status]++;
60	malloc_printf("%s: %s\n", test_name, test_status_string(test_status));
61}
62
63test_status_t
64p_test(test_t* t, ...)
65{
66	test_status_t ret = test_status_pass;
67	va_list ap;
68
69	va_start(ap, t);
70	for (; t != NULL; t = va_arg(ap, test_t*)) {
71		t();
72		if (test_status > ret)
73			ret = test_status;
74	}
75	va_end(ap);
76
77	malloc_printf("--- %s: %u/%u, %s: %u/%u, %s: %u/%u ---\n",
78	    test_status_string(test_status_pass),
79	    test_counts[test_status_pass], test_count,
80	    test_status_string(test_status_skip),
81	    test_counts[test_status_skip], test_count,
82	    test_status_string(test_status_fail),
83	    test_counts[test_status_fail], test_count);
84
85	return (ret);
86}
87
88void
89p_test_fail(const char *prefix, const char *message)
90{
91
92	malloc_cprintf(NULL, NULL, "%s%s\n", prefix, message);
93	test_status = test_status_fail;
94}
95