blob: 02a262a0f29ba009a400500d663ec4e7efabfa45 [file] [log] [blame]
Howard Hinnantcbbf6332010-06-02 18:20:39 +00001//===----------------------------------------------------------------------===//
2//
Chandler Carruth57b08b02019-01-19 10:56:40 +00003// 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-exception
Howard Hinnantcbbf6332010-06-02 18:20:39 +00006//
7//===----------------------------------------------------------------------===//
8
9// <string>
10
11// wstring to_wstring(int val);
12// wstring to_wstring(unsigned val);
13// wstring to_wstring(long val);
14// wstring to_wstring(unsigned long val);
15// wstring to_wstring(long long val);
16// wstring to_wstring(unsigned long long val);
17// wstring to_wstring(float val);
18// wstring to_wstring(double val);
19// wstring to_wstring(long double val);
20
Marshall Clow5a127cd2018-12-18 23:19:00 +000021#include <limits>
Howard Hinnantcbbf6332010-06-02 18:20:39 +000022#include <string>
23#include <cassert>
24#include <sstream>
25
26template <class T>
27void
28test_signed()
29{
30 {
31 std::wstring s = std::to_wstring(T(0));
32 assert(s.size() == 1);
33 assert(s[s.size()] == 0);
34 assert(s == L"0");
35 }
36 {
37 std::wstring s = std::to_wstring(T(12345));
38 assert(s.size() == 5);
39 assert(s[s.size()] == 0);
40 assert(s == L"12345");
41 }
42 {
43 std::wstring s = std::to_wstring(T(-12345));
44 assert(s.size() == 6);
45 assert(s[s.size()] == 0);
46 assert(s == L"-12345");
47 }
48 {
49 std::wstring s = std::to_wstring(std::numeric_limits<T>::max());
50 assert(s.size() == std::numeric_limits<T>::digits10 + 1);
51 std::wistringstream is(s);
52 T t(0);
53 is >> t;
54 assert(t == std::numeric_limits<T>::max());
55 }
56 {
57 std::wstring s = std::to_wstring(std::numeric_limits<T>::min());
58 std::wistringstream is(s);
59 T t(0);
60 is >> t;
61 assert(t == std::numeric_limits<T>::min());
62 }
63}
64
65template <class T>
66void
67test_unsigned()
68{
69 {
70 std::wstring s = std::to_wstring(T(0));
71 assert(s.size() == 1);
72 assert(s[s.size()] == 0);
73 assert(s == L"0");
74 }
75 {
76 std::wstring s = std::to_wstring(T(12345));
77 assert(s.size() == 5);
78 assert(s[s.size()] == 0);
79 assert(s == L"12345");
80 }
81 {
82 std::wstring s = std::to_wstring(std::numeric_limits<T>::max());
83 assert(s.size() == std::numeric_limits<T>::digits10 + 1);
84 std::wistringstream is(s);
85 T t(0);
86 is >> t;
87 assert(t == std::numeric_limits<T>::max());
88 }
89}
90
91template <class T>
92void
93test_float()
94{
95 {
96 std::wstring s = std::to_wstring(T(0));
97 assert(s.size() == 8);
98 assert(s[s.size()] == 0);
99 assert(s == L"0.000000");
100 }
101 {
102 std::wstring s = std::to_wstring(T(12345));
103 assert(s.size() == 12);
104 assert(s[s.size()] == 0);
105 assert(s == L"12345.000000");
106 }
107 {
108 std::wstring s = std::to_wstring(T(-12345));
109 assert(s.size() == 13);
110 assert(s[s.size()] == 0);
111 assert(s == L"-12345.000000");
112 }
113}
114
JF Bastien2df59c52019-02-04 20:31:13 +0000115int main(int, char**)
Howard Hinnantcbbf6332010-06-02 18:20:39 +0000116{
117 test_signed<int>();
118 test_signed<long>();
119 test_signed<long long>();
120 test_unsigned<unsigned>();
121 test_unsigned<unsigned long>();
122 test_unsigned<unsigned long long>();
123 test_float<float>();
124 test_float<double>();
125 test_float<long double>();
JF Bastien2df59c52019-02-04 20:31:13 +0000126
127 return 0;
Howard Hinnantcbbf6332010-06-02 18:20:39 +0000128}