xref: /llvm-project/libcxx/test/std/utilities/format/format.tuple/set_brackets.pass.cpp (revision 6a54dfbfe534276d644d7f9c027f0deeb748dd53)
1eb6e13cbSMark de Wever //===----------------------------------------------------------------------===//
2*6a54dfbfSLouis Dionne //
3eb6e13cbSMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4eb6e13cbSMark de Wever // See https://llvm.org/LICENSE.txt for license information.
5eb6e13cbSMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6eb6e13cbSMark de Wever //
7eb6e13cbSMark de Wever //===----------------------------------------------------------------------===//
8eb6e13cbSMark de Wever 
9eb6e13cbSMark de Wever // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10eb6e13cbSMark de Wever 
11520c7fbbSLouis Dionne // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
12af5fc4b4SMark de Wever 
13eb6e13cbSMark de Wever // <format>
14eb6e13cbSMark de Wever 
15eb6e13cbSMark de Wever // template<class charT, formattable<charT>... Ts>
16eb6e13cbSMark de Wever //   struct formatter<pair-or-tuple<Ts...>, charT>
17eb6e13cbSMark de Wever 
18eb6e13cbSMark de Wever // constexpr void constexpr void set_brackets(basic_string_view<charT> opening,
19f68a536aSMark de Wever //                                            basic_string_view<charT> closing) noexcept;
20eb6e13cbSMark de Wever 
21eb6e13cbSMark de Wever // Note this tests the basics of this function. It's tested in more detail in
22eb6e13cbSMark de Wever // the format functions tests.
23eb6e13cbSMark de Wever 
24eb6e13cbSMark de Wever #include <format>
25eb6e13cbSMark de Wever #include <tuple>
26eb6e13cbSMark de Wever #include <utility>
27eb6e13cbSMark de Wever 
28eb6e13cbSMark de Wever #include "make_string.h"
29eb6e13cbSMark de Wever 
30eb6e13cbSMark de Wever #define SV(S) MAKE_STRING_VIEW(CharT, S)
31eb6e13cbSMark de Wever 
32eb6e13cbSMark de Wever template <class CharT, class Arg>
33eb6e13cbSMark de Wever constexpr void test() {
34eb6e13cbSMark de Wever   std::formatter<Arg, CharT> formatter;
35eb6e13cbSMark de Wever   formatter.set_brackets(SV("open"), SV("close"));
36f68a536aSMark de Wever   // Note the SV macro may throw, so can't use it.
37f68a536aSMark de Wever   static_assert(noexcept(formatter.set_brackets(std::basic_string_view<CharT>{}, std::basic_string_view<CharT>{})));
38eb6e13cbSMark de Wever 
39eb6e13cbSMark de Wever   // Note there is no direct way to validate this function modified the object.
40eb6e13cbSMark de Wever }
41eb6e13cbSMark de Wever 
42eb6e13cbSMark de Wever template <class CharT>
43eb6e13cbSMark de Wever constexpr void test() {
44eb6e13cbSMark de Wever   test<CharT, std::tuple<int>>();
45eb6e13cbSMark de Wever   test<CharT, std::tuple<int, CharT>>();
46eb6e13cbSMark de Wever   test<CharT, std::pair<int, CharT>>();
473d334df5SLouis Dionne   test<CharT, std::tuple<int, CharT, bool>>();
48eb6e13cbSMark de Wever }
49eb6e13cbSMark de Wever 
50eb6e13cbSMark de Wever constexpr bool test() {
51eb6e13cbSMark de Wever   test<char>();
52eb6e13cbSMark de Wever #ifndef TEST_HAS_NO_WIDE_CHARACTERS
53eb6e13cbSMark de Wever   test<wchar_t>();
54eb6e13cbSMark de Wever #endif
55eb6e13cbSMark de Wever 
56eb6e13cbSMark de Wever   return true;
57eb6e13cbSMark de Wever }
58eb6e13cbSMark de Wever 
59eb6e13cbSMark de Wever int main(int, char**) {
60eb6e13cbSMark de Wever   test();
61eb6e13cbSMark de Wever   static_assert(test());
62eb6e13cbSMark de Wever 
63eb6e13cbSMark de Wever   return 0;
64eb6e13cbSMark de Wever }
65