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