brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 809de12 Raw
159 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// test:10 11// template <class charT, class traits, class Allocator>12// basic_string<charT, traits, Allocator>13// to_string(charT zero = charT('0'), charT one = charT('1')) const; // constexpr since C++2314//15// template <class charT, class traits>16// basic_string<charT, traits, allocator<charT> > to_string() const; // constexpr since C++2317//18// template <class charT>19// basic_string<charT, char_traits<charT>, allocator<charT> > to_string() const; // constexpr since C++2320//21// basic_string<char, char_traits<char>, allocator<char> > to_string() const; // constexpr since C++2322 23#include <bitset>24#include <cassert>25#include <cstddef>26#include <memory> // for std::allocator27#include <string>28#include <vector>29 30#include "../bitset_test_cases.h"31#include "test_macros.h"32 33template <class CharT, std::size_t N>34TEST_CONSTEXPR_CXX23 void check_equal(std::basic_string<CharT> const& s, std::bitset<N> const& b, CharT zero, CharT one) {35    assert(s.size() == b.size());36    for (std::size_t i = 0; i < b.size(); ++i) {37        if (b[i]) {38            assert(s[b.size() - 1 - i] == one);39        } else {40            assert(s[b.size() - 1 - i] == zero);41        }42    }43}44 45template <std::size_t N>46TEST_CONSTEXPR_CXX23 bool test_to_string() {47    std::vector<std::bitset<N> > const cases = get_test_cases<N>();48    for (std::size_t c = 0; c != cases.size(); ++c) {49        std::bitset<N> const v = cases[c];50        {51            std::string s = v.template to_string<char>();52            check_equal(s, v, '0', '1');53        }54        {55            std::string s = v.to_string();56            check_equal(s, v, '0', '1');57        }58        {59            std::string s = v.template to_string<char>('0');60            check_equal(s, v, '0', '1');61        }62        {63            std::string s = v.to_string('0');64            check_equal(s, v, '0', '1');65        }66        {67            std::string s = v.template to_string<char>('0', '1');68            check_equal(s, v, '0', '1');69        }70        {71            std::string s = v.to_string('0', '1');72            check_equal(s, v, '0', '1');73        }74        {75            std::string s = v.to_string('x', 'y');76            check_equal(s, v, 'x', 'y');77        }78    }79    return true;80}81 82#ifndef TEST_HAS_NO_WIDE_CHARACTERS83template <std::size_t N>84TEST_CONSTEXPR_CXX23 bool test_to_string_wchar() {85    std::vector<std::bitset<N> > const cases = get_test_cases<N>();86    for (std::size_t c = 0; c != cases.size(); ++c) {87        std::bitset<N> const v = cases[c];88        {89            std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >();90            check_equal(s, v, L'0', L'1');91        }92        {93            std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >();94            check_equal(s, v, L'0', L'1');95        }96        {97            std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >('0');98            check_equal(s, v, L'0', L'1');99        }100        {101            std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >('0');102            check_equal(s, v, L'0', L'1');103        }104        {105            std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >('0', '1');106            check_equal(s, v, L'0', L'1');107        }108        {109            std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >('0', '1');110            check_equal(s, v, L'0', L'1');111        }112    }113    return true;114}115#endif116 117int main(int, char**) {118  test_to_string<0>();119  test_to_string<1>();120  test_to_string<31>();121  test_to_string<32>();122  test_to_string<33>();123  test_to_string<63>();124  test_to_string<64>();125  test_to_string<65>();126  test_to_string<1000>(); // not in constexpr because of constexpr evaluation step limits127#if TEST_STD_VER > 20128  static_assert(test_to_string<0>());129  static_assert(test_to_string<1>());130  static_assert(test_to_string<31>());131  static_assert(test_to_string<32>());132  static_assert(test_to_string<33>());133  static_assert(test_to_string<63>());134  static_assert(test_to_string<64>());135  static_assert(test_to_string<65>());136#endif137 138#ifndef TEST_HAS_NO_WIDE_CHARACTERS139  test_to_string_wchar<0>();140  test_to_string_wchar<1>();141  test_to_string_wchar<31>();142  test_to_string_wchar<32>();143  test_to_string_wchar<33>();144  test_to_string_wchar<63>();145  test_to_string_wchar<64>();146  test_to_string_wchar<65>();147  test_to_string_wchar<1000>(); // not in constexpr because of constexpr evaluation step limits148#if TEST_STD_VER > 20149  static_assert(test_to_string_wchar<0>());150  static_assert(test_to_string_wchar<1>());151  static_assert(test_to_string_wchar<31>());152  static_assert(test_to_string_wchar<32>());153  static_assert(test_to_string_wchar<33>());154  static_assert(test_to_string_wchar<63>());155#endif156#endif157  return 0;158}159