blob: a96abf2e7054a9ae83cb78a659f11666d6215644 [file] [log] [blame]
Howard Hinnantcbbf6332010-06-02 18:20:39 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <string>
11
12// wstring to_wstring(int val);
13// wstring to_wstring(unsigned val);
14// wstring to_wstring(long val);
15// wstring to_wstring(unsigned long val);
16// wstring to_wstring(long long val);
17// wstring to_wstring(unsigned long long val);
18// wstring to_wstring(float val);
19// wstring to_wstring(double val);
20// wstring to_wstring(long double val);
21
22#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
115int main()
116{
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>();
126}