//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // test: // template // basic_string // to_string(charT zero = charT('0'), charT one = charT('1')) const; // constexpr since C++23 // // template // basic_string > to_string() const; // constexpr since C++23 // // template // basic_string, allocator > to_string() const; // constexpr since C++23 // // basic_string, allocator > to_string() const; // constexpr since C++23 #include #include #include #include // for std::allocator #include #include #include "../bitset_test_cases.h" #include "test_macros.h" template TEST_CONSTEXPR_CXX23 void check_equal(std::basic_string const& s, std::bitset const& b, CharT zero, CharT one) { assert(s.size() == b.size()); for (std::size_t i = 0; i < b.size(); ++i) { if (b[i]) { assert(s[b.size() - 1 - i] == one); } else { assert(s[b.size() - 1 - i] == zero); } } } template TEST_CONSTEXPR_CXX23 bool test_to_string() { std::vector > const cases = get_test_cases(); for (std::size_t c = 0; c != cases.size(); ++c) { std::bitset const v = cases[c]; { std::string s = v.template to_string(); check_equal(s, v, '0', '1'); } { std::string s = v.to_string(); check_equal(s, v, '0', '1'); } { std::string s = v.template to_string('0'); check_equal(s, v, '0', '1'); } { std::string s = v.to_string('0'); check_equal(s, v, '0', '1'); } { std::string s = v.template to_string('0', '1'); check_equal(s, v, '0', '1'); } { std::string s = v.to_string('0', '1'); check_equal(s, v, '0', '1'); } { std::string s = v.to_string('x', 'y'); check_equal(s, v, 'x', 'y'); } } return true; } #ifndef TEST_HAS_NO_WIDE_CHARACTERS template TEST_CONSTEXPR_CXX23 bool test_to_string_wchar() { std::vector > const cases = get_test_cases(); for (std::size_t c = 0; c != cases.size(); ++c) { std::bitset const v = cases[c]; { std::wstring s = v.template to_string, std::allocator >(); check_equal(s, v, L'0', L'1'); } { std::wstring s = v.template to_string >(); check_equal(s, v, L'0', L'1'); } { std::wstring s = v.template to_string, std::allocator >('0'); check_equal(s, v, L'0', L'1'); } { std::wstring s = v.template to_string >('0'); check_equal(s, v, L'0', L'1'); } { std::wstring s = v.template to_string, std::allocator >('0', '1'); check_equal(s, v, L'0', L'1'); } { std::wstring s = v.template to_string >('0', '1'); check_equal(s, v, L'0', L'1'); } } return true; } #endif int main(int, char**) { test_to_string<0>(); test_to_string<1>(); test_to_string<31>(); test_to_string<32>(); test_to_string<33>(); test_to_string<63>(); test_to_string<64>(); test_to_string<65>(); test_to_string<1000>(); // not in constexpr because of constexpr evaluation step limits #if TEST_STD_VER > 20 static_assert(test_to_string<0>()); static_assert(test_to_string<1>()); static_assert(test_to_string<31>()); static_assert(test_to_string<32>()); static_assert(test_to_string<33>()); static_assert(test_to_string<63>()); static_assert(test_to_string<64>()); static_assert(test_to_string<65>()); #endif #ifndef TEST_HAS_NO_WIDE_CHARACTERS test_to_string_wchar<0>(); test_to_string_wchar<1>(); test_to_string_wchar<31>(); test_to_string_wchar<32>(); test_to_string_wchar<33>(); test_to_string_wchar<63>(); test_to_string_wchar<64>(); test_to_string_wchar<65>(); test_to_string_wchar<1000>(); // not in constexpr because of constexpr evaluation step limits #if TEST_STD_VER > 20 static_assert(test_to_string_wchar<0>()); static_assert(test_to_string_wchar<1>()); static_assert(test_to_string_wchar<31>()); static_assert(test_to_string_wchar<32>()); static_assert(test_to_string_wchar<33>()); static_assert(test_to_string_wchar<63>()); #endif #endif return 0; }