xref: /src/lib/libutil++/tests/stringf_test.cc (revision b3127a2dc25ac63cae8e33e6f3dbd3580644fe52)
1b3127a2dSJohn Baldwin /*-
2b3127a2dSJohn Baldwin  * SPDX-License-Identifier: BSD-2-Clause
3b3127a2dSJohn Baldwin  *
4b3127a2dSJohn Baldwin  * Copyright (c) 2025 Chelsio Communications, Inc.
5b3127a2dSJohn Baldwin  * Written by: John Baldwin <jhb@FreeBSD.org>
6b3127a2dSJohn Baldwin  */
7b3127a2dSJohn Baldwin 
8b3127a2dSJohn Baldwin #include <atf-c++.hpp>
9b3127a2dSJohn Baldwin #include <stdarg.h>
10b3127a2dSJohn Baldwin #include <stdio.h>
11b3127a2dSJohn Baldwin 
12b3127a2dSJohn Baldwin #include <libutil++.hh>
13b3127a2dSJohn Baldwin 
14b3127a2dSJohn Baldwin ATF_TEST_CASE_WITHOUT_HEAD(basic);
ATF_TEST_CASE_BODY(basic)15b3127a2dSJohn Baldwin ATF_TEST_CASE_BODY(basic)
16b3127a2dSJohn Baldwin {
17b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("foo", freebsd::stringf("foo"));
18b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("bar", freebsd::stringf("%s", "bar"));
19b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("42", freebsd::stringf("%u", 42));
20b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("0xdeadbeef", freebsd::stringf("%#x", 0xdeadbeef));
21b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("", freebsd::stringf(""));
22b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("this is a test", freebsd::stringf("this %s test",
23b3127a2dSJohn Baldwin 	    "is a"));
24b3127a2dSJohn Baldwin }
25b3127a2dSJohn Baldwin 
26b3127a2dSJohn Baldwin static std::string
stringv(const char * fmt,...)27b3127a2dSJohn Baldwin stringv(const char *fmt, ...)
28b3127a2dSJohn Baldwin {
29b3127a2dSJohn Baldwin 	va_list ap;
30b3127a2dSJohn Baldwin 
31b3127a2dSJohn Baldwin 	va_start(ap, fmt);
32b3127a2dSJohn Baldwin 	std::string str = freebsd::stringf(fmt, ap);
33b3127a2dSJohn Baldwin 	va_end(ap);
34b3127a2dSJohn Baldwin 	return (str);
35b3127a2dSJohn Baldwin }
36b3127a2dSJohn Baldwin 
37b3127a2dSJohn Baldwin ATF_TEST_CASE_WITHOUT_HEAD(va_list);
ATF_TEST_CASE_BODY(va_list)38b3127a2dSJohn Baldwin ATF_TEST_CASE_BODY(va_list)
39b3127a2dSJohn Baldwin {
40b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("foo", stringv("foo"));
41b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("bar", stringv("%s", "bar"));
42b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("42", stringv("%u", 42));
43b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("0xdeadbeef", stringv("%#x", 0xdeadbeef));
44b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("", stringv(""));
45b3127a2dSJohn Baldwin 	ATF_REQUIRE_EQ("this is a test", stringv("this %s test", "is a"));
46b3127a2dSJohn Baldwin }
47b3127a2dSJohn Baldwin 
ATF_INIT_TEST_CASES(tcs)48b3127a2dSJohn Baldwin ATF_INIT_TEST_CASES(tcs)
49b3127a2dSJohn Baldwin {
50b3127a2dSJohn Baldwin 	ATF_ADD_TEST_CASE(tcs, basic);
51b3127a2dSJohn Baldwin 	ATF_ADD_TEST_CASE(tcs, va_list);
52b3127a2dSJohn Baldwin }
53