111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The LLVM Compiler Infrastructure 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <string> 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(int val); 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(unsigned val); 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(long val); 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(unsigned long val); 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(long long val); 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(unsigned long long val); 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(float val); 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(double val); 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// wstring to_wstring(long double val); 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <string> 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert> 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <sstream> 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class T> 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttest_signed() 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(0)); 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 1); 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"0"); 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(12345)); 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 5); 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"12345"); 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(-12345)); 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 6); 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"-12345"); 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(std::numeric_limits<T>::max()); 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == std::numeric_limits<T>::digits10 + 1); 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wistringstream is(s); 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert T t(0); 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is >> t; 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(t == std::numeric_limits<T>::max()); 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(std::numeric_limits<T>::min()); 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wistringstream is(s); 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert T t(0); 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is >> t; 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(t == std::numeric_limits<T>::min()); 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class T> 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttest_unsigned() 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(0)); 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 1); 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"0"); 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(12345)); 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 5); 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"12345"); 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(std::numeric_limits<T>::max()); 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == std::numeric_limits<T>::digits10 + 1); 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wistringstream is(s); 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert T t(0); 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is >> t; 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(t == std::numeric_limits<T>::max()); 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class T> 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttest_float() 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(0)); 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 8); 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"0.000000"); 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(12345)); 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 12); 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"12345.000000"); 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::wstring s = std::to_wstring(T(-12345)); 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s.size() == 13); 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s[s.size()] == 0); 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(s == L"-12345.000000"); 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main() 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_signed<int>(); 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_signed<long>(); 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_signed<long long>(); 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_unsigned<unsigned>(); 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_unsigned<unsigned long>(); 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_unsigned<unsigned long long>(); 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_float<float>(); 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_float<double>(); 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test_float<long double>(); 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 127