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