1e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans#include "test/jemalloc_test.h"
2e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
3e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_BEGIN(test_pow2_ceil)
4e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans{
5e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	unsigned i, pow2;
6e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	size_t x;
7e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
8e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	assert_zu_eq(pow2_ceil(0), 0, "Unexpected result");
9e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
10e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	for (i = 0; i < sizeof(size_t) * 8; i++) {
11e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		assert_zu_eq(pow2_ceil(ZU(1) << i), ZU(1) << i,
12e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		    "Unexpected result");
13e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	}
14e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
15e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	for (i = 2; i < sizeof(size_t) * 8; i++) {
16e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		assert_zu_eq(pow2_ceil((ZU(1) << i) - 1), ZU(1) << i,
17e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		    "Unexpected result");
18e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	}
19e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
20e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	for (i = 0; i < sizeof(size_t) * 8 - 1; i++) {
21e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		assert_zu_eq(pow2_ceil((ZU(1) << i) + 1), ZU(1) << (i+1),
22e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		    "Unexpected result");
23e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	}
24e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
25e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	for (pow2 = 1; pow2 < 25; pow2++) {
26e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		for (x = (ZU(1) << (pow2-1)) + 1; x <= ZU(1) << pow2; x++) {
27e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans			assert_zu_eq(pow2_ceil(x), ZU(1) << pow2,
28e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans			    "Unexpected result, x=%zu", x);
29e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		}
30e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	}
31e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans}
32e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_END
33e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
34e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_BEGIN(test_malloc_strtoumax_no_endptr)
35e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans{
36e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	int err;
37e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
38e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	set_errno(0);
39e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	assert_ju_eq(malloc_strtoumax("0", NULL, 0), 0, "Unexpected result");
40e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	err = get_errno();
41e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	assert_d_eq(err, 0, "Unexpected failure");
42e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans}
43e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_END
44e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
45e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_BEGIN(test_malloc_strtoumax)
46e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans{
47e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	struct test_s {
48e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		const char *input;
49e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		const char *expected_remainder;
50e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		int base;
51e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		int expected_errno;
52e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		const char *expected_errno_name;
53e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		uintmax_t expected_x;
54e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	};
55da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans#define	ERR(e)		e, #e
56da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans#define	KUMAX(x)	((uintmax_t)x##ULL)
57e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	struct test_s tests[] = {
58e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		{"0",		"0",	-1,	ERR(EINVAL),	UINTMAX_MAX},
59e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		{"0",		"0",	1,	ERR(EINVAL),	UINTMAX_MAX},
60e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		{"0",		"0",	37,	ERR(EINVAL),	UINTMAX_MAX},
61e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
62e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		{"",		"",	0,	ERR(EINVAL),	UINTMAX_MAX},
63e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		{"+",		"+",	0,	ERR(EINVAL),	UINTMAX_MAX},
64e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		{"++3",		"++3",	0,	ERR(EINVAL),	UINTMAX_MAX},
65e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		{"-",		"-",	0,	ERR(EINVAL),	UINTMAX_MAX},
66e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
67da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"42",		"",	0,	ERR(0),		KUMAX(42)},
68da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"+42",		"",	0,	ERR(0),		KUMAX(42)},
69da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"-42",		"",	0,	ERR(0),		KUMAX(-42)},
70da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"042",		"",	0,	ERR(0),		KUMAX(042)},
71da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"+042",	"",	0,	ERR(0),		KUMAX(042)},
72da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"-042",	"",	0,	ERR(0),		KUMAX(-042)},
73da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0x42",	"",	0,	ERR(0),		KUMAX(0x42)},
74da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"+0x42",	"",	0,	ERR(0),		KUMAX(0x42)},
75da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"-0x42",	"",	0,	ERR(0),		KUMAX(-0x42)},
76da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans
77da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0",		"",	0,	ERR(0),		KUMAX(0)},
78da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"1",		"",	0,	ERR(0),		KUMAX(1)},
79da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans
80da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"42",		"",	0,	ERR(0),		KUMAX(42)},
81da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{" 42",		"",	0,	ERR(0),		KUMAX(42)},
82da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"42 ",		" ",	0,	ERR(0),		KUMAX(42)},
83da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0x",		"x",	0,	ERR(0),		KUMAX(0)},
84da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"42x",		"x",	0,	ERR(0),		KUMAX(42)},
85da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans
86da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"07",		"",	0,	ERR(0),		KUMAX(7)},
87da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"010",		"",	0,	ERR(0),		KUMAX(8)},
88da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"08",		"8",	0,	ERR(0),		KUMAX(0)},
89da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0_",		"_",	0,	ERR(0),		KUMAX(0)},
90da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans
91da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0x",		"x",	0,	ERR(0),		KUMAX(0)},
92da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0X",		"X",	0,	ERR(0),		KUMAX(0)},
93da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0xg",		"xg",	0,	ERR(0),		KUMAX(0)},
94da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0XA",		"",	0,	ERR(0),		KUMAX(10)},
95da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans
96da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"010",		"",	10,	ERR(0),		KUMAX(10)},
97da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0x3",		"x3",	10,	ERR(0),		KUMAX(0)},
98da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans
99da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"12",		"2",	2,	ERR(0),		KUMAX(1)},
100da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"78",		"8",	8,	ERR(0),		KUMAX(7)},
101da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"9a",		"a",	10,	ERR(0),		KUMAX(9)},
102da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"9A",		"A",	10,	ERR(0),		KUMAX(9)},
103da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"fg",		"g",	16,	ERR(0),		KUMAX(15)},
104da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"FG",		"G",	16,	ERR(0),		KUMAX(15)},
105da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0xfg",	"g",	16,	ERR(0),		KUMAX(15)},
106da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"0XFG",	"G",	16,	ERR(0),		KUMAX(15)},
107da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"z_",		"_",	36,	ERR(0),		KUMAX(35)},
108da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans		{"Z_",		"_",	36,	ERR(0),		KUMAX(35)}
109e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	};
110e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans#undef ERR
111da74e77beefbc6ea0f9d7dbf663bc5df48fbd887Jason Evans#undef KUMAX
112e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	unsigned i;
113e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
114e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	for (i = 0; i < sizeof(tests)/sizeof(struct test_s); i++) {
115e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		struct test_s *test = &tests[i];
116e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		int err;
117e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		uintmax_t result;
118e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		char *remainder;
119e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
120e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		set_errno(0);
121e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		result = malloc_strtoumax(test->input, &remainder, test->base);
122e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		err = get_errno();
123e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		assert_d_eq(err, test->expected_errno,
124e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		    "Expected errno %s for \"%s\", base %d",
125e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		    test->expected_errno_name, test->input, test->base);
126e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		assert_str_eq(remainder, test->expected_remainder,
127e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		    "Unexpected remainder for \"%s\", base %d",
128e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		    test->input, test->base);
129e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		if (err == 0) {
130e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans			assert_ju_eq(result, test->expected_x,
131e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans			    "Unexpected result for \"%s\", base %d",
132e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans			    test->input, test->base);
133e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		}
134e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	}
135e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans}
136e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_END
137e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
138e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_BEGIN(test_malloc_snprintf_truncated)
139e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans{
140e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans#define	BUFLEN	15
141e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	char buf[BUFLEN];
142e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	int result;
143e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	size_t len;
144b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define TEST(expected_str_untruncated, ...) do {			\
145b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey	result = malloc_snprintf(buf, len, __VA_ARGS__);		\
146e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	assert_d_eq(strncmp(buf, expected_str_untruncated, len-1), 0,	\
147e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    "Unexpected string inequality (\"%s\" vs \"%s\")",		\
148e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    buf, expected_str_untruncated);		\
149e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	assert_d_eq(result, strlen(expected_str_untruncated),		\
150e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    "Unexpected result");					\
151e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans} while (0)
152e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
153e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	for (len = 1; len < BUFLEN; len++) {
154e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("012346789",	"012346789");
155e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a0123b",		"a%sb", "0123");
156e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a01234567",	"a%s%s", "0123", "4567");
157e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a0123  ",		"a%-6s", "0123");
158e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a  0123",		"a%6s", "0123");
159e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a   012",		"a%6.3s", "0123");
160e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a   012",		"a%*.*s", 6, 3, "0123");
161e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a 123b",		"a% db", 123);
162e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a123b",		"a%-db", 123);
163e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a-123b",		"a%-db", -123);
164e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans		TEST("a+123b",		"a%+db", 123);
165e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	}
166e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans#undef BUFLEN
167e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans#undef TEST
168e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans}
169e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_END
170e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
171e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_BEGIN(test_malloc_snprintf)
172e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans{
173e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans#define	BUFLEN	128
174e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	char buf[BUFLEN];
175e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	int result;
176b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define	TEST(expected_str, ...) do {					\
177b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey	result = malloc_snprintf(buf, sizeof(buf), __VA_ARGS__);	\
178e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	assert_str_eq(buf, expected_str, "Unexpected output");		\
179e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	assert_d_eq(result, strlen(expected_str), "Unexpected result");	\
180e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans} while (0)
181e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
182e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("hello", "hello");
183e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
1840c4e743eaf2ab6bcfd56e002fb82f95801b9292eJason Evans	TEST("50%, 100%", "50%%, %d%%", 100);
1850c4e743eaf2ab6bcfd56e002fb82f95801b9292eJason Evans
186e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a0123b", "a%sb", "0123");
187e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
188e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a 0123b", "a%5sb", "0123");
189e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a 0123b", "a%*sb", 5, "0123");
190e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
191e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a0123 b", "a%-5sb", "0123");
192e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a0123b", "a%*sb", -1, "0123");
193e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a0123 b", "a%*sb", -5, "0123");
194e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a0123 b", "a%-*sb", -5, "0123");
195e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
196e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a012b", "a%.3sb", "0123");
197e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a012b", "a%.*sb", 3, "0123");
198e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a0123b", "a%.*sb", -3, "0123");
199e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
200e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a  012b", "a%5.3sb", "0123");
201e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a  012b", "a%5.*sb", 3, "0123");
202e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a  012b", "a%*.3sb", 5, "0123");
203e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a  012b", "a%*.*sb", 5, 3, "0123");
204e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("a 0123b", "a%*.*sb", 5, -3, "0123");
205e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
206e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_abcd_", "_%x_", 0xabcd);
207e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0xabcd_", "_%#x_", 0xabcd);
208e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%o_", 01234);
209e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_01234_", "_%#o_", 01234);
210e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%u_", 1234);
211e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
212e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%d_", 1234);
213e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_ 1234_", "_% d_", 1234);
214e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_+1234_", "_%+d_", 1234);
215e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%d_", -1234);
216e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_% d_", -1234);
217e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%+d_", -1234);
218e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
219e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%d_", -1234);
220e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%d_", 1234);
221e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%i_", -1234);
222e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%i_", 1234);
223e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_01234_", "_%#o_", 01234);
224e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%u_", 1234);
225e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0x1234abc_", "_%#x_", 0x1234abc);
226e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0X1234ABC_", "_%#X_", 0x1234abc);
227e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_c_", "_%c_", 'c');
228e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_string_", "_%s_", "string");
229e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0x42_", "_%p_", ((void *)0x42));
230e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
231e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%ld_", ((long)-1234));
232e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%ld_", ((long)1234));
233e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%li_", ((long)-1234));
234e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%li_", ((long)1234));
235e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_01234_", "_%#lo_", ((long)01234));
236e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%lu_", ((long)1234));
237e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0x1234abc_", "_%#lx_", ((long)0x1234abc));
238e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0X1234ABC_", "_%#lX_", ((long)0x1234ABC));
239e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
240e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%lld_", ((long long)-1234));
241e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%lld_", ((long long)1234));
242e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%lli_", ((long long)-1234));
243e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%lli_", ((long long)1234));
244e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_01234_", "_%#llo_", ((long long)01234));
245e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%llu_", ((long long)1234));
246e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0x1234abc_", "_%#llx_", ((long long)0x1234abc));
247e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0X1234ABC_", "_%#llX_", ((long long)0x1234ABC));
248e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
249e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%qd_", ((long long)-1234));
250e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%qd_", ((long long)1234));
251e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%qi_", ((long long)-1234));
252e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%qi_", ((long long)1234));
253e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_01234_", "_%#qo_", ((long long)01234));
254e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%qu_", ((long long)1234));
255e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0x1234abc_", "_%#qx_", ((long long)0x1234abc));
256e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0X1234ABC_", "_%#qX_", ((long long)0x1234ABC));
257e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
258e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%jd_", ((intmax_t)-1234));
259e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%jd_", ((intmax_t)1234));
260e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%ji_", ((intmax_t)-1234));
261e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%ji_", ((intmax_t)1234));
262e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_01234_", "_%#jo_", ((intmax_t)01234));
263e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%ju_", ((intmax_t)1234));
264e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0x1234abc_", "_%#jx_", ((intmax_t)0x1234abc));
265e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0X1234ABC_", "_%#jX_", ((intmax_t)0x1234ABC));
266e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
267e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%td_", ((ptrdiff_t)1234));
268e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%td_", ((ptrdiff_t)-1234));
269e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%ti_", ((ptrdiff_t)1234));
270e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%ti_", ((ptrdiff_t)-1234));
271e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
272e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%zd_", ((ssize_t)-1234));
273e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%zd_", ((ssize_t)1234));
274e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_-1234_", "_%zi_", ((ssize_t)-1234));
275e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%zi_", ((ssize_t)1234));
276e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_01234_", "_%#zo_", ((ssize_t)01234));
277e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_1234_", "_%zu_", ((ssize_t)1234));
278e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0x1234abc_", "_%#zx_", ((ssize_t)0x1234abc));
279e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	TEST("_0X1234ABC_", "_%#zX_", ((ssize_t)0x1234ABC));
280e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans#undef BUFLEN
281e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans}
282e18c25d23de0e845f0ee7e11d02c1be044738a3cJason EvansTEST_END
283e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
284e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evansint
285e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evansmain(void)
286e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans{
287e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans
288e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	return (test(
289e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    test_pow2_ceil,
290e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    test_malloc_strtoumax_no_endptr,
291e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    test_malloc_strtoumax,
292e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    test_malloc_snprintf_truncated,
293e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans	    test_malloc_snprintf));
294e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans}
295