brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · fff5ede Raw
120 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// XFAIL: no-wide-characters10 11// <string>12 13// wstring to_wstring(int val);14// wstring to_wstring(unsigned val);15// wstring to_wstring(long val);16// wstring to_wstring(unsigned long val);17// wstring to_wstring(long long val);18// wstring to_wstring(unsigned long long val);19// wstring to_wstring(float val);20// wstring to_wstring(double val);21// wstring to_wstring(long double val);22 23#include <string>24#include <cassert>25#include <limits>26 27#include "parse_integer.h"28#include "test_macros.h"29 30template <class T>31void test_signed() {32  {33    std::wstring s = std::to_wstring(T(0));34    assert(s.size() == 1);35    assert(s[s.size()] == 0);36    assert(s == L"0");37  }38  {39    std::wstring s = std::to_wstring(T(12345));40    assert(s.size() == 5);41    assert(s[s.size()] == 0);42    assert(s == L"12345");43  }44  {45    std::wstring s = std::to_wstring(T(-12345));46    assert(s.size() == 6);47    assert(s[s.size()] == 0);48    assert(s == L"-12345");49  }50  {51    std::wstring s = std::to_wstring(std::numeric_limits<T>::max());52    assert(s.size() == std::numeric_limits<T>::digits10 + 1);53    T t = parse_integer<T>(s);54    assert(t == std::numeric_limits<T>::max());55  }56  {57    std::wstring s = std::to_wstring(std::numeric_limits<T>::min());58    T t            = parse_integer<T>(s);59    assert(t == std::numeric_limits<T>::min());60  }61}62 63template <class T>64void test_unsigned() {65  {66    std::wstring s = std::to_wstring(T(0));67    assert(s.size() == 1);68    assert(s[s.size()] == 0);69    assert(s == L"0");70  }71  {72    std::wstring s = std::to_wstring(T(12345));73    assert(s.size() == 5);74    assert(s[s.size()] == 0);75    assert(s == L"12345");76  }77  {78    std::wstring s = std::to_wstring(std::numeric_limits<T>::max());79    assert(s.size() == std::numeric_limits<T>::digits10 + 1);80    T t = parse_integer<T>(s);81    assert(t == std::numeric_limits<T>::max());82  }83}84 85template <class T>86void test_float() {87  {88    std::wstring s = std::to_wstring(T(0));89    assert(s.size() == 8);90    assert(s[s.size()] == 0);91    assert(s == L"0.000000");92  }93  {94    std::wstring s = std::to_wstring(T(12345));95    assert(s.size() == 12);96    assert(s[s.size()] == 0);97    assert(s == L"12345.000000");98  }99  {100    std::wstring s = std::to_wstring(T(-12345));101    assert(s.size() == 13);102    assert(s[s.size()] == 0);103    assert(s == L"-12345.000000");104  }105}106 107int main(int, char**) {108  test_signed<int>();109  test_signed<long>();110  test_signed<long long>();111  test_unsigned<unsigned>();112  test_unsigned<unsigned long>();113  test_unsigned<unsigned long long>();114  test_float<float>();115  test_float<double>();116  test_float<long double>();117 118  return 0;119}120